适用场景
auditd 审计日志框架适用于需要记录”谁在何时对什么文件或命令做了什么”的高安全场景:等保三级合规审计、关键文件(/etc/passwd、Web 目录)完整性监控、特权命令与 SSH 登录溯源、入侵后取证。它基于 Linux 内核审计子系统,无需安装第三方 agent。
前置条件
- Linux 内核 2.6 及以上(默认支持 audit)
- root 权限
- 预留至少 1GB 磁盘空间(默认日志目录 /var/log/audit/)
原理说明
auditd 依赖内核 audit 子系统工作:内核将系统调用、文件访问、登录事件写入审计队列,用户态守护进程 auditd 负责落盘,规则由 auditctl 加载。查询日志用 ausearch(按条件检索)与 aureport(汇总报表)。规则文件位于 /etc/audit/rules.d/,可持久化生效。
操作步骤
第一步:安装并启动
Ubuntu/Debian:
sudo apt install -y auditd audispd-plugins
sudo systemctl enable --now auditd
CentOS/RHEL 通常已内置:
sudo systemctl enable --now auditd
第二步:编写审计规则
创建 /etc/audit/rules.d/security.rules:
# 监控关键文件写与属性变更
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
# 监控 Web 目录文件变化
-w /var/www/html -p wa -k webroot
# 记录 root 用户执行的所有命令
-a always,exit -F arch=b64 -S execve -F euid=0 -k rootcmd
# 记录网络连接建立
-a always,exit -F arch=b64 -S connect -k network
-w 指定监控路径,-p wa 表示写与属性变更,-k 设置检索关键字。
第三步:加载规则
sudo auditctl -R /etc/audit/rules.d/security.rules
sudo auditctl -l
第四步:查询与溯源
# 按关键字检索今日事件
sudo ausearch -k identity -ts today
# 可读化输出(uid 转用户名)
sudo ausearch -k webroot -i
# 认证与登录报表
sudo aureport -au
sudo aureport -l
-i 将数字 ID 转换为可读名称,-ts today 限定时间范围。
第五步:日志保护与防篡改
编辑 /etc/audit/auditd.conf:
max_log_file = 128
num_logs = 5
space_left = 75
action_mail_acct = root
规则加载完成后设置不可变模式(重启前规则不可修改):
echo "-e 2" | sudo tee -a /etc/audit/rules.d/security.rules
sudo auditctl -R /etc/audit/rules.d/security.rules
配置验证
- 触发事件:执行
sudo touch /etc/passwd后运行sudo ausearch -k identity -i,应出现 type=PATH 记录 - 规则生效:
sudo auditctl -l输出与规则文件一致 - 报表可用:
sudo aureport -au显示认证尝试统计 - 重启持久化:reboot 后复查
sudo auditctl -l,规则仍存在
常见问题
Q1:auditd 与 ELK 日志平台冲突吗?
不冲突。auditd 负责内核级采集,可通过 audispd 插件(如 syslog 转发)将事件送入 ELK 统一分析,实现实时告警。
Q2:监控 Web 目录导致日志量过大怎么办?
缩小监控范围(只监控关键子目录),利用 -k 关键字精确检索;仍过大时调大 max_log_file 并启用日志轮转(num_logs)。
Q3:重启后规则丢失?
直接用 auditctl 添加的规则仅对当前会话生效,规则必须写入 /etc/audit/rules.d/ 才会在重启后自动加载。
总结
auditd 以内核审计能力提供比 Web 日志更底层的证据链:文件、命令、网络连接全量可追溯。建议关键服务器强制开启,配合关键字规则与定期 ausearch 巡检,构成应急响应与合规审计的取证基础。