Useradd/groupadd 失败:将更改写入 /etc/passwd 和 /etc/group 时失败。上下文问题

Useradd/groupadd 失败:将更改写入 /etc/passwd 和 /etc/group 时失败。上下文问题

女士们先生们,大家好,我需要你们的帮助。我有一个装有 Ubuntu 18.04 LTS 的虚拟机,我正在尝试使用 SELinux 强制执行。我不得不从当前通用版本的 LTS 构建并安装自定义内核,并添加一些额外的标志。标准内核不支持 SELinux。第一个问题是:当 SELinux 强制执行或宽容时,我无法添加用户和组。如果我禁用它并重新启动 - 一切都很好。无论我是真正的 root,还是使用 sudo su,还是不受限制的用户,我都会遇到同样的问题。

root@hometest:~# id -Z
staff_u:staff_r:staff_t:s0

root@hometest:~# useradd testuser
useradd: failure while writing changes to /etc/passwd

/ 上没有空间

root@hometest:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        20G  6.4G   13G  35% /

权限

root@hometest:~# ls -alsdZ /etc /etc/passwd /etc/group /etc/shadow
12 drwxr-xr-x. 136 root root system_u:object_r:etc_t:s0 12288 Jul 27 16:25 /etc
4 -rw-rw-rw-.   1 root root system_u:object_r:etc_t:s0   977 Jul 25 10:25 /etc/group
4 -rw-rw-r--.   1 root root system_u:object_r:etc_t:s0  2184 Jul 25 10:17 /etc/passwd
4 -rw-r-----.   1 root shadow system_u:object_r:shadow_t:s0  1291 Jul 25 10:17 /etc/shadow


root@hometest:~# lsattr -d /etc /etc/passwd /etc/group
-----------I--e--- /etc
--------------e--- /etc/passwd
--------------e--- /etc/group
--------------e--- /etc/shadow

未找到任何可能有帮助的 SELinux 布尔值。系统根据默认策略标记。尝试恢复 /etc/passwd、/etc/shadow 和 /etc/grpup 的上下文 - 没有任何变化。

root@hometest:~# sestatus 
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             default
Current mode:                   permissive
Mode from config file:          permissive
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     requested (insecure)
Max kernel policy version:      31

来自日志的一些信息:

type=AVC msg=audit(1532674348.442:472): avc:  denied  { map } for  pid=1060 comm="useradd" path="/etc/passwd" dev="sda2" ino=131866 scontext=root:sysadm_r:useradd_t:s0 tcontext=system_u:object_r:etc_t:s0 tclass=file permissive=1
    Was caused by:
            Missing type enforcement (TE) allow rule.

            You can use audit2allow to generate a loadable module to allow this access.

type=AVC msg=audit(1532685061.535:1239): avc:  denied  { write } for  pid=2759 comm="useradd" path="/etc/passwd.2759" dev="sda2" ino=131279 scontext=staff_u:staff_r:staff_sudo_t:s0 tcontext=staff_u:object_r:etc_t:s0 tclass=file permissive=1
    Was caused by:
            Missing type enforcement (TE) allow rule.

            You can use audit2allow to generate a loadable module to allow this access.

我编译了一个完整的模块,其中包含在审计日志中找到的所有允许规则,安装了它,重新加载了策略,但它没有解决任何问题。我再次检查了日志,发现了一些新条目,并创建了一个模块。我尝试将 /etc/passwd 的上下文从 etc_t 更改为其他内容 - 但没有帮助。尝试使用斯特拉斯,但输出真的很长。我还能检查或尝试什么?Ubuntu 16.04 LTS 没有问题,18.04 LTS 有什么问题?我做错了什么?任何帮助都非常感谢。

答案1

好像是个bug,我也遇到过。

在 groupadd 上运行 strace,失败是在 groupadd 写入 /proc/thread-self/attr/fscreate 之后发生的

这是错误报告https://bugs.launchpad.net/ubuntu/+source/libselinux/+bug/1769301

八个月前报告,仍未修复。

Debian 和 Ubuntu 都不太支持 SELinux。如果您喜欢 SELinux,请考虑使用 Redhat 或 Centos。

相关内容