SELinux日志分析实操指南
一 定位日志与确认运行状态
sudo systemctl status auditd、sudo systemctl status rsyslogd;查看SELinux模式:getenforce 或 sestatus。必要时启动服务:sudo systemctl start auditd && sudo systemctl enable auditd。为便于排查,建议保持 auditd 与 rsyslog 处于运行状态。二 快速筛查与定位拒绝事件
sudo ausearch -m avcsudo ausearch -m avc -ts today、sudo ausearch -m avc -ts recentsudo ausearch -m avc -c httpd、sudo ausearch -m avc -c smbdsudo aureport -a--interpret;脚本处理可用 --rawgrep -i "denied" /var/log/messages三 读懂 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=filehttpd_tsamba_share_tfile、tcp_socketgetattr、read、name_bindhttpd_t 访问 var_t/samba_share_t)、端口类型不匹配(如服务绑定到未允许的端口)。四 常见根因与修复路径
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=permissive(或 disabled),重启;恢复后请改回 enforcing 并修复根因。ausearch/aureport 汇总与筛选,再用 sealert 获取修复建议,最后用 restorecon/semanage/audit2allow 实施修复。