女士们先生们,大家好,我需要你们的帮助。我有一个装有 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。