温馨提示×

Ubuntu下SELinux如何排错

小樊
40
2026-08-24 09:47:03
栏目: 智能运维

Ubuntu 下使用 SELinux 进行排错,核心思路是:确认是否启用 → 查看拒绝日志 → 分析策略 → 调整策略或上下文。下面按实战流程说明。


一、确认 Ubuntu 是否启用了 SELinux

Ubuntu 默认使用 AppArmor,SELinux 默认是 关闭或未安装

1. 检查是否安装 SELinux

dpkg -l | grep selinux

常见包:

  • selinux-basics
  • selinux-policy-default
  • selinux-utils

2. 检查当前状态

getenforce

可能结果:

  • Disabled:未启用
  • Permissive:启用但只记录不拦截
  • Enforcing:启用且拦截

如果提示命令不存在:

sudo apt install selinux-utils

3. 检查内核是否支持 SELinux

sestatus

二、开启 SELinux(如未启用)

1. 安装 SELinux

sudo apt update
sudo apt install selinux-basics selinux-policy-default auditd

2. 激活 SELinux

sudo selinux-activate

3. 修改启动模式

编辑 GRUB:

sudo nano /etc/default/grub

GRUB_CMDLINE_LINUX 中加入:

security=selinux selinux=1

更新 GRUB:

sudo update-grub

重启:

reboot

三、SELinux 排错核心流程

✅ 第一步:确认问题是否由 SELinux 引起

临时切换到 Permissive 模式 测试:

sudo setenforce 0

如果问题消失 → 基本可确定是 SELinux


✅ 第二步:查看 SELinux 拒绝日志

1. 使用 ausearch(推荐)

sudo ausearch -m avc -ts recent

常见关键字:

  • denied
  • scontext(源上下文)
  • tcontext(目标上下文)
  • tclass(对象类型)

2. 查看 audit 日志

sudo tail -f /var/log/audit/audit.log

或:

sudo journalctl -t audit

✅ 第三步:使用 sealert 自动分析(强烈推荐)

安装 setroubleshoot

sudo apt install setroubleshoot

分析日志

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

它会给出:

  • 被拒绝的原因
  • 建议的布尔值
  • 建议的 policy 修改命令

四、常见排错场景与解决方法

1. 文件/目录权限被 SELinux 拒绝

查看文件上下文

ls -Z /path/to/file

修改上下文

sudo semanage fcontext -a -t httpd_sys_content_t "/data/www(/.*)?"
sudo restorecon -Rv /data/www

2. 服务无法访问端口

查看端口上下文

semanage port -l | grep http

添加端口

sudo semanage port -a -t http_port_t -p tcp 8080

3. 布尔值问题(最常见)

查看布尔值

getsebool -a | grep http

开启布尔值

sudo setsebool -P httpd_can_network_connect on

4. 生成并加载自定义策略(高阶)

从拒绝日志生成策略

grep denied /var/log/audit/audit.log | audit2allow -M mypolicy

加载策略

sudo semodule -i mypolicy.pp

五、常用排错命令速查表

功能 命令
查看状态 sestatus
临时关闭 setenforce 0
临时开启 setenforce 1
查看拒绝 ausearch -m avc
自动分析 sealert -a audit.log
文件上下文 ls -Z
修改上下文 chcon / semanage fcontext
恢复上下文 restorecon
管理端口 semanage port
管理布尔值 setsebool

六、Ubuntu 特别注意事项 ⚠️

  1. Ubuntu 官方更推荐 AppArmor
  2. SELinux 在 Ubuntu 上:
    • 文档较少
    • 策略不如 RHEL/CentOS 完善
  3. 若只是普通服务器,AppArmor 排错更简单

七、总结排错思路(记住这个顺序)

1. setenforce 0 验证
2. ausearch / sealert 看拒绝
3. 检查文件/端口/布尔值
4. 修改上下文或布尔值
5. 必要时生成自定义策略

如果你愿意,可以直接把 audit.log 中的拒绝日志贴出来,我可以帮你逐条分析并给出精确修复命令。

0