第2章:审计守护进程auditd配置——现象识别与排查路径
本章目标:从配置层面快速定位auditd无法启动、日志未生成、磁盘写满、远程转发失败等典型问题,并执行修复与预防措施。
2.1 现象识别
auditd配置相关故障在运维中常表现为以下六种场景,可根据第一反应症状快速匹配排查方向:
| 现象编号 | 典型表现 | 常见根因推断 |
|---|---|---|
| P1 | 服务启动失败(systemctl status auditd 显示 failed) | auditd.conf 语法错误、关键路径不可写、内核审计子系统未开启 |
| P2 | 审计日志文件未按预期增长(/var/log/audit/audit.log 为空或大小不变) | 规则文件未生效、auditctl 规则未加载、log_group 权限不足 |
| P3 | 磁盘分区被审计日志写满(df -h 显示 /var/log 使用率 100%) | 日志轮转策略缺失、max_log_file 设置过大、num_logs 未限制 |
| P4 | 远程日志服务器收不到数据(audisp-remote 日志无转发记录) | 远程配置错误、网络不通、TLS 证书问题、active 参数未设为 yes |
| P5 | ausearch 或 aureport 查询结果为空 | 规则过滤条件过严、事件类型被排除、日志轮转后旧日志被清除 |
| P6 | auditd 频繁重启(日志中出现 “auditd restarted”) | 配置参数冲突、磁盘 I/O 延迟过高、flush 模式不匹配 |
快速判断:若系统日志(
/var/log/messages 或 journalctl -u auditd)中出现 audit: backlog limit exceeded,通常指向 auditd.conf 中的 backlog_wait_time 或 backlog_limit 参数不合理。
2.2 数据采集
针对任一现象,按以下命令序列收集现场信息,并将结果分级归档:
# 1. 检查服务状态与内核审计模块
systemctl status auditd
lsmod | grep audit
cat /proc/sys/kernel/audit_status
# 2. 读取当前生效配置(注意:修改后未重启/重载时可能不一致)
cat /etc/audit/auditd.conf
# 3. 列出已加载的 audit 规则
auditctl -l
# 4. 检查规则文件目录(RHEL/CentOS 系)
ls -la /etc/audit/rules.d/
cat /etc/audit/rules.d/audit.rules
# 5. 日志文件基本属性
ls -lh /var/log/audit/audit.log*
wc -l /var/log/audit/audit.log
# 6. 远程转发端状态(若启用)
systemctl status audisp-remote
cat /etc/audisp/audisp-remote.conf
采集要点:若
auditctl -l 输出为空,且 auditd.conf 中 rules_file 指向了具体文件,则规则文件可能未被加载——请重点检查文件权限与 auditctl -R 加载时的错误信息。
2.3 原因定位(故障树分析)
以下故障树以“auditd 无法正常工作”为根节点,逐级展开,每个叶子节点对应一个最可能的配置错误。
2.4 修复动作
根据故障树定位出的具体原因,执行对应的修复操作。以下为关键场景的修复步骤:
2.4.1 auditd.conf 语法错误导致服务无法启动
# 检查 conf 语法(无专用检查工具,需肉眼核对)
# 常见错误:缺少 '=' 号、值类型不对、路径不存在
# 修复后重启
systemctl restart auditd
# 若仍失败,查看详细错误:
journalctl -xe -u auditd
2.4.2 规则文件未加载
# 手动加载规则文件
auditctl -R /etc/audit/rules.d/audit.rules
# 验证是否加载
auditctl -l
# 若需永久生效,确认 /etc/audit/rules.d/ 下的 .rules 文件被 auditd 启动脚本调用
# RHEL 系默认自动加载,若未加载可添加:
# augenrules --load
2.4.3 日志容量与归档参数调优
在 /etc/audit/auditd.conf 中调整以下参数:
| 参数 | 推荐值 | 说明 |
|---|---|---|
max_log_file | 100 | 单个日志文件大小上限(MB),避免文件过大导致 I/O 瓶颈 |
max_log_file_action | ROTATE | 超过上限后执行轮转,保留旧文件 |
num_logs | 5 | 保留的轮转文件个数,防止磁盘被写满 |
space_left | 75 | 磁盘剩余空间小于此值(MB)时触发告警 |
admin_space_left | 50 | 管理员紧急空间阈值,到达后停止审计(需谨慎) |
2.4.4 远程日志转发配置
# 编辑 /etc/audisp/audisp-remote.conf
remote_server = 192.168.1.100 # 远程日志服务器 IP
port = 60 # 默认端口 60(TCP)
transport = tcp
mode = immediate # 实时转发,不缓存
active = yes # 关键!设为 yes 才能启用
# 若使用 TLS,还需配置 /etc/audisp/audisp-remote-tls.conf
# 重启 audisp-remote 服务
systemctl restart audisp-remote
2.5 复测
完成修复后,执行以下验证检查清单,确保每个环节正常:
- 服务状态检查:
systemctl is-active auditd应返回active。 - 规则加载检查:
auditctl -l | head -5应显示至少一条规则。 - 日志写入检查:执行一条本机操作(如
touch /tmp/test_audit),然后ausearch -f /tmp/test_audit应返回记录。 - 日志轮转检查:
ls -lh /var/log/audit/应显示多个轮转文件,且主文件大小不超过max_log_file。 - 远程转发检查:在远程服务器上使用
audisp-remote对应的端口监听(tcpdump port 60),应看到数据包到达。
常见遗漏:修改
auditd.conf 后若仅 systemctl restart auditd,某些参数(如 max_log_file)需要日志轮转后才能生效。建议在修改后先停止审计,清理旧日志再重启:systemctl stop auditd; rm -f /var/log/audit/audit.log*; systemctl start auditd。
2.6 预防
为避免配置问题反复出现,建议建立以下预防机制:
- 配置版本管理:将
/etc/audit/auditd.conf和/etc/audit/rules.d/纳入 Git 仓库,每次修改后提交并测试。 - 定期验证规则完整性:通过 cron 每小时执行
auditctl -l | diff - /etc/audit/rules.d/audit.rules,若不一致则告警。 - 磁盘空间监控:部署
space_left_action为EMAIL并配置告警邮箱,或在 Zabbix/Prometheus 中监控/var/log/audit使用率。 - 变更审批流程:所有 auditd 配置变更必须通过工单系统,且附带回滚方案。
- 远程转发健康检查:每 5 分钟由远程服务器主动探测本地 auditd 是否仍在发送数据(如通过
audisp-remote的 heartbeat)。
最佳实践:使用自动化工具(如 Ansible Role:
linux-system-roles 中的 auditd)统一管理配置,避免手动编辑导致的语法或权限错误。