温馨提示×

centos selinux如何排查

小樊
51
2026-10-23 08:49:10
栏目: 智能运维

在 CentOS 中排查 SELinux 相关问题,一般按下面的思路和步骤来做。


一、确认 SELinux 状态

getenforce
# 或
sestatus

常见状态:

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

如果是问题排查,建议先切到 Permissive 验证:

setenforce 0

重启后失效,仅用于验证是否为 SELinux 导致


二、查看 SELinux 拒绝日志(最核心)

1. 使用 ausearch

ausearch -m avc -ts recent

或指定时间:

ausearch -m avc -ts today

2. 使用 journalctl

journalctl -t setroubleshoot
journalctl | grep AVC

3. 直接看审计日志

cat /var/log/audit/audit.log | grep AVC

三、用 sealert 自动分析(推荐)

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

或针对某条:

sealert -l "*"

它会给出:

  • 被拒绝的原因
  • 建议的 SELinux 策略命令

四、临时验证是否是 SELinux 问题

setenforce 0
# 再测试你的服务/命令

如果 Permissive 下正常,基本可以确定是 SELinux 限制。


五、常见排查场景

1. 文件权限被 SELinux 拦截

查看文件上下文:

ls -Z /path/to/file

修复上下文:

restorecon -Rv /path

或修改:

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

2. 服务无法访问端口

查看端口允许情况:

semanage port -l | grep http

添加端口:

semanage port -a -t http_port_t -p tcp 8080

3. 进程被拒绝执行

查看 AVC:

ausearch -m avc -c httpd

生成策略模块(谨慎):

grep httpd /var/log/audit/audit.log | audit2allow -M myhttpd
semodule -i myhttpd.pp

六、排查流程总结

  1. getenforce 确认状态
  2. setenforce 0 验证是否 SELinux 问题
  3. ausearch / sealert 看 AVC 日志
  4. 修复上下文 / 端口 / 策略
  5. 恢复 Enforcing 测试

如果你有 具体报错或服务(如 Nginx / FTP / MySQL / SSH),可以把 AVC 日志贴出来,我可以帮你精确分析。

0 踩