auditd是linux内核级审计工具,能精确记录“谁、在何时、用哪个进程、以何种方式”修改关键配置文件,直接捕获openat、write、chmod等系统调用,聚焦/etc/passwd等三类高价值目标,通过-w路径、-p wa权限、-k标签组合规则,先auditctl临时验证再augenrules永久加载,并用ausearch -k高效查日志。

auditd 是 Linux 内核级审计工具,能精确记录“谁、在何时、用哪个进程、以何种方式”修改了关键配置文件。它不依赖应用层逻辑,直接捕获 openat、write、chmod 等系统调用,是唯一可回溯真实修改行为的方案。
一、明确监控目标:优先锁定三类高价值配置文件
避免全量监控导致日志爆炸,聚焦真正影响系统安全边界的路径:
- 账号与权限核心文件:/etc/passwd、/etc/shadow、/etc/group、/etc/sudoers、/etc/ssh/sshd_config —— 修改即可能意味着提权或后门植入
- 服务主配置文件:/etc/httpd/conf/httpd.conf(Apache)、/etc/nginx/nginx.conf(Nginx)、/etc/my.cnf(MySQL)—— 异常变更常关联横向渗透或数据泄露
- 系统启动与环境文件:/etc/profile、/etc/environment、/etc/crontab、/etc/cron.d/ —— 被篡改易用于持久化驻留
二、编写精准规则:路径、权限、标签三要素缺一不可
规则必须写对才有效,常见错误是加了 -p r 却想查写入,或路径不存在却硬加 -w。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 路径必须真实存在:执行 ls -l /etc/shadow 确认文件存在;若路径含软链,auditd 默认不跟随,需监控实际目标路径
-
-p 参数按需组合:
- -p wa:覆盖绝大多数场景(写入 + 属性变更,如 chmod/chown)
- -p w:仅捕获内容写入(echo、vim :w、cp 覆盖),不含 touch 或 chown
- 慎用 -p rwxa:读取(r)在敏感目录下极易产生海量日志,生产环境不建议开启
- -k 标签要统一且可读:如 -k etc_shadow_mod,后续用 ausearch -k etc_shadow_mod 可一键过滤,比 -f /etc/shadow 更可靠(避开软链干扰)
三、分两步落地:先临时验证,再永久生效
别跳过调试环节——90% 的规则失效源于没验证就写进配置。
-
临时加规则(即时生效,重启即丢):
sudo auditctl -w /etc/shadow -p wa -k etc_shadow_mod
执行后立即运行 sudo auditctl -l | grep shadow 确认加载成功,再手动改一次文件(如 sudo vipw),马上查:
sudo ausearch -k etc_shadow_mod -i | head -10 -
永久保存(开机自启,服务重启不失效):
创建文件:/etc/audit/rules.d/10-critical-files.rules
写入规则(每行一条,无空格开头):
-w /etc/shadow -p wa -k etc_shadow_mod
-w /etc/sudoers -p wa -k sudoers_mod
-w /etc/ssh/sshd_config -p wa -k sshd_config_mod
保存后执行:sudo augenrules --load
验证是否加载:sudo auditctl -l | grep "etc_shadow_mod"
四、高效查日志:用 ausearch 定向挖,别翻 audit.log
/var/log/audit/audit.log 是二进制格式原始日志,直接 cat 没意义。关键字段靠 -i 解析才能看懂:
-
查某次修改的完整上下文:
sudo ausearch -k etc_shadow_mod -i | tail -5
关注字段:comm="vipw"(命令名)、exe="/usr/bin/vipw"(真实可执行路径)、uid=0(操作用户)、cwd="/root"(当前目录) -
查某个用户的所有相关操作:
sudo ausearch -ui 1000 -k etc_shadow_mod -i(假设 auid=1000 是普通用户审计 ID) -
查某时间段内的所有变更:
sudo ausearch -k etc_shadow_mod --start "06/12/2026 14:00" --end "06/12/2026 16:00" -i










