温馨提示×

centos selinux怎么排查

小樊
37
2026-10-08 16:56:48
栏目: 智能运维

在 CentOS 上排查 SELinux 问题,通常可以按下面一套流程来做。我按**“先确认 → 再看日志 → 再分析 → 再处理”**来讲。


一、确认 SELinux 状态

getenforce

可能结果:

  • Enforcing:强制模式(会拦截)
  • Permissive:宽容模式(只记录不拦截)
  • Disabled:已关闭

查看详细状态:

sestatus

二、临时切换模式(用于验证问题)

如果是排障,可临时改为 Permissive:

setenforce 0

如果问题消失,基本可以确定是 SELinux 引起。

⚠️ 重启后恢复,永久修改需改配置文件

永久修改(谨慎):

vi /etc/selinux/config
SELINUX=permissive

三、查看 SELinux 拒绝日志(最关键)

1️⃣ 使用 audit 日志(推荐)

ausearch -m AVC -ts recent

或实时查看:

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

典型 AVC 拒绝示例:

type=AVC msg=audit(...): avc:  denied  { read } for  pid=...

2️⃣ 使用 setroubleshoot(非常友好)

CentOS 默认可能有:

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

如果没有:

yum install -y setroubleshoot-server

它会直接告诉你:

  • 被拒绝的原因
  • 建议的处理命令

四、快速分析拒绝原因

查看最近被拒绝的操作

ausearch -m AVC -ts today

生成策略建议(不立刻执行)

audit2why < /var/log/audit/audit.log

生成策略模块(谨慎)

audit2allow -a

确认无误后:

audit2allow -a -M mypolicy
semodule -i mypolicy.pp

五、常见场景排查

1️⃣ 服务无法访问文件

ls -Z /path/file
ps -Z | grep nginx

修正上下文:

restorecon -Rv /path

或修改上下文:

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

2️⃣ 端口被 SELinux 拦截

查看允许的端口:

semanage port -l | grep http

添加端口:

semanage port -a -t http_port_t -p tcp 8080

3️⃣ 布尔值问题

查看相关布尔值:

getsebool -a | grep ftp

开启:

setsebool -P ftp_home_dir on

六、排障思路总结

  1. 先 getenforce 确认状态
  2. setenforce 0 验证是否 SELinux 问题
  3. 看 audit.log / sealert
  4. 用 audit2allow 分析
  5. 优先用 restorecon / semanage,而非直接关 SELinux

如果你有具体报错或服务(如 Nginx / FTP / MySQL / SSH),可以把日志贴出来,我可以直接帮你定位。

0 踩