Ubuntu 上 SELinux 启动失败的定位与修复
一、常见症状与快速自检
getenforce(返回 Enforcing/Permissive/Disabled)与 sestatus(看 Loaded policy name、Current mode)。sudo ausearch -m avc -ts recent 或 grep -i "denied" /var/log/audit/audit.log;若未安装审计服务,可在 /var/log/messages 中检索。sudo setenforce 0(仅本次有效,重启后恢复配置)。二、无法进入系统时的紧急恢复步骤
selinux=0 或 enforcing=0(空格分隔),按 Ctrl+X 启动。sudo vim /etc/selinux/config,确保为
SELINUX=permissive(先恢复运行,便于排错)或 SELINUX=disabled(彻底关闭)SELINUXTYPE=targeted 误改为 disabled,该错误会直接导致 Failed to load SELinux policy 并无法启动。sudo reboot。getenforce 应为 Permissive/Disabled,sestatus 显示策略未加载或为宽容模式。三、根因与对应修复
配置误改导致策略无法加载
SELINUXTYPE=targeted 改成 disabled,或 SELINUX= 值非法。SELINUX=permissive 或 SELINUX=disabled,并确保 SELINUXTYPE=targeted(或 minimum/mls 之一)。策略或标签损坏
sudo setenforce 0,确认业务恢复。ausearch -m avc -ts recent 定位被拒主体/客体/操作。sudo audit2allow -M myservice 然后 sudo semodule -i myservice.pp;或按需调整布尔值:sudo setsebool -P <name> on/off。sudo restorecon -R /path。未安装或未正确启用 SELinux(误以为已启用)
sestatus 显示 disabled,但期望启用。sudo apt update && sudo apt install selinux-basics selinux-policy-defaultsudo selinux-activate/etc/default/grub 的 GRUB_CMDLINE_LINUX_DEFAULT 中加入 security=selinux,更新 GRUB:sudo update-grub,重启后 sestatus 应显示 enabled 且策略已加载。四、稳妥的排错顺序与建议
selinux=0 或 enforcing=0 临时进入系统,再决定是彻底关闭还是修复策略。SELINUX=permissive,用 ausearch -m avc 集中分析拒绝事件,配合 audit2allow 与 setsebool 做最小改动修复。SELINUX=enforcing 并持续观察日志。/etc/selinux/config 与关键业务目录的上下文(可用 semanage fcontext -l 查看,变更后用 restorecon 恢复)。