在 Ubuntu 上,需要先明确一个重要事实:
Ubuntu 默认并不使用 SELinux,而是使用 AppArmor。
SELinux 主要在 RHEL / CentOS / Rocky / Fedora 中默认启用。
所以调试 SELinux 前,先确认你当前系统状态。
getenforce
或:
sestatus
可能结果:
Disabled:SELinux 未启用(最常见)Permissive:启用但只记录不拦截Enforcing:真正生效(Ubuntu 上很少见)如果显示 command not found,说明 SELinux 工具未安装。
如果你确实需要在 Ubuntu 上使用 SELinux:
sudo apt update
sudo apt install selinux selinux-utils policycoreutils
编辑 GRUB:
sudo nano /etc/default/grub
在 GRUB_CMDLINE_LINUX 中加入:
selinux=1 security=selinux
更新 GRUB:
sudo update-grub
sudo setenforce 0
或编辑:
sudo nano /etc/selinux/config
SELINUX=permissive
SELINUXTYPE=default
重启:
sudo reboot
sudo ausearch -m avc -ts recent
或实时查看:
sudo tail -f /var/log/audit/audit.log
示例:
avc: denied { read } for pid=1234 comm="nginx" name="x" dev=sda1
sudo apt install setools
sudo sealert -a /var/log/audit/audit.log
会给出非常具体的修复建议。
sudo setenforce 0
确认问题是否消失,再定位策略问题。
sudo ausearch -m avc -ts recent | audit2allow -M mypolicy
sudo semodule -i mypolicy.pp
⚠️ 不建议直接上线,先分析是否安全。
如果你是为了安全加固 Ubuntu,强烈建议:
sudo aa-status
调试:
sudo aa-complain /usr/sbin/nginx
sudo aa-logprof
Ubuntu 官方文档、教程、工具都主要围绕 AppArmor。
| 场景 | 建议 |
|---|---|
| 新装 Ubuntu | 用 AppArmor |
| 从 CentOS 迁移 | 可启用 SELinux |
| 调试权限问题 | 先 setenforce 0 |
| 生产环境 | 用 Permissive 先观察 |
如果你愿意,可以告诉我:
我可以一步步帮你调。