# auditd 审计与日志集中 ## 场景 等保要求「审计记录保留 6 个月以上」,还要能查谁在什么时候改了关键文件。 ## 前置条件 - 有独立日志盘或足够的空间 - 有集中的日志服务器(可选但强烈建议) - 知道要审计哪些文件:`/etc/passwd`、`/etc/sudoers`、应用配置 ## 配置 ```bash # 审计规则 cat >/etc/audit/rules.d/ops.rules <<'EOF' -w /etc/passwd -p wa -k passwd_change -w /etc/shadow -p wa -k shadow_change -w /etc/sudoers -p wa -k sudoers_change -w /etc/ssh/sshd_config -p wa -k sshd_config -a always,exit -F arch=b64 -S execve -k exec EOF augenrules --load systemctl restart auditd # 保留策略 sed -i 's/^max_log_file .*/max_log_file = 100/' /etc/audit/auditd.conf sed -i 's/^num_logs .*/num_logs = 30/' /etc/audit/auditd.conf # 集中转发 cat >/etc/rsyslog.d/50-audit.conf <<'EOF' *.* @@log.corp.local:514 EOF systemctl restart rsyslog ``` ## 验证 ```bash auditctl -l ausearch -k passwd_change -ts today aureport --summary tail -f /var/log/audit/audit.log ``` ## 回滚 ```bash rm /etc/audit/rules.d/ops.rules augenrules --load ``` ## 坑 - **审计规则加太多**,`execve` 全量审计会把磁盘瞬间写满。 - 审计日志和业务日志放同一块盘,谁写满都一起死。 - rsyslog 转发没开 TLS,日志在路上可能被改。 - 日志时间用 UTC,查的时候对不上本地时间。 - 只在本机留日志,机器被入侵后日志也被清。 - 改 `auditd.conf` 后 restart 才会生效,reload 不够。