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 today
sudo ausearch -m avc -ts recent -c httpd
sudo ausearch -m avc -ts recent > avc_logs.txt
auselect
用于快速筛选SELinux审计日志中的特定事件:
sudo auselect -m avc
sudo auselect -m avc -s today
sudo 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 avc
sudo journalctl -k --since "2023-04-01" | grep avc
audit2why
用于分析审计日志中的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
)建议备份至安全位置,便于后续审计。