auditd是唯一能回溯“谁、何时、用什么进程改了文件”的工具,工作在内核系统调用层,直接捕获write、openat等操作,并附带uid、auid、pid、comm、exe、cwd等完整上下文。

auditd 是唯一能回溯“谁、何时、用什么进程改了文件”的工具,它工作在内核系统调用层,不依赖命令行或应用程序日志,直接捕获 write、openat、renameat 等真实操作,并附带 uid、auid、pid、comm、exe、cwd 等完整上下文。
精准监控敏感文件写入与属性变更
对 /etc/shadow、/etc/passwd、/etc/sudoers 这类关键文件,必须用 -w 基于 inode 绑定路径,配合 -p wa 显式启用写入和属性变更监控:
- -p w 捕获内容修改(如 echo >、vim :w、cp 覆盖)
- -p a 捕获 chmod/chown/touch 等属性操作——攻击者常先隐藏文件再写入,漏掉 a 就会错过关键前置动作
- 避免滥用 -p r:读取高频且无安全意义(如 getpwent 调用),加 r 会导致日志爆炸,掩盖真正篡改
- 路径必须是真实 inode 路径:执行 ls -i /etc/shadow 确认,不要用软链接名(如 /etc/shadow-)或错误路径
确保规则永久生效不丢失
临时规则 auditctl -w 在 reboot 或 systemctl restart auditd 后全部清空,生产环境必须落盘为永久规则:
- 把规则写入 /etc/audit/rules.d/shadow.rules,格式严格:每行一条,无首行空格,例如:
-w /etc/shadow -p wa -k shadow_mod - 切勿直接编辑 /etc/audit/audit.rules——该文件由 augenrules 自动生成,手动修改会被覆盖
- 写完后执行 sudo augenrules --load 加载,再用 sudo auditctl -l | grep shadow_mod 验证是否生效
高效检索与可读化分析日志
audit.log 是二进制格式,-k 标签 是高效过滤的生命线,搭配 -i 才能还原真实语义:
- 查事件必须用 sudo ausearch -k shadow_mod -i,不加 -i 只显示 uid=0、pid=12345 等数字 ID,无法识别命令和路径
- -k 比 -f 更准:-f /etc/shadow 会受软链接、重命名干扰;-k 则按规则标签精确匹配
- 关键字段含义:comm="useradd" 是触发命令名,exe="/usr/sbin/useradd" 是实际执行文件,cwd="/root" 是操作时所在目录,success=yes 表示操作成功
- 若看到 comm="(unknown)",说明进程已退出,需结合 exe 和 ppid(父进程 ID)向上追溯调用链
避开虚拟文件系统监控陷阱
不能对 /proc、/sys、/dev 等虚拟文件系统使用 -w,因为它们没有真实 inode,auditd 不支持路径级监控:
- 执行 sudo auditctl -w /proc -p r 会静默失败,auditctl -l 中也不显示该规则
- 正确做法是系统调用级审计:sudo auditctl -a always,exit -F arch=b64 -S openat,read -F path=/proc -k proc_access
- 该规则匹配 openat/read 的 pathname 参数是否以 "/proc" 开头,可稳定捕获 cat /proc/1234/environ 或 ps auxf 等行为
- 如需聚焦高风险场景,可叠加过滤:-F auid!=0(排除 root 自身操作)、-F path=cmdline(只抓命令行参数)











