Auditd 日志必须满足本地不丢、历史可查、远程可验三大刚性要求:本地轮转由 logrotate 主控并发送 USR1 信号切换句柄;归档需权限锁死(700/600)与内容防篡改(flush=data、log_format=ENRICHED);远程传输通过 audispd→rsyslog 双写+TLS+磁盘队列实现稳发准收真验。

Auditd 日志必须同时满足三个刚性要求:本地不丢、历史可查、远程可验。轮转不是简单压缩删除,归档不是拷贝完事,远程传输更不能裸奔发包。核心是让每条审计记录在生命周期内始终处于受控状态。
本地轮转:用 logrotate 主控,auditd 仅做配合
auditd 自带的 max_log_file + num_logs 轮转机制太粗放,无法压缩、不支持按大小触发、也无法通知外部系统。真正可靠的轮转必须交给 logrotate,并通过 USR1 信号让 auditd 切换日志句柄:
- 单独创建 /etc/logrotate.d/auditd,内容明确指定路径:
/var/log/audit/audit.log - 用
size 100M替代daily,防止突发高频操作导致单日日志暴涨数 GB -
rotate 30保留 30 个归档(含 .gz),兼顾存储与追溯周期;compress delaycompress确保旧文件压缩,新文件保持明文便于紧急排查 -
create 0600 root root保证新建日志权限严格;sharedscripts+postrotate中执行kill -USR1 $(pidof auditd)或systemctl kill -s USR1 auditd,确保句柄释放
归档保护:权限锁死 + 内容防篡改
归档后的日志文件仍是攻击者重点目标。不能只靠“压缩就安全”,必须从访问控制和内容完整性两层加固:
- 整个 /var/log/audit/ 目录权限设为
700,属主 root:root;所有.log和.log.*.gz文件权限统一为600 - 禁用非 root 用户调用
ausearch、aureport:运行chmod 750 /sbin/ausearch /sbin/aureport,并只将运维账号加入 root 组或纳入 sudo 白名单 - 在 /etc/audit/auditd.conf 中启用
flush = data(每次写入强制刷盘)、log_format = ENRICHED(含序列号与校验字段),配合num_logs = 10防止覆盖关键段 - 规则固化:执行
auditctl -e 2并写入/etc/audit/rules.d/lock.rules,阻止运行时删改规则或停用服务
远程传输:rsyslog 双写 + TLS 加密 + 磁盘队列兜底
auditd 不直接联网,必须经 audispd 插件转出到 syslog 设施(如 local6),再由 rsyslog 统一调度。关键不是“发出去”,而是“发得稳、收得准、验得真”:
- 确认 /etc/audisp/plugins.d/syslog.conf 中
active = yes、format = syslog、facility = local6三项开启;/etc/audit/auditd.conf 中设dispatcher = /sbin/audispd且log_format = NOLOG(关闭 auditd 自写文件) - 在 /etc/rsyslog.d/30-audit-both.conf 中定义双目标规则:
local6.* /var/log/audit-syslog.log(本地存档副本)+local6.* @@(o)192.168.1.20:6514;RSYSLOG_SyslogProtocol23Format(TLS 加密远程) - 必须配置磁盘队列:添加
$ActionQueueFileName audit_q、$ActionQueueMaxDiskSpace 500m、$ActionQueueSaveOnShutdown on,网络中断时日志暂存本地磁盘,恢复后自动补发 - 远程接收端需部署 rsyslog 或 syslog-ng,并启用 TLS 证书验证,拒绝未认证连接;建议使用专用端口(如 6514)与独立用户(如 syslog-audit)隔离处理

















