auditd 审计与日志集中
场景
等保要求「审计记录保留 6 个月以上」,还要能查谁在什么时候改了关键文件。
前置条件
- 有独立日志盘或足够的空间
- 有集中的日志服务器(可选但强烈建议)
- 知道要审计哪些文件:
/etc/passwd、/etc/sudoers、应用配置
配置
# 审计规则
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
验证
auditctl -l
ausearch -k passwd_change -ts today
aureport --summary
tail -f /var/log/audit/audit.log
回滚
rm /etc/audit/rules.d/ops.rules
augenrules --load
坑
- 审计规则加太多,
execve全量审计会把磁盘瞬间写满。 - 审计日志和业务日志放同一块盘,谁写满都一起死。
- rsyslog 转发没开 TLS,日志在路上可能被改。
- 日志时间用 UTC,查的时候对不上本地时间。
- 只在本机留日志,机器被入侵后日志也被清。
- 改
auditd.conf后 restart 才会生效,reload 不够。