Linux 审计系统:auditd 配置与安全事件追踪¶
前言¶
SELinux 告诉你谁被拒绝了,但 auditd 告诉你谁做了什么。作为 Linux 内核级的审计框架,auditd 可以记录文件访问、系统调用、用户登录、命令执行等几乎所有安全相关的事件。
对于等保合规、入侵检测和事后溯源,auditd 是不可替代的工具。
安装与基础配置¶
sudo apt install auditd # Debian/Ubuntu
sudo dnf install audit # RHEL/Rocky
sudo systemctl enable auditd --now
# 验证
sudo auditctl -s
# enabled 1
# pid 1234
配置文件 /etc/audit/auditd.conf¶
log_file = /var/log/audit/audit.log
log_format = ENRICHED
max_log_file = 100 # 单个日志文件最大 MB
max_log_file_action = ROTATE # 超过后轮转
num_logs = 10 # 保留 10 个轮转文件
审计规则¶
规则类型¶
| 类型 | 说明 | 示例 |
|---|---|---|
| 文件监控 | 监控文件的读/写/执行/属性变更 | 监控 /etc/passwd |
| 系统调用 | 监控特定系统调用的使用 | 监控 chmod、chown 调用 |
| 可执行文件 | 监控特定程序被执行 | 谁执行了 sudo |
文件监控规则¶
# 监控 /etc/passwd 的所有写入和属性变更
sudo auditctl -w /etc/passwd -p wa -k passwd_changes
# 监控 /etc/shadow 的读取(-p r)
sudo auditctl -w /etc/shadow -p r -k shadow_read
# 监控 SSH 密钥目录
sudo auditctl -w /home -p rwxa -k home_access
# -p 参数:r=读 w=写 x=执行 a=属性变更
# -k:给规则打标签,方便后续搜索
系统调用规则¶
# 监控所有 chmod 调用
sudo auditctl -a always,exit -F arch=b64 -S chmod -F auid>=1000 -k chmod_calls
# 监控用户创建/删除
sudo auditctl -a always,exit -F arch=b64 -S useradd,userdel -k user_management
# -a always,exit: 总是记录,在系统调用退出时
# -F arch=b64: 64 位架构
# -F auid>=1000: 仅记录普通用户(非系统用户)
永久规则¶
/etc/audit/rules.d/custom.rules:
# 关键系统文件
-w /etc/passwd -p wa -k passwd_changes
-w /etc/shadow -p r -k shadow_read
-w /etc/sudoers -p wa -k sudoers_changes
-w /etc/ssh/sshd_config -p wa -k sshd_config
# 关键命令执行
-a always,exit -F arch=b64 -S execve -F euid=0 -k root_commands
# 用户切换
-a always,exit -F arch=b64 -S setuid -F auid>=1000 -k privilege_escalation
日志分析¶
ausearch:搜索审计日志¶
# 搜索特定标签的事件
sudo ausearch -k passwd_changes
# 搜索特定用户的操作
sudo ausearch -ua alice
# 搜索特定时间范围
sudo ausearch -ts 07/20/2026 14:00:00 -te 07/20/2026 15:00:00
# 搜索失败的权限事件
sudo ausearch -m USER_LOGIN --success no
# 搜索特定命令的执行
sudo ausearch -c sudo
# 格式化输出(更友好)
sudo ausearch -k passwd_changes --format text
aureport:生成审计报告¶
# 登录报告
sudo aureport -l
# Login Report
# ============
# # date time auid host term exe success event
# 1. 07/20/26 14:30:00 alice 192.168.1.100 ssh /usr/sbin/sshd yes 1234
# 认证报告
sudo aureport -au
# 文件访问报告
sudo aureport -f
# 异常事件报告
sudo aureport --failed
# 汇总统计
sudo aureport --summary
实时监控¶
# 实时输出审计事件
sudo ausearch -i -f /etc/passwd --just-one
# 或 tail audit.log
sudo tail -f /var/log/audit/audit.log
实用审计场景¶
场景 1:谁改了 /etc/passwd?¶
sudo auditctl -w /etc/passwd -p wa -k passwd_changes
# ... 过一段时间 ...
sudo ausearch -k passwd_changes -i
# type=CONFIG_CHANGE msg=audit(07/20/2026 14:30:00.123:456) :
# auid=alice ses=1 op=updated_rules
场景 2:谁在凌晨 3 点登录?¶
场景 3:sudo 使用记录¶
审计日志轮转¶
/etc/audit/auditd.conf 中的 max_log_file_action=ROTATE 已启用自动轮转。也可以手动:
性能考量¶
auditd 的规则越多,对系统性能影响越大:
- 文件监控(
-w)开销很小 - 系统调用监控(
-a)开销中等 - 对所有
execve记录开销较大,建议只对 root 或敏感命令开启
总结¶
auditd 是你部署在服务器上的「安全摄像头」:
- 文件监控:
-w /path -p wa -k tag - 系统调用监控:
-a always,exit -S syscall -k tag - 日志分析:
ausearch搜索、aureport报告 - 合规:等保要求的关键文件变更审计,auditd 天然支持
安装后先配置关键文件的监控规则(/etc/passwd、/etc/sudoers、/etc/ssh/sshd_config),这是安全基线的最低要求。 🚀