应使用 auditd 的 -a always,exit 规则配合 -F path=/etc/shadow -F perm=r -F euid=UID 和 -k 关键词,精准捕获目标用户以有效 UID 发起的读取尝试(含失败访问),并通过 ausearch -k 实时检索验证;规则须持久化至 /etc/audit/rules.d/ 并重载。

要审计特定用户对 /etc/shadow 文件的读取尝试,核心是利用 auditd 的系统调用级监控能力,结合用户 UID 和文件路径进行精准过滤。注意:/etc/shadow 默认仅 root 可读,普通用户直接 open/read 会因权限拒绝而失败,但 auditd 仍能捕获该尝试(即“失败的读取访问”),这对安全审计至关重要。
确认目标用户的 UID
auditd 规则中不能直接写用户名,必须使用数字 UID。例如要监控用户 alice:
- 运行
id -u alice获取其 UID(如1001) - 若用户可能通过 sudo 或 su 切换身份,还需考虑其实际有效 UID(euid),规则中应优先匹配
-F euid=1001
编写精确的 auditctl 规则
使用 auditctl 添加临时规则(重启后失效),或写入 /etc/audit/rules.d/ 下的 .rules 文件实现持久化:
-
监控 open/openat 系统调用(最常用):
-a always,exit -F path=/etc/shadow -F perm=r -F euid=1001 -k shadow_access_alice -
补充监控 read 系统调用(较少见,但可覆盖已打开后的读操作):
-a always,exit -F arch=b64 -S read -F a0>=0 -F euid=1001 -k shadow_read_alice(需注意 a0 是 fd,此规则较宽泛,建议慎用) -
关键字段说明:
-F perm=r捕获任何带读权限的文件访问(包括 open(O_RDONLY)、open(O_RDWR) 等)-F euid=1001确保只记录该用户作为**有效用户 ID** 发起的操作-k shadow_access_alice设置审计关键词,便于后续用ausearch -k shadow_access_alice快速检索
验证与排查常见问题
规则添加后,需测试并确认日志是否生成:
- 以目标用户(如 alice)执行:
cat /etc/shadow 2>/dev/null || true(预期失败,但应被审计) - 检查日志:
sudo ausearch -k shadow_access_alice -i | grep "exe=",确认有记录且euid匹配 - 常见问题:
若无记录,检查是否遗漏-F euid=(误用-F uid=会匹配真实 UID,不适用于 sudo 场景)
确保 auditd 正在运行:sudo systemctl status auditd
规则未加载?运行sudo auditctl -l查看当前活跃规则
持久化与日志分析建议
将规则保存到 /etc/audit/rules.d/shadow-monitor.rules,然后重载:
-
sudo augenrules --load(RHEL/CentOS/Fedora 推荐)或sudo service auditd restart(部分旧系统) - 日志默认存于
/var/log/audit/audit.log,建议配合ausearch和ausrep分析;也可用sudo tail -f /var/log/audit/audit.log | aureport -f -i实时查看文件事件 - 为防日志爆炸,避免使用过于宽泛的规则(如省略
-F euid或用-F uid)

















