需协同配置logrotate与磁盘配额:logrotate用postrotate发送sighup通知auditd,禁用restart/reload;maxsize防攻击,delaycompress避冲突;/var/log/audit须独立分区并设root配额;权限0700/0600及selinux上下文须正确;最后强制验证生效。

要确保审计日志不被绕过、不丢失、不因写满磁盘而中断,需把 logrotate 和磁盘配额协同用好——前者管“怎么存”,后者管“最多能存多少”。关键不是单独配置,而是让两者形成闭环控制。
logrotate 必须带 postrotate 通知 auditd,否则日志会丢
auditd 是长期运行的守护进程,它不会自动发现日志文件已被重命名或清空。如果轮转后没发信号,auditd 仍往旧路径(比如 /var/log/audit/audit.log.1)持续写入,新日志文件为空,归档不断膨胀,实际审计流已断裂。
- 在
/etc/logrotate.d/auditd中必须包含postrotate ... endscript块 - 推荐写法:
postrotate /bin/systemctl kill --signal=SIGHUP auditd 2>/dev/null || true endscript - 不要用
restart或reload,会中断审计上下文,导致中间事件丢失
maxsize 比 daily 更防攻击,压缩要 delaycompress
攻击者可能在短时间内触发大量审计事件(如暴力提权、批量文件篡改),仅靠 daily 触发轮转来不及止损。maxsize 50M 能在单个日志达阈值时立即切档,避免单文件撑爆分区。
-
compress启用归档压缩节省空间 -
delaycompress确保刚轮出的audit.log.1暂不压缩,auditd 还在写它;下次轮转时才压audit.log.2,避免锁冲突或写失败
audit.log 所在分区必须启用磁盘配额,且限制 root 用户
auditd 默认以 root 身份写日志,若只对普通用户设 quota,root 仍可无限写满 /var/log 分区。正确做法是:
- 将
/var/log/audit单独挂载到独立小分区(如/dev/sdb1 /var/log/audit ext4 defaults,usrquota,grpquota 0 0) - 编辑
/etc/fstab加usrquota,grpquota,然后mount -o remount /var/log/audit - 对 root 用户设硬限额:
setquota -u root 0 2097152 0 0 /var/log/audit(单位为 KB,即 2GB 上限) - 配合
auditd.conf中的space_left = 100和admin_space_left = 50(单位 MB),让 auditd 在剩余空间不足时主动告警甚至暂停记录
权限与 SELinux 上下文不能错,否则轮转静默失败
logrotate 运行身份是 root,但若 /var/log/audit/ 目录权限不是 0700、audit.log 不是 0600,或 SELinux 上下文被误改(如变成 unconfined_u:object_r:var_log_t:s0),logrotate 可能无法创建新文件或重命名旧文件,且不报错。
- 固定权限:
chmod 0700 /var/log/audit chmod 0600 /var/log/audit/audit.log
- 恢复 SELinux 上下文:
restorecon -Rv /var/log/audit/
验证是否真生效,不能只看配置文件
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 强制触发一次轮转测试:
logrotate -f /etc/logrotate.d/auditd - 查看 auditd 是否收到 SIGHUP:
journalctl -u auditd | tail -5应有Received SIGUP类日志 - 检查新日志是否开始写入:
ls -l /var/log/audit/audit.log*,确认时间戳更新且大小从 0 开始增长 - 模拟写满配额:用
dd if=/dev/zero of=/var/log/audit/fill bs=1M count=2100,观察 auditd 是否报No space left on device并停止记录
不复杂但容易忽略










