应使用auditd基于inode的-w规则监控/etc/shadow真实路径及其备份文件,仅捕获写入和属性变更,禁用软链接干扰,确保日志含uid/euid/comm/exe/exit等可追溯字段。

监控/etc/shadow的非授权修改,关键不是阻止操作,而是确保每一次写入或权限变更都被完整、持久、可追溯地记录下来,并能结合上下文快速识别异常。auditd 的 -w 规则基于 inode 直接监听文件系统行为,是唯一能覆盖 cp/echo/sed/dd 等绕过 visudo 或编辑器的篡改方式的手段。
确认真实路径并禁用软链接干扰
/etc/shadow 必须用其实际 inode 路径监控。软链接(如 /etc/shadow → /usr/etc/shadow)会导致规则失效。
- 运行
ls -i /etc/shadow查看真实路径和 inode 号,多数情况下就是/etc/shadow,但必须验证 - 检查是否为软链:
ls -l /etc/shadow;若显示->,则需将规则指向目标路径(如/usr/etc/shadow) - 不监控整个
/etc或用通配符(如/etc/shadow*),auditd 不支持 shell 展开,会静默忽略
配置精准且持久的审计规则
只捕获真正代表“修改”的操作:写入(w)和属性变更(a),避免加 -p r 引入海量噪音(如 getpwent 调用)。
- 在
/etc/audit/rules.d/10-shadow.rules中写入一行:-w /etc/shadow -p wa -k shadow_mod - 不要加注释、空行或多余空格;文件权限设为
600(sudo chmod 600 /etc/audit/rules.d/10-shadow.rules) - 执行
sudo augenrules --load加载规则;再用sudo auditctl -l | grep shadow_mod确认已生效
验证捕获能力与判定“非授权”
auditd 不自动标记“非法”,但日志中必含判断依据字段:uid、euid、auid、comm、exe、exit 状态。
- 模拟一次修改:
sudo sh -c 'echo "test" > /etc/shadow' 2>/dev/null - 立即查日志:
sudo ausearch -k shadow_mod -m SYSCALL -i --start recent | tail -5 - 重点看:
–uid=0表示 root 执行(通常合法)
–uid=1001 euid=0表示普通用户提权后操作(可疑)
–comm="sh"或comm="perl"比comm="usermod"更需警惕
–exit=-13表示权限拒绝(失败的篡改尝试也值得记录)
补全防护面:备份与临时文件
攻击者常通过修改 /etc/shadow~、/etc/shadow.tmp 或重命名原文件来绕过单一路径监控。
- 补充规则(同样写入
.rules文件):-w /etc/shadow~ -p w -k shadow_backup-w /etc/shadow.tmp -p w -k shadow_tmp - 若系统使用符号链接管理(如指向
/usr/etc/shadow),则必须同步监控该真实路径 - 不推荐监控整个
/etc/目录——性能损耗大、日志不可读、难以定位真实事件











