auditd本身不能阻止文件修改,仅能精准捕获记录;需通过规则监控/etc/shadow写入、验证规则生效、再联动脚本或fail2ban实现阻断。

Auditd 本身不能阻止文件修改,它只负责精准捕获和记录。所谓“实时捕获并阻止”,本质是:用 auditd 实时发现非法修改 → 触发告警或脚本 → 由外部机制执行阻断动作(如终止进程、封IP、冻结用户)。下面分三步说清楚怎么做。
一、用 -w 规则捕获 /etc/shadow 的所有可疑写入行为
影子文件只应由 root 以受控方式更新(如 passwd 命令),任何直接写操作都高度可疑。
推荐规则(写入 /etc/audit/rules.d/10-shadow-write.rules):
-
-w /etc/shadow -p w -k shadow_write_attempt -
-w /etc/shadow -p a -k shadow_attr_change -
-a always,exit -F path=/etc/shadow -F perm=w -F auid!=0 -k unauthorized_shadow_write
说明:
第一行捕获所有写操作,用于基线观察;
第二行监控 chmod/chown 等属性变更(攻击者常借此绕过 -p w);
第三行聚焦非 root 用户(auid!=0)发起的写入,这是高置信度入侵信号;
每条规则必须带 -k,否则后续无法快速过滤。
二、验证规则是否真正生效
规则加完不验证,等于没加:
- 运行
sudo augenrules --load && sudo systemctl restart auditd - 检查是否加载:
sudo auditctl -l | grep shadow - 确认审计启用:
sudo auditctl -s | grep enabled,输出应为enabled 1 - 模拟测试(普通用户下):
su -l testuser -c "echo 'x' > /etc/shadow" 2>/dev/null || true - 查日志:
sudo ausearch -k unauthorized_shadow_write -i | tail -3
重点关注字段:auid=(谁登录的)、comm=(什么命令,如 bash、python3)、exe=(真实路径)、addr=(源 IP)。
三、从“捕获”到“响应”:轻量级自动阻断联动
auditd 日志写入 /var/log/audit/audit.log,可通过以下方式触发响应:
- 配置
audispd插件,将匹配unauthorized_shadow_write的事件转发给自定义脚本; - 脚本逻辑示例:解析
ausearch输出 → 提取auid和addr→ 执行pkill -u $AUID+iptables -I INPUT -s $ADDR -j DROP; - 或接入
fail2ban:用filter提取 audit.log 中的key="unauthorized_shadow_write"行,触发 ban 动作; - 更稳妥做法:检测到写入后,立即
systemctl stop sshd && systemctl stop crond暂停关键服务,为人工响应争取时间。
不复杂但容易忽略。

















