在 Ubuntu 上,SELinux 默认是不启用的,Ubuntu 传统上使用的是 AppArmor。如果你确实需要在 Ubuntu 上配置 SELinux,需要手动安装并启用。下面给你一个从安装到基本配置的完整说明。
cat /proc/1/attr/current
system_u:system_r:kernel_t 之类 → SELinux 已启用unconfined 或 AppArmor 相关 → 当前不是 SELinux查看是否启用了 AppArmor:
aa-status
sudo apt update
sudo apt install selinux selinux-utils selinux-basics auditd
常用包说明:
selinux:SELinux 核心selinux-utils:semanage、getenforce、setenforceselinux-basics:基础工具auditd:SELinux 审计日志(非常重要)sudo selinux-activate
这会自动修改:
/etc/default/grub然后更新 grub:
sudo update-grub
编辑配置文件:
sudo nano /etc/selinux/config
推荐初始配置(先不要直接 enforcing):
SELINUX=permissive
SELINUXTYPE=default
模式说明:
| 模式 | 说明 |
|---|---|
| enforcing | 强制,违反规则会拒绝 |
| permissive | 只记录,不拒绝(推荐首次使用) |
| disabled | 关闭 |
sudo reboot
getenforce
输出应为:
PermissiveEnforcingsestatus
示例输出:
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
Current mode: permissive
Mode from config file: permissive
Policy version: 31
ls -Z
ps -Z
示例:
system_u:object_r:usr_t:s0
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
sudo restorecon -Rv /var/www/html
sudo semanage port -a -t http_port_t -p tcp 8080
查看端口规则:
semanage port -l | grep http
sudo ausearch -m avc -ts recent
或用:
sudo journalctl -t audit
sudo ausearch -m avc -ts recent | audit2allow -M mypolicy
sudo semodule -i mypolicy.pp
确认日志中无明显错误后:
sudo setenforce 1
永久生效:
SELINUX=enforcing
sudo systemctl disable apparmor
sudo reboot
| 场景 | 建议 |
|---|---|
| Ubuntu 桌面 | ✅ 使用 AppArmor |
| Ubuntu 服务器 | ⚠️ SELinux 可用,但需经验 |
| 学习 SELinux | ✅ 推荐 CentOS / Rocky / Alma |
| 生产环境 | ✅ RHEL 系更稳妥 |
如果你愿意,我可以:
只要告诉我你的使用场景即可。