Ubuntu下监控SELinux日志的方法
在监控日志前,需确保SELinux已启用并处于有效模式(enforcing/permissive)。使用以下命令查看状态:
getenforce # 快速查看当前模式(enforcing/permissive/disabled)
sestatus -v # 查看详细状态(包括配置文件路径、安全上下文等)
SELinux日志依赖auditd(审计守护进程)收集。若未安装,执行以下命令:
sudo apt-get update
sudo apt-get install auditd audispd-plugins # 安装auditd及插件
sudo systemctl start auditd # 启动服务
sudo systemctl enable auditd # 设置开机自启
SELinux的日志默认存储在/var/log/audit/audit.log中,可通过以下方式查看:
# 直接查看全部SELinux相关日志(需root权限)
sudo cat /var/log/audit/audit.log | grep -i "selinux\|avc"
# 实时监控新增日志(tail -f)
sudo tail -f /var/log/audit/audit.log | grep -i "selinux\|avc"
日志中AVC(Access Vector Cache)条目代表SELinux的访问控制拒绝事件,是监控的重点。
ausearch是SELinux专用日志查询工具,支持按时间、类型、进程等条件过滤:
# 查找最近的SELinux拒绝事件(AVC)
sudo ausearch -m avc -ts recent
# 查找今天发生的SELinux拒绝事件
sudo ausearch -m avc -ts today
# 查找特定进程(如nginx)的SELinux事件
sudo ausearch -m avc -ts recent -c nginx
# 查找特定用户(如www-data)的SELinux事件
sudo ausearch -m avc -ts recent -u www-data
使用aureport命令生成结构化报告,直观展示SELinux事件统计:
# 生成SELinux拒绝事件的摘要报告
sudo aureport -m selinux
# 生成详细的SELinux拒绝事件报告(包含进程、用户、路径等信息)
sudo aureport -m selinux -i # -i参数显示详细信息
若需监控特定文件或目录(如/var/log),可通过auditctl添加自定义规则:
# 监控/var/log目录的所有读写操作(-p wa:权限为写/读)
sudo auditctl -w /var/log -p wa -k log_monitor # -k指定自定义键名(用于过滤)
# 查看自定义规则的监控结果
sudo ausearch -k log_monitor
若发现SELinux拒绝事件(AVC),可使用audit2why分析原因,并通过audit2allow生成策略修复:
# 分析最近的SELinux拒绝事件原因
sudo ausearch -m avc -ts recent | audit2why
# 根据分析结果生成策略模块(需谨慎使用,避免过度放宽权限)
sudo ausearch -m avc -ts recent | audit2allow -M my_selinux_policy
sudo semodule -i my_selinux_policy.pp # 加载生成的策略模块
enforcing模式(修改/etc/selinux/config中的SELINUX=enforcing并重启),以发挥其安全作用。logrotate),避免日志文件过大占用磁盘空间。