在 CentOS 中 SELinux 启动失败(无法进入 enforcing / permissive 模式,或开机后仍然是 disabled),常见原因和排查方法如下:
SELinux 的启动配置在:
/etc/selinux/config
典型正确配置:
SELINUX=enforcing
SELINUXTYPE=targeted
❌ 常见错误:
SELINUX = enforcing(多了空格)SELINUXTYPE=wrong✅ 检查:
cat /etc/selinux/config
SELinux 只能在开机阶段启用,运行中无法从 disabled 切换到 enforcing。
如果原来是:
SELINUX=disabled
改完配置后 必须重启系统:
reboot
从 disabled 改为 enforcing 后,若从未打过标签,可能启动失败或进入 emergency 模式。
✅ 强制重新打标签:
touch /.autorelabel
reboot
系统重启后会自动标记整个文件系统(可能较慢)。
检查 /etc/default/grub 或 grub.cfg 中是否有:
selinux=0
✅ 正确应无该参数,或:
selinux=1
修改后:
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
以下情况会导致失败:
/ 分区是 ext2✅ 检查:
mount | grep ' / '
建议:ext4 / xfs
rpm -qa | grep selinux
缺少:
selinux-policy-targeted
✅ 安装:
yum install selinux-policy-targeted
查看状态:
sestatus
若显示:
SELinux status: disabled
说明 内核层未启用,不是服务问题。
# 1. 配置文件
cat /etc/selinux/config
# 2. 当前状态
sestatus
# 3. 是否打标签
ls -Z /
# 4. 内核参数
cat /proc/cmdline
# 5. 是否缺少策略
rpm -qa | grep selinux
| 现象 | 原因 |
|---|---|
| 开机卡在 emergency | 没打标签 |
| sestatus 显示 disabled | 没重启 / grub 禁用 |
| 修改 config 无效 | 没 reboot |
| 启动慢 | 正在 autorelabel |
如果你能提供:
sestatus 输出我可以直接帮你定位具体原因。