按目录盯执行动作
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 | 登录会话的原始用户 ID | auid=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,检索时一次捞全,避免漏看其中一类记录。