在 CentOS 中,SELinux “失效”通常不是真的坏掉了,而是被关闭、被绕过或配置不对。下面按最常见原因逐一说明,并给出排查方法。
getenforce
可能结果:
Enforcing ✅ 正常Permissive ⚠️ 只记录不拦截Disabled ❌ 已关闭(完全失效)查看启动状态:
sestatus
如果显示:
SELinux status: disabled
说明 内核层面已关闭
cat /etc/selinux/config
常见错误:
SELINUX=disabled
✅ 正确应为:
SELINUX=enforcing
⚠️ 注意:
从 disabled 改为 enforcing 必须重启系统
grep SELINUX /boot/config-$(uname -r)
应看到:
CONFIG_SECURITY_SELINUX=y
检查 grub:
cat /proc/cmdline | grep selinux
如果有:
selinux=0
或
enforcing=0
说明被内核参数关闭了。
修改:
vi /etc/default/grub
删除 selinux=0
然后:
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
rpm -qa | grep selinux-policy
应至少存在:
selinux-policy
selinux-policy-targeted
安装:
yum install selinux-policy-targeted
SELinux 依赖:
ext4xfs如果是:
vfatntfsSELinux 会自动失效或不生效
检查:
mount | grep " / "
容器中 SELinux 通常由宿主机控制
容器内 getenforce 不可信
很多云镜像默认:
SELINUX=permissive
| 现象 | 实际原因 |
|---|---|
| 服务能跑 | Permissive 模式 |
| 改了规则没用 | 没 restorecon |
| 重启又失效 | config 没改对 |
| 日志没报错 | 没开 auditd |
getenforce
sestatus
cat /etc/selinux/config
grep selinux /proc/cmdline
rpm -qa | grep selinux-policy
如果你愿意,可以贴出:
sestatus 输出/etc/selinux/config我可以帮你精准判断是哪种失效。