Linux中auditd日志轮转需auditd.conf与logrotate双层协同:前者设max_log_file=100MB、max_log_file_action=ROTATE、num_logs=12等控制单文件大小及轮转行为;后者通过/etc/logrotate.d/auditd配置size 100M、rotate 12、compress及postrotate发送USR1信号通知auditd切换句柄,缺一将导致日志堆积或归档失效。

Linux 中 auditd 日志轮转和大小限制需双层协同配置:auditd 自身控制单文件大小与轮转动作,logrotate 负责归档压缩、保留数量及通知 auditd 切换句柄。只配其中一层会导致日志堆积、句柄未释放或归档失效。
一、auditd.conf 中设置单文件大小与轮转行为
编辑 /etc/audit/auditd.conf,调整以下关键参数:
- max_log_file = 100:单位 MB,建议设为 50~200(避免默认 8MB 导致高频轮转)
- max_log_file_action = ROTATE:必须设为 ROTATE,禁用 IGNORE(否则超限后继续写入,可能损坏日志)
- num_logs = 12:保留的历史轮转文件数(不含当前 audit.log),配合 logrotate 的 rotate 值共同决定总占用空间
- space_left = 500M 和 admin_space_left = 100M:磁盘剩余空间告警阈值,防止日志写满导致系统异常
- admin_space_left_action = suspend:空间极低时暂停审计,保障系统可用性(高安全场景可设为 halt)
修改后执行 sudo systemctl restart auditd 生效。
二、logrotate 单独配置 audit.log 归档策略
auditd 不自动重开文件描述符,必须用 logrotate + USR1 信号显式通知。新建配置文件:
sudo nano /etc/logrotate.d/auditd
- size 100M:按大小触发(比 daily 更可靠,防突发事件撑爆磁盘)
- rotate 12:保留 12 个归档(与 num_logs 对齐,避免重复保留)
- compress & delaycompress:压缩旧日志,但 audit.log.1 暂不压,方便排查
- create 0600 root root:新日志严格权限,防敏感信息泄露
- sharedscripts + postrotate … USR1:确保轮转完成后仅一次通知 auditd 关闭旧句柄、打开新文件
完整示例:
/var/log/audit/audit.log {
size 100M
rotate 12
compress
delaycompress
missingok
notifempty
create 0600 root root
sharedscripts
postrotate
/bin/systemctl kill --signal=USR1 auditd 2>/dev/null || true
endscript
}
三、验证与日常检查要点
配置不是一劳永逸,需定期确认是否真正生效:
- 语法测试:sudo logrotate -d /etc/logrotate.d/auditd,看输出中是否有 “rotating log” 和 “running postrotate script”
- 手动触发轮转:sudo logrotate -f /etc/logrotate.d/auditd,然后检查 /var/log/audit/ 下是否生成 audit.log.1,且 audit.log 是否重置为空、权限正确
- 确认 auditd 已响应:sudo auditctl -s | grep "enabled" 应显示 enabled;再查 ls -l /var/log/audit/ 确保 audit.log 时间戳已更新
- 检查磁盘预警是否就位:sudo tail -n 20 /var/log/messages | grep audit,应能看到 space_left 相关警告(如磁盘人为腾出空间后模拟触发)
四、权限与目录加固(常被忽略)
审计日志含敏感操作记录,若权限宽松,等于暴露攻击面:
- 目录权限:sudo chmod 0700 /var/log/audit/(禁止其他用户进入)
- 日志文件权限:sudo chmod 0600 /var/log/audit/audit.log*(仅 root 可读写)
- 检查 SELinux 上下文(如启用):ls -Z /var/log/audit/,应为 system_u:object_r:auditd_log_t:s0,否则用 sudo restorecon -Rv /var/log/audit/ 修复
不复杂但容易忽略。


















