auditd可捕获系统调用失败事件,需配置规则监控exit=-1或exit=-13等返回值,如openat、execve、connect等关键调用,并用-k标记便于ausearch检索。

auditd 本身不记录“API调用失败”——它记录的是内核系统调用(syscall)的执行过程,包括成功与失败。所谓“系统级API调用失败”,在Linux底层实际体现为某个系统调用返回负值(如 open() 返回 -1 并设 errno),而 auditd 可以捕获这些失败事件,前提是规则明确要求监控“失败退出”(exit)且条件匹配。
明确监控目标:聚焦关键失败系统调用
不是所有系统调用都需审计,应优先捕获权限类失败的核心调用:
-
open,openat:文件/目录访问被拒绝(EACCES,EPERM) -
execve:程序执行失败(如因 noexec 挂载、SELinux 限制、缺少执行权限) -
connect,bind:网络套接字操作失败(如端口被占用、地址不可达、防火墙拦截) -
chmod,chown,setuid:权限或属主变更被拒 -
mount,umount:挂载操作失败(常见于容器或受限命名空间)
配置精准规则:捕获失败并标记来源
在 /etc/audit/rules.d/perm-fail.rules 中添加以下内容(注意后缀必须是 .rules):
-a always,exit -F arch=b64 -S open,openat -F exit=-13 -k perm_denied -a always,exit -F arch=b64 -S execve -F exit=-1 -k exec_denied -a always,exit -F arch=b64 -S connect,bind -F exit=-13 -k net_denied -a always,exit -F arch=b64 -S chmod,chown,setuid -F exit=-1 -k owner_denied
说明:
-
-F exit=-13表示捕获返回值为 -13 的调用(EACCES,权限拒绝);-F exit=-1捕获通用失败(需结合上下文判断) -
-k perm_denied是关键标签,后续用ausearch -k perm_denied即可快速提取所有权限拒绝事件 - 务必同时加
-F arch=b32规则(若系统运行 32 位兼容程序),否则可能漏掉部分调用
验证与排查:从日志定位真实权限瓶颈
规则生效后(运行 sudo augenrules --load),复现一次失败操作,再执行:
sudo ausearch -k perm_denied -i | tail -20
输出中重点关注这几项:
-
exe:哪个程序发起的调用(如/usr/bin/curl、/bin/bash) -
cwd:当前工作目录(判断路径是否受 mount options 限制) -
path或name:被访问的具体文件/目录/设备节点 -
comm和pid:进程名与ID,便于关联ps -fp PID查看完整命令行 -
capability字段(如有):提示是否缺失特定 capability(如cap_net_bind_service)
例如发现 connect 失败且 path=/var/run/docker.sock,结合 exe=/usr/bin/docker,基本可锁定为用户未加入 docker 组;若 openat 失败指向 /sys/fs/cgroup/memory/xxx,则可能是 cgroup v2 权限或 systemd scope 限制。
补充检查:避免 auditd 自身干扰排查
确保 auditd 正常运行且日志可读:
- 运行
sudo systemctl status auditd,确认状态为active (running) - 检查
/var/log/audit/audit.log是否有新写入(sudo tail -f /var/log/audit/audit.log) - 若日志为空,先执行
sudo auditctl -l确认规则已加载,再检查/var/run/auditd.pid是否残留导致启动失败
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











