SELinux日志在CentOS中的管理方法
CentOS系统中,SELinux的审计日志默认存储在/var/log/audit/audit.log,该文件记录了所有与SELinux相关的访问控制事件(如拒绝、允许)。此外,也可通过journalctl命令查看内核日志中的SELinux信息(适用于使用systemd的系统)。
ausearch是SELinux专用日志查询工具,可通过多种条件过滤日志:
sudo ausearch -m avc -ts recent-m avc指定事件类型为AVC拒绝;-ts recent表示最近发生的事件)sudo ausearch -m avc -ts todaysudo ausearch -m avc -ts recent -c httpdsudo ausearch -m avc -ts recent > avc_logs.txtauselect用于快速筛选SELinux审计日志中的特定事件:
sudo auselect -m avcsudo auselect -m avc -s todaysudo auselect -m avc -c nginx使用grep命令过滤audit.log中的AVC事件(简单快捷):
sudo grep "avc" /var/log/audit/audit.log
或使用ausearch直接查询日志文件:
sudo ausearch -f /var/log/audit/audit.log -m avc
若系统使用systemd,可通过journalctl查看内核日志中的SELinux信息:
sudo journalctl -k | grep avcsudo journalctl -k --since "2023-04-01" | grep avcaudit2why用于分析审计日志中的SELinux拒绝事件,解释拒绝的原因(如缺少权限、布尔值未开启等):
sudo ausearch -m avc -ts recent | audit2why
输出结果会提示“是”(需要调整策略)或“否”(无需操作),并给出具体原因(如“httpd进程无权访问/var/www/html目录”)
audit2allow可根据审计日志中的拒绝事件生成自定义SELinux策略模块,解决“拒绝但需要允许”的问题:
mypol):sudo ausearch -m avc -ts recent | audit2allow -M mypol-M参数会生成.te(策略源码)和.pp(编译后的策略模块)文件)sudo semodule -i mypol.pp为防止audit.log文件占用过多磁盘空间,需通过logrotate工具配置日志轮转(默认配置文件位于/etc/logrotate.d/audit):
/var/log/audit/audit.log {
daily # 每天轮转一次
missingok # 若日志文件不存在也不报错
rotate 7 # 保留最近7个轮转日志
compress # 压缩旧日志(节省空间)
notifempty # 若日志为空则不轮转
create 0640 root adm # 创建新日志文件时设置权限和所有者
}
修改后,logrotate会自动按配置执行轮转(通常由cron每日触发)。
audit.log中的AVC拒绝事件,及时处理潜在安全问题;audit.log.1)建议备份至安全位置,便于后续审计。