首页/安全/安全加固速查/关键目录命令执行审计(execve)

关键目录命令执行审计(execve)

用 execve 规则盯住关键目录(如 /usr/local/bin、/tmp)里的程序执行:入侵者留下的工具大多会在这些位置落地。

安全加固速查安全更新于 2026-10-13

按目录盯执行动作

Linux 审计(auditd)里的 execve 规则可以理解为“记录程序被执行”的动作。带上 dir= 条件后,只对指定目录里的可执行文件记账,日志量可控,线索价值却很高:入侵者落地的挖矿程序、扫描器、反弹 Shell 大多放在可写目录或容易被忽略的路径里。规则记录的是谁(uid/auid)、何时、执行了哪个路径,因此事件复盘时能直接还原执行链。

基本信息

适用平台Linux(auditd,RHEL/CentOS/Debian/Ubuntu 均适用)
权限要求root 或 CAP_AUDIT_CONTROL
规则文件/etc/audit/rules.d/ 下的 .rules 片段
规则键-k 后面的标签,用于 ausearch -k 检索
加固项关键目录命令执行审计

典型使用场景

  • 盯住落地目录:/tmp、/dev/shm、/var/tmp 里的程序执行,是入侵高发位置
  • 盯住自建运维目录:/usr/local/bin、/opt 里被替换或新增的工具
  • 特权会话溯源:结合高权限账号,还原谁执行了什么
  • 合规要求:等保三级要求对重要用户行为与安全事件可审计
  • 应急排查:事后按时间窗口捞出可疑执行记录

按目录监控执行

按目录监控执行
-a always,exit -F arch=b64 -S execve -F dir=/usr/local/bin -k exec_local
-a always,exit -F arch=b32 -S execve -F dir=/usr/local/bin -k exec_local
-a always,exit -F arch=b64 -S execve -F dir=/tmp -k exec_tmp
-a always,exit -F arch=b32 -S execve -F dir=/tmp -k exec_tmp
auditctl -l | grep exec_            # 确认规则已加载
augenrules --load                   # 重新加载 rules.d 并检查顺序
ausearch -k exec_tmp -ts recent | head -30

输出逐列读法

字段含义正常与异常
type=EXECVE一次程序执行事件同一目录出现陌生程序=需核实
auid登录会话的原始用户 IDauid=4294967295 表示非登录会话
exe被执行文件的绝对路径路径在可写目录=重点核查
uid / gid实际执行身份普通账号执行特权目录程序=异常
key规则标签,如 exec_tmp无 key 说明规则未匹配或未加载
execve 规则铺满全系统会产生巨量日志:只对关键目录或高权限会话开启,并按分区容量评估轮转与留存。
规则文件里写好后用 augenrules --load 加载并确认排序,加载顺序影响与其它规则共存的最终效果。

规则设计要点

  • 只覆盖真会被执行的可写目录:/tmp、/dev/shm、/var/tmp 是首选
  • 同一目录同时写 b32 与 b64 两条规则,避免 32 位程序绕过监控
  • key 命名体现目录与用途,例如 exec_tmp,事后检索最直观
  • 规则上线前先观察一周日志量,再决定是否扩大监控范围
  • 与审计配置固化配合:规则定稿后再启用不可变,防止被悄悄删除
同一目录的 b32 与 b64 规则建议共用同一个 key,检索时一次捞全,避免漏看其中一类记录。

易错点

  • 64 位系统只写 b64 规则:32 位兼容程序执行会绕过监控,b32/b64 要成对写
  • 误以为 dir= 会递归覆盖子目录:它只匹配该目录下直接执行的程序,子目录需另写规则
  • 规则铺得太大导致日志把磁盘写满:写满后审计服务可能停止记录,反而失去线索
  • 只加载规则不做持久化:重启后规则丢失,需要写入 rules.d 并确认已生效

数据来源与参考

  • CIS Linux Benchmark:execve 规则
  • Red Hat 审计文档

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌