auditctl监控系统调用需用-a搭配-S和-F精确过滤,64位系统必加-F arch=b64,支持execve、open、bind等关键调用及用户、返回值、路径等条件筛选,并须通过auditctl -l/-s验证,永久规则需写入/etc/audit/rules.d/并augenrules --load加载。

auditctl 监控系统调用,核心是用 -a 搭配 -S(指定系统调用名)和精确过滤条件,不能只靠路径监控。它适合捕获动态行为,比如非标准路径执行、内存注入、端口绑定等。
明确架构并指定系统调用
64位系统必须加 -F arch=b64,否则规则不生效;如需兼容32位程序,额外补一条 -F arch=b32 规则。系统调用名要准确,常见可选:
- execve:程序执行(含 shell 脚本、二进制文件)
- open、openat、openat2:文件打开(配合 -F perm 可区分读写)
- unlink、unlinkat、rename、renameat:文件删除或重命名
- bind、connect、listen:网络套接字操作
- setuid、setgid、setreuid、setregid:权限提升行为
- adjtimex、settimeofday:时间篡改
添加带过滤的调用规则
单条规则可同时监控多个调用,也支持按用户、返回值、路径等过滤:
- 记录所有普通用户(auid ≥ 1000)执行程序:
sudo auditctl -a always,exit -F arch=b64 -S execve -F auid>=1000 -k user_exec - 捕获所有失败的 bind 操作(含端口占用、权限不足):
sudo auditctl -a always,exit -F arch=b64 -S bind -F exit=-1 -k failed_bind - 监控对 /etc/shadow 的 open 类操作(不管是否成功):
sudo auditctl -a always,exit -F arch=b64 -S open -F path=/etc/shadow -k shadow_open - 记录所有拒绝访问(EACCES)的文件操作:
sudo auditctl -a always,exit -F arch=b64 -S open,openat,openat2 -F exit=-EACCES -k access_denied
验证与清理规则
加完规则后必须确认是否真正加载,避免“以为生效、实则无效”:
- 列出当前全部规则:sudo auditctl -l(输出为空说明没加成功,或 auditd 未运行)
- 检查审计系统状态:sudo auditctl -s,重点看 enabled=1 和 pid=非零值
- 按 key 删除某类规则:sudo auditctl -d always,exit -k user_exec
- 清空所有临时规则(仅限测试环境):sudo auditctl -D
转为永久规则的必要步骤
临时规则重启即丢,生产环境必须固化:
- 把验证过的规则写入 /etc/audit/rules.d/10-critical-syscalls.rules(建议用数字前缀控制加载顺序)
- 每行一条规则,可加 # 开头注释说明用途
- 执行 sudo augenrules --load 编译并加载全部 .rules 文件
- 再运行 sudo auditctl -l | grep user_exec 确认已载入


















