在 Ubuntu 上,SELinux 默认并不是启用的(Ubuntu 默认使用 AppArmor)。如果你遇到“SELinux 故障”,一般分几种情况:
getenforce
可能结果:
Enforcing:已启用并强制执行Permissive:仅记录不阻止Disabled:未启用(Ubuntu 常见)如果没有 getenforce 命令:
which selinuxenabled
selinuxenabled && echo "SELinux ON" || echo "SELinux OFF"
例如:
apt install selinux
并修改了 /etc/selinux/config
例如:
*.pp 策略semanage、restoreconUbuntu 默认安全模块是 AppArmor
aa-status
ausearch -m avc -ts recent
或
journalctl -t setroubleshoot
如果没有 ausearch:
apt install policycoreutils
setenforce 0
0 = Permissive1 = Enforcing如果问题消失,基本可确认是 SELinux 策略问题。
sealert -a /var/log/audit/audit.log
安装:
apt install setroubleshoot
grep avc /var/log/audit/audit.log | audit2allow -m mypolicy
生成并加载:
grep avc /var/log/audit/audit.log | audit2allow -M mypolicy
semodule -i mypolicy.pp
常见于:
查看:
ls -Z /path
修复:
restorecon -Rv /path
aa-status
排查 AppArmor 问题:
dmesg | grep apparmor
journalctl | grep apparmor
编辑:
sudo nano /etc/selinux/config
内容:
SELINUX=disabled
然后重启。
| 现象 | 可能性 |
|---|---|
| Ubuntu 报错“permission denied” | 多半是 AppArmor |
getenforce 不存在 |
没装 SELinux |
setroubleshoot 报错 |
SELinux 已启用 |
| 从 CentOS 拷来的服务启动不了 | SELinux 上下文 |
如果你能贴出:
getenforce 输出我可以帮你 精确定位是哪一条 SELinux 策略在拦。