温馨提示×

centos selinux怎么排查故障

小樊
39
2026-09-29 23:03:07
栏目: 智能运维

在 CentOS 里排查 SELinux 故障,一般可以按下面一套“由浅入深”的流程来做。


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

1. 查看 SELinux 状态

getenforce
sestatus
  • Enforcing:会真正拦截
  • Permissive:只记录不拦截
  • Disabled:和 SELinux 无关

2. 临时关闭测试(仅排查用)

setenforce 0

如果服务恢复正常,基本可以确定是 SELinux 问题。

⚠️ 生产环境不要长期关,排查完要恢复:

setenforce 1

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

1. 使用 ausearch(推荐)

ausearch -m AVC -ts recent

常见输出示例:

type=AVC msg=audit(...): denied { read } for pid=... comm="nginx"
name="index.html" dev=sda1 scontext=system_u:system_r:httpd_t
tcontext=unconfined_u:object_r:default_t tclass=file

关键信息:

  • scontext:进程的安全上下文
  • tcontext:文件/资源的安全上下文
  • denied { xxx }:被拒绝的权限

2. 看 /var/log/audit/audit.log

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

如果没装 audit:

yum install -y audit
systemctl enable --now auditd

3. 使用 sealert(新手友好)

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

会直接给出:

  • 是什么原因
  • 建议怎么修复

三、用 setroubleshoot 辅助分析

安装:

yum install -y setroubleshoot-server

然后:

sealert -l *

四、检查文件和进程上下文

1. 查看文件上下文

ls -Z /var/www/html/index.html
ps -Z | grep nginx

2. 修复文件上下文(非常常见)

比如网页打不开:

restorecon -Rv /var/www/html

或手动改:

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

五、用 SELinux 布尔值解决常见问题

查看相关布尔值:

getsebool -a | grep httpd

示例:

setsebool -P httpd_can_network_connect on

常见场景:

  • httpd_can_network_connect(连数据库/代理)
  • ftp_home_dir
  • samba_enable_home_dirs

六、用 audit2why / audit2allow(进阶)

1. 分析拒绝原因

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

2. 生成策略(谨慎使用)

audit2allow -a

生成模块:

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

⚠️ 不要无脑 allow,优先改上下文或布尔值。


七、典型故障速查表

现象 可能原因
Web 403 文件上下文不对
服务起不来 端口无许可
连不上数据库 布尔值未开
脚本不能执行 文件类型不对

查看端口许可:

semanage port -l | grep http

八、排查思路总结

  1. getenforce 确认状态
  2. setenforce 0 排除法
  3. ausearch / sealert 看 AVC
  4. ls -Z / ps -Z 看上下文
  5. restorecon / setsebool 修复
  6. 最后才写自定义策略

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

0 踩