核心是监控/etc/shadow文件的写(w)和属性变更(a)操作,规则为-w /etc/shadow -p wa -k passwd_mod,需持久化至/etc/audit/rules.d/并加载验证,再结合auid与登录审计溯源完整行为链。

要利用Auditd审计全站用户密码修改行为并满足合规要求,核心是捕获所有触发 /etc/shadow 文件变更的底层操作,因为真实密码(含哈希、过期策略等)只存于此,且每次 passwd、chage、usermod -p 等命令最终都会写入或修改该文件。
必须监控的路径与最小必要权限
只需精准盯住 /etc/shadow 一个文件,无需覆盖其他路径:
-
-w /etc/shadow -p wa -k passwd_mod:w捕获写入(如新设密码、更新哈希),a捕获属性变更(如密码过期时间、锁定状态),这两类操作已涵盖全部合规关注点 - 不加
r(读)——普通用户无法读取/etc/shadow,合法读取仅发生在认证流程中,由 PAM 处理,不属于“口令修改行为”审计范畴 - 不加
x(执行)——该文件不可执行,加了无效
规则必须持久化并验证生效
临时规则重启即失效,生产环境必须落盘:
- 新建文件:
sudo tee /etc/audit/rules.d/passwd_mod.rules <<'EOF'<br>-w /etc/shadow -p wa -k passwd_mod<br>EOF
- 合并加载:
sudo augenrules --load - 确认加载:
sudo auditctl -l | grep passwd_mod应输出完整规则行
快速定位谁在何时改了谁的密码
日志本身不直接记录“用户A改了用户B密码”,需通过上下文还原:
- 查最近修改:
sudo ausearch -k passwd_mod --start recent -i(-i自动解析 UID/GID) - 关键字段看三处:
exe(执行程序路径,如/usr/bin/passwd)、uid(当前有效用户,常为 root)、auid(原始登录用户,如普通用户 su 到 root 后改密,auid 才是真正操作人) - 若看到
exe="/usr/bin/passwd" auid=1002 uid=0,说明是 UID 1002 的用户登录后提权执行了密码修改
配合登录审计补全行为链条
单靠文件修改日志无法判断是否越权,需关联登录源头:
- 确保
auth [default=ignore] pam_audit.so已加入/etc/pam.d/sshd和/etc/pam.d/system-auth - 这样每次 SSH 登录、su/sudo 切换都会生成带
auid的审计事件,与passwd_mod日志中的auid字段可精确匹配 - 合规报告中就能写出完整链:“用户 alice(auid=1001)于 XX:XX 通过 SSH 登录 → su 切换至 root → 执行 passwd 修改用户 bob 密码”

















