auditd通过space_left和admin_space_left两级阈值实现磁盘空间不足时的平滑过渡:500mb触发邮件告警,100mb执行suspend暂停日志写入但保持监控;需配合rotate轮转、合理max_log_file与num_logs设置及logrotate归档清理,并经truncate模拟验证告警与suspend有效性。

auditd 本身不支持“降权”这种应用层行为,但可通过配置其内置的空间管理机制,在磁盘空间不足时自动触发预设响应动作,实现日志写入的平滑过渡——即暂停高风险记录、保留关键审计能力、避免系统挂起。核心是合理设置 space_left、admin_space_left 和对应的动作策略。
设置两级磁盘空间阈值并绑定响应动作
编辑主配置文件 /etc/audit/auditd.conf,明确区分警告与强制干预边界:
- space_left = 500M:当可用空间低于 500MB 时触发警告级响应(如发邮件、执行脚本)
- admin_space_left = 100M:当可用空间仅剩 100MB 时进入保护模式,必须阻止日志写入进一步消耗空间
-
space_left_action = email:配合
action_mail_acct = root,及时通知管理员 -
admin_space_left_action = suspend:这是关键——
suspend会暂停新审计事件写入,但 auditd 进程仍运行,规则保持加载,不中断监控逻辑 - disk_full_action = suspend:防止磁盘彻底写满后发生不可控行为
禁用可能导致失控的日志行为
避免因配置不当引发连锁故障:
- 确保 max_log_file_action = ROTATE(非 IGNORE 或 SYSLOG),否则单个日志撑爆后无法轮转
- 关闭 flush = none 或设为 data,防止因缓存未刷盘导致日志丢失或延迟报警
- 不要启用
log_format = ENRICHED(若不需要字段扩展),它会增大日志体积,加剧空间压力
配合日志轮转与清理策略
仅靠 auditd 内置机制不够,需叠加 OS 层面保障:
- 设置 num_logs = 8 且 max_log_file = 100(单位 MB),控制总日志体积上限约 800MB
- 在
/etc/logrotate.d/auditd中补充 rotate 脚本,例如压缩旧日志后调用ausearch --start today -i | gzip > /var/log/audit/archive_$(date +%F).gz归档分析内容 - 添加定时清理任务:
find /var/log/audit -name "audit.log.*" -mtime +180 -delete(保留 6 个月)
验证空间告警是否实际生效
模拟低空间场景测试响应链路是否连通:
- 用
truncate -s 9G /var/log/audit/filltest快速占满剩余空间(测试后记得rm) - 检查
sudo systemctl status auditd是否仍为 active(suspend不等于 stop) - 运行
sudo ausearch -m CONFIG_CHANGE -ts recent,确认规则变更类事件仍可查(说明 auditd 未崩溃) - 查看
/var/log/messages或邮件收件箱,确认space_left告警已发出











