温馨提示×

ubuntu selinux故障如何排查

小樊
35
2026-10-07 06:53:03
栏目: 智能运维

在 Ubuntu 上,SELinux 默认并不是启用的(Ubuntu 默认使用 AppArmor)。如果你遇到“SELinux 故障”,一般分几种情况:


一、先确认是否是 SELinux 的问题

1. 检查 SELinux 是否启用

getenforce

可能结果:

  • Enforcing:已启用并强制执行
  • Permissive:仅记录不阻止
  • Disabled:未启用(Ubuntu 常见)

如果没有 getenforce 命令:

which selinuxenabled
selinuxenabled && echo "SELinux ON" || echo "SELinux OFF"

二、Ubuntu 上 SELinux 常见来源

1. 手动安装并启用了 SELinux

例如:

apt install selinux

并修改了 /etc/selinux/config

2. 从 CentOS/RHEL 迁移的系统和配置

例如:

  • 拷贝了 *.pp 策略
  • 使用了 semanage、restorecon

3. 实际是 AppArmor 问题(常被误认为是 SELinux)

Ubuntu 默认安全模块是 AppArmor

aa-status

三、SELinux 故障排查流程(通用)

1. 查看 SELinux 拒绝日志

ausearch -m avc -ts recent

或

journalctl -t setroubleshoot

如果没有 ausearch:

apt install policycoreutils

2. 临时关闭 SELinux 验证问题

setenforce 0
  • 0 = Permissive
  • 1 = Enforcing

如果问题消失,基本可确认是 SELinux 策略问题。


3. 使用 sealert 分析

sealert -a /var/log/audit/audit.log

安装:

apt install setroubleshoot

4. 根据 AVC 拒绝生成策略

grep avc /var/log/audit/audit.log | audit2allow -m mypolicy

生成并加载:

grep avc /var/log/audit/audit.log | audit2allow -M mypolicy
semodule -i mypolicy.pp

5. 文件上下文错误

常见于:

  • 网站目录
  • 自定义服务路径

查看:

ls -Z /path

修复:

restorecon -Rv /path

四、Ubuntu 推荐做法(重要)

✅ 推荐使用 AppArmor(默认)

aa-status

排查 AppArmor 问题:

dmesg | grep apparmor
journalctl | grep apparmor

五、如果你其实不想用 SELinux

彻底关闭 SELinux(Ubuntu)

编辑:

sudo nano /etc/selinux/config

内容:

SELINUX=disabled

然后重启。


六、快速判断总结

现象 可能性
Ubuntu 报错“permission denied” 多半是 AppArmor
getenforce 不存在 没装 SELinux
setroubleshoot 报错 SELinux 已启用
从 CentOS 拷来的服务启动不了 SELinux 上下文

如果你能贴出:

  • 报错信息
  • getenforce 输出
  • 相关服务名称

我可以帮你 精确定位是哪一条 SELinux 策略在拦。

0 踩