审计日志归档需构建保留策略、可追溯、不干扰服务的闭环机制,核心是用logrotate轮转audit.log并配置journal空间与时间双控,辅以校验留痕。

审计日志归档不是“定期删掉旧日志”,而是构建一套有保留策略、可追溯、不干扰服务的闭环机制。核心是用 logrotate 做可控轮转,辅以时间筛选和状态检查,避免直接 rm 或 truncate 破坏审计连续性。
明确审计日志来源与路径
先确认日志真实位置,不同系统差异较大:
-
systemd-journald:日志存在
/var/log/journal/(二进制格式),不能用普通文件方式清理 -
auditd 审计日志:默认路径为
/var/log/audit/audit.log,可能还有轮转后的audit.log.1、audit.log.2.gz等 -
rsyslog 转发的 audit 日志:若配置了转发,可能落在
/var/log/messages或独立文件如/var/log/audit.log
执行 sudo auditctl -s 查看 auditd 当前状态;运行 ls -l /var/log/audit/ 确认实际文件命名与权限。
用 logrotate 管理 audit.log(标准做法)
auditd 自身不自动轮转,需靠 logrotate 托管。创建配置文件:
sudo tee /etc/logrotate.d/auditd /dev/null 2>&1 || true
systemctl kill --signal=SIGHUP --kill-who=main systemd-journald.service > /dev/null 2>&1 || true
endscript
}
EOF
关键点说明:
-
rotate 30表示最多保留 30 个归档(即 30 天),超出自动删除 -
postrotate中发送 SIGHUP 给 journald 是为了确保日志采集链不中断(尤其当 rsyslog 或 journald 接收 audit 日志时) -
create 600 root root保证新日志权限正确,防止 auditd 因权限问题拒绝写入
对 journal 日志做空间与时间双控
systemd-journald 的日志需单独配置,不能依赖 logrotate:
- 编辑
/etc/systemd/journald.conf - 启用以下参数:
SystemMaxUse=512M SystemKeepFree=1G MaxRetentionSec=3month MaxFileSec=1day
含义:
-
SystemMaxUse:限制 journal 总体积上限 -
SystemKeepFree:强制保留至少 1GB 空闲空间 -
MaxRetentionSec:超过 3 个月的日志自动清理(按最后写入时间) - 修改后执行
sudo systemctl restart systemd-journald
归档前加校验与留痕
自动化清理必须可审计。建议在 logrotate 配置中加入简单日志记录:
prerotate
echo "$(date): rotating audit.log" >> /var/log/audit/rotation.log
endscript
postrotate
echo "$(date): rotated audit.log, $(ls -1 /var/log/audit/audit.log.* | wc -l) files kept" >> /var/log/audit/rotation.log
endscript
这样每次轮转都有时间戳和归档数量记录,满足合规审查基本要求。同时确保 /var/log/audit/rotation.log 权限为 600,仅 root 可读写。











