不能直接用 -w /proc 监控整个 /proc 目录,因其为内核动态生成的虚拟文件系统,auditd 不支持对 procfs 使用路径监控规则;正确方式是使用 -s openat,read -f path=/proc 进行系统调用级审计,捕获读取 /proc/*/xxx 的行为,并通过 -k proc_access 标记便于检索分析。

不能直接用 -w /proc 监控整个 /proc 目录。
因为 /proc 是内核动态生成的虚拟文件系统(procfs),auditd 不支持对 procfs、sysfs、devtmpfs 等虚拟文件系统路径使用 -w 规则。尝试执行 sudo auditctl -w /proc -p r 会静默失败,ausearch -k proc_access 查不到任何记录,且 auditctl -l 中也不会显示该规则。
这不是配置错误,而是内核审计框架的明确限制——它只跟踪真实存储在磁盘或内存映射文件上的路径访问,而 /proc 下的内容(如 /proc/1234/cmdline、/proc/1234/environ、/proc/1234/status)是每次读取时由内核即时构造的,并无对应 inode 或持久路径。
正确思路:不监控 /proc 目录,而是监控读取 /proc 的进程行为
真正需要审计的是:
✅ 哪个用户、哪个程序、在什么时间,调用了 openat/read 等系统调用来访问 /proc/*/xxx;
✅ 特别是敏感操作,如读取其他进程的 environ(泄露环境变量)、cmdline(暴露命令参数)、maps(窥探内存布局)或 fd/(窃取文件描述符)。
这属于系统调用级审计,应使用 -S 规则配合过滤条件:
1. 添加精准的系统调用审计规则(推荐方式)
sudo auditctl -a always,exit -F arch=b64 -S openat,read -F path=/proc -k proc_access
说明:
-
-S openat,read:捕获打开和读取动作(openat是现代 glibc 默认调用,比open更准确) -
-F path=/proc:注意——这里不是监控目录,而是作为字符串匹配openat第二个参数pathname是否以/proc开头(auditd 内部按字面匹配path=字段值) -
-F arch=b64:显式指定 64 位架构(避免双架构重复触发) -
-k proc_access:打标签,便于后续检索
✅ 实测有效:当执行
cat /proc/$(pgrep bash)/environ或ps auxf时,该规则能稳定捕获事件。
2. 进阶:排除低风险访问,减少日志噪音
若只想关注高风险行为(如读取他人进程信息),可加 UID 或路径细化:
# 只记录非 root 用户读取 /proc/*/environ 或 /proc/*/cmdline sudo auditctl -a always,exit -F arch=b64 -S read -F path=/proc -F path=cmdline -F path=environ -F auid!=0 -k proc_sensitive_read # 或更严格:只记录对 /proc/[0-9]*/environ 的 read 调用(需 kernel ≥ 5.10 + audit 支持 path regex?不推荐,兼容性差)
实际中建议先用宽泛规则收日志,再用 ausearch 过滤分析模式,再收敛规则。
3. 永久生效(重启不丢失)
将规则写入 /etc/audit/rules.d/proc.rules:
## /etc/audit/rules.d/proc.rules -a always,exit -F arch=b64 -S openat,read -F path=/proc -k proc_access
然后加载:
sudo augenrules --load
验证是否生效:
sudo auditctl -l | grep proc_access
4. 查看与分析日志
# 查最近的 proc 相关事件(含可读时间、用户、命令、路径)
sudo ausearch -k proc_access --start recent -i | aureport -f -i
# 提取关键字段快速筛查
sudo ausearch -k proc_access -m syscall -i | awk '{print $1,$2,$10,$12,$14}' | column -t
重点关注字段:
-
auid:原始登录用户(不可被子进程伪造,比uid更可信) -
exe:发起访问的程序(如/usr/bin/ps,/bin/cat,/usr/bin/python3) -
comm:进程名(可能被篡改,参考价值次之) -
cwd:当前工作目录(辅助判断上下文) -
path:实际被读取的 proc 路径(如/proc/1234/environ) -
success=yes/no:操作是否成功(no可能是权限拒绝,也可能是目标进程已退出)
例如发现 auid=1001 exe="/usr/bin/strace" 读取 /proc/5678/maps,就需核查该用户为何调试他人进程。
补充提醒
- 不要试图用
-w /proc/self/environ——/self是符号链接,auditd 不解析符号链接终点,且/proc/self本身是虚拟路径,规则无效。 -
autrace也不适用此场景:它只跟踪单个命令启动全过程,无法覆盖所有可能读取/proc的任意程序。 - 若需实时告警,可用
audispd插件或外部脚本轮询ausearch结果,但注意性能开销。
本质上,审计 /proc 访问不是“监控一个目录”,而是“监控谁在调用系统调用读取进程信息”——抓住这个本质,规则才真正有效。











