auditd 可实时监控并审计 /etc/shadow 的非授权读取行为,核心是捕获非 root 进程对该文件的 open/read 系统调用;需配置 -w /etc/shadow -p r 规则,结合 ausearch、aureport 和 lsof 交叉验证,以 auid 为准识别真实操作者。

可以利用 auditd 对 /etc/shadow 的非授权读取行为进行实时监控和事后审计,核心在于捕获“非 root 进程尝试打开或读取该文件”的系统调用事件。关键不是只看文件权限是否正确,而是盯住实际运行时的访问行为。
配置 auditd 规则捕获 shadow 访问事件
auditd 默认不记录对 /etc/shadow 的细粒度访问,需手动添加规则:
- 添加监控规则(永久生效):
sudo auditctl -w /etc/shadow -p r -k shadow_access
其中 -w 监控路径,-p r 表示监控读取操作,-k 指定关键词便于后续检索。 - 为确保重启后仍有效,将规则写入配置文件:
echo "-w /etc/shadow -p r -k shadow_access" | sudo tee -a /etc/audit/rules.d/shadow.rules - 重载规则:
sudo augenrules --load 或重启服务 sudo systemctl restart auditd
排查已发生的非授权读取行为
规则启用后,可通过以下命令快速定位异常访问:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 查最近 10 分钟内所有匹配 shadow_access 关键词的读取事件:
sudo ausearch -k shadow_access -ts recent | grep "comm=" - 筛选出非 root 用户发起的访问(重点关注 uid != 0):
sudo ausearch -k shadow_access -i | awk '/uid!=0/ && /\/etc\/shadow/' - 若发现可疑进程名(如 backup.sh、monitor.py),进一步检查其属主与执行上下文:
ps -fp $(pidof suspicious_process) 或查看完整审计记录:
sudo aureport -f -i --key shadow_access
结合运行时工具做交叉验证
auditd 是日志层面的记录,还需配合运行时工具确认当前是否存在异常打开句柄:
- 即时检查哪些进程正在读取 /etc/shadow:
sudo lsof +D /etc/ 2>/dev/null | grep shadow
注意输出中的 UID 列 —— 若出现非 0 的 uid,即为非授权读取实证。 - 排查定时任务或脚本硬编码读取:
grep -r "/etc/shadow" /etc/cron* /etc/systemd/system/ 2>/dev/null
尤其关注备份脚本、自研监控工具、老旧管理脚本中是否误用 cat/grep 直接读取。
注意权限与行为的分离判断
即使 /etc/shadow 权限是标准的 640(root:shadow),也不能排除风险:
- 某些服务(如 nslcd、sssd)会以 shadow 组成员身份合法读取,这是正常行为;重点识别的是普通用户(UID ≥ 1000)、无人值守脚本、或未知二进制发起的访问。
- sudo 提权后的读取属于授权行为,auditd 日志中会显示原始 UID 和有效 UID(auid vs uid),应以 auid(登录用户 ID)为判断依据,而非仅看 uid。
- 若发现异常,立即检查对应进程的启动方式、所属服务单元、以及是否被注入或劫持(如通过 LD_PRELOAD、ptrace 等手段绕过权限检查)。










