SELinux 启动失败(或启动后进入 disabled / permissive,而非 enforcing)通常由以下几类原因导致。我按「最常见 → 较少见」给你梳理,并附带排查方法。
如果内核编译时未开启 SELinux:
CONFIG_SECURITY_SELINUX=y
SELinux 根本无法启用。
检查方式:
grep SELINUX /boot/config-$(uname -r)
或
cat /proc/filesystems | grep selinux
✅ 解决:使用支持 SELinux 的内核(如 RHEL/CentOS 官方内核)
GRUB 中常见错误参数:
selinux=0
或
enforcing=0
检查方式:
cat /proc/cmdline
✅ 解决:
编辑 /etc/default/grub,删除 selinux=0
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
cat /etc/selinux/config
如果看到:
SELINUX=disabled
系统不会加载 SELinux 策略
✅ 解决:
SELINUX=enforcing
然后 必须重启
⚠️ 注意:从 disabled → enforcing 必须重启,不能 setenforce
SELinux 依赖 extended attributes:
mount | grep " / "
如果看到:
noacl / nouser_xattr
或文件系统是 vfat / ntfs / tmpfs
✅ 解决:
user_xattr常见于:
/etc/selinux检查:
ls /etc/selinux/targeted
rpm -V selinux-policy-targeted
✅ 解决:
yum reinstall selinux-policy-targeted
有时“看起来失败”其实只是:
getenforce
# Permissive
✅ 临时开启:
setenforce 1
日志中常见:
SELinux: Unable to load policy
查看:
dmesg | grep -i selinux
journalctl -b | grep selinux
✅ 解决:宿主机启用,容器中通常不启用
getenforce
sestatus
cat /etc/selinux/config
cat /proc/cmdline
dmesg | grep selinux
如果你愿意,可以把下面信息发我,我可以精确判断原因:
sestatus 输出dmesg | grep selinux 日志我可以一步步帮你修。