logrotate 中 rotate 与 maxage 是交集关系而非互斥,需同时配置以兼顾数量与时间约束;auditd 轮转后须用 postrotate 发送 sighup 或重载规则,避免日志丢失;归档文件可用 chattr +i 锁定防误删,但不可作用于当前写入文件;需检查 auditd 空间阈值及 selinux 上下文防止静默降级。

logrotate 配置里 rotate 和 maxage 冲突怎么办
两者都控制日志保留,但逻辑不同:rotate 数日志文件个数,maxage 数文件修改时间。如果设了 rotate 5 但某文件已超 maxage 30 天,logrotate 仍会删它——不是“保留最新 5 个”,而是“保留个数 ≤5 且年龄 ≤30 天”的交集。
常见错误现象:logrotate 突然多删几个文件,或该删的旧文件还在;查 /var/lib/logrotate/status 会发现时间戳和预期不符。
- 优先用
maxage控制审计类日志生命周期,比如合规要求“至少保留 90 天”,就设maxage 90,再配rotate 100防磁盘打满 - 避免只设
rotate不设maxage:系统重装、时间回拨、日志写入中断都会让文件年龄失真 -
dateext必须开,否则maxage对不带日期后缀的文件(如audit.log)无效——它只认audit.log-20240501这种格式
auditd 日志被 logrotate 删掉后 auditd 不写新文件
auditd 默认不监听 SIGHUP,轮转后若没显式通知,它继续往已被 rename 的旧文件句柄写,导致新日志丢失、磁盘空间不释放。
使用场景:审计日志必须连续不可断,尤其在等保/等保2.0 要求下,中断即算违规。
- 在
logrotate配置块里加postrotate段,调用systemctl kill --signal=SIGHUP auditd或augenrules --load(后者更稳妥,会重载规则并刷新日志路径) - 别用
killall auditd && systemctl start auditd:重启有窗口期,期间 syscall 事件全丢 - 验证是否生效:轮转后立刻
ls -l /var/log/audit/看新文件创建时间,再ausearch -m avc -ts recent确认有新记录
防止运维误删 /var/log/audit/ 下的文件
Linux 文件系统级防护比权限掩码更可靠——chattr +a 只允许追加,+i 完全禁止修改,但 auditd 进程需有 CAP_LINUX_IMMUTABLE 才能绕过 +i,普通用户删不动,root 也得先 chattr -i 才行,留痕清晰。
性能影响几乎为零,但要注意:+i 后连 auditd 自己都不能 truncate 或覆盖写,所以只能对归档完成的旧文件(如 audit.log-20240401)加,不能加在当前正在写的 audit.log 上。
- 轮转完成后自动加锁:
logrotate的lastaction块里加chattr +i /var/log/audit/audit.log-$(date -d 'yesterday' +\%Y\%m\%d) 2>/dev/null - 检查是否生效:
lsattr /var/log/audit/,看到----i---------表示已锁定 - 别给整个
/var/log/audit/目录加+i:auditd 启动时要创建新文件,会失败
auditd 自身配置遗漏导致日志写入失败却无报错
auditd 默认把日志写到 /var/log/audit/audit.log,但如果磁盘满、目录不存在、SELinux 上下文不对,它可能静默降级到 syslog,而 syslog 默认不存 audit 事件——结果就是“以为在记,其实没记”。
最容易被忽略的是 space_left 和 admin_space_left 参数:它们不触发错误,只发警告,且默认值极低(space_left 75 表示剩余空间 space_left_action 执行才动作。
- 编辑
/etc/audit/auditd.conf,确认log_file路径存在且 auditd 有写权限:ls -ld /var/log/audit/应显示drwxr-x--- root root - 设
space_left 200(单位 MB)、admin_space_left 50,space_left_action email并配好admin_email,避免磁盘满后 auditd 自动 halt - SELinux 下必须确保上下文正确:
restorecon -Rv /var/log/audit/,否则 auditd 因 denied 写入失败却不报错
事情说清了就结束。真正难的不是配参数,是让所有环节——auditd、logrotate、文件系统属性、SELinux——彼此不拆台。漏掉任意一环,审计数据就可能在你没察觉时断掉或被删。










