温馨提示×

SELinux日志在Linux中如何分析

小樊
42
2025-12-20 05:03:07
栏目: 智能运维

SELinux日志分析实操指南

一 定位日志与确认运行状态

  • 主要日志文件为:/var/log/audit/audit.log(由auditd写入)。若该服务未运行,拒绝信息可能出现在**/var/log/messages**。使用命令确认服务与状态:sudo systemctl status auditdsudo systemctl status rsyslogd;查看SELinux模式:getenforcesestatus。必要时启动服务:sudo systemctl start auditd && sudo systemctl enable auditd。为便于排查,建议保持 auditd 与 rsyslog 处于运行状态。

二 快速筛查与定位拒绝事件

  • 使用审计日志工具快速检索与汇总:
    • 检索全部 AVC 拒绝:sudo ausearch -m avc
    • 按时间筛选:sudo ausearch -m avc -ts todaysudo ausearch -m avc -ts recent
    • 按进程名筛选:sudo ausearch -m avc -c httpdsudo ausearch -m avc -c smbd
    • 生成拒绝汇总报告:sudo aureport -a
    • 可读性优化:在 ausearch 后加 --interpret;脚本处理可用 --raw
  • 简单文本筛选(当 auditd 未运行时):grep -i "denied" /var/log/messages
  • 以上命令需 root 权限执行,且 ausearch 读取的是 /var/log/audit/audit.log

三 读懂 AVC 日志的关键字段

  • 典型 AVC 拒绝片段:
    • type=AVC msg=audit(...): avc: denied { getattr } for pid=2465 comm="httpd" path="/var/www/html/file1" dev=... scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
  • 字段含义速览:
    • scontext:主体(进程)安全上下文,如 httpd_t
    • tcontext:客体(文件/端口等)安全上下文,如 samba_share_t
    • tclass:客体类别,如 filetcp_socket
    • permission:被拒绝的操作,如 getattrreadname_bind
    • 常见线索:上下文类型不匹配(如 httpd_t 访问 var_t/samba_share_t)、端口类型不匹配(如服务绑定到未允许的端口)。

四 常见根因与修复路径

  • 文件或目录标签错误(最常见)
    • 现象:进程(如 httpd)访问自定义目录被拒,日志显示主体/客体类型不匹配。
    • 修复:将目标恢复为默认标签,例如:sudo restorecon -v /var/www/html/index.html;必要时检查并修正父目录标签。
  • 服务绑定到非默认端口
    • 现象:服务启动失败,日志含 name_bind 拒绝,客体类型为 unreserved_port_t
    • 修复:将端口加入对应服务端口类型,例如:sudo semanage port -a -t mysqld_port_t -p tcp 3307(MySQL 示例)。
  • 仅需临时绕过单个服务(避免全系统放宽)
    • 做法:将某域设为宽容模式,例如:sudo semanage permissive -a mysqld_t;排障完成后恢复:sudo semanage permissive -d mysqld_t
  • 使用辅助工具生成可操作建议
    • sealert -a /var/log/audit/audit.log:输出可读报告与修复建议(如 restorecon、semanage port、setsebool、或生成本地策略模块)。
    • audit2why < /var/log/audit/audit.log:解释拒绝原因。
    • audit2allow -a /var/log/audit/audit.log:生成建议规则;如需临时放行可:ausearch -c 'sshd' --raw | audit2allow -M my-sshd && sudo semodule -i my-sshd.pp(谨慎用于生产)。

五 应急与排障建议

  • 紧急恢复(仅在无法登录或系统无法正常启动时)
    • 临时将 SELinux 设为宽容/关闭:编辑 /etc/selinux/configSELINUX=permissive(或 disabled),重启;恢复后请改回 enforcing 并修复根因。
    • 云环境可用串行控制台或救援实例挂载根卷后修改配置,再恢复原实例启动。
  • 排障流程建议
    • 保持 Enforcing 模式下定位问题;必要时仅将问题服务域设为 Permissive 做对比验证。
    • 优先用 ausearch/aureport 汇总与筛选,再用 sealert 获取修复建议,最后用 restorecon/semanage/audit2allow 实施修复。
    • 变更端口或目录后,同步更新 SELinux 的端口类型或文件上下文,避免再次出现拒绝。

0