auditd对特定命令空间的审计本质是聚焦进程行为,需锁定二进制路径、识别auid/uid/参数等上下文,并捕获关联操作;盲目全量监控execve会导致日志爆炸且难以定位风险。

auditd 对特定命令空间的审计,本质是聚焦进程行为而非泛泛记录所有执行动作。关键在于锁定目标命令的二进制路径、识别其调用上下文(如 AUID、UID、参数)、并捕获后续关联操作(如写入临时目录、提权、执行新文件)。盲目监控 execve 全量事件会导致日志爆炸且难以定位真实风险。
明确你要审计的“命令空间”
所谓“命令空间”,不是指 shell 命令行本身,而是指一组具有相同安全意图或风险特征的可执行程序集合。例如:
- 业务应用主进程:
/opt/app/bin/server、/usr/local/myapp/start.sh - 特权运维工具链:
sudo、su、iptables、systemctl - 敏感管理脚本:
/usr/local/bin/backup.sh、/etc/cron.daily/db-clean
确定后,需确认其绝对路径(which 或 readlink -f),避免符号链接导致规则失效。
配置精准的系统调用级规则
优先使用 -a always,exit + -F path= 组合,直接绑定到二进制文件,不依赖进程名(comm 可被伪造):
# 监控特定应用启动(含完整参数) -a always,exit -F arch=b64 -S execve -F path=/opt/app/bin/server -k app_server_spawn # 监控 sudo 执行(排除自身审计日志干扰,可加 -F uid!=0 过滤 root) -a always,exit -F arch=b64 -S execve -F path=/usr/bin/sudo -k sudo_usage # 监控 setuid 程序(euid != uid 是提权标志) -a always,exit -F arch=b64 -S execve -F euid!=uid -k setuid_exec
注意:
-
-F arch=b64针对 x86_64 系统;若混用 32 位程序,需额外加-F arch=b32 -
-k标签必须唯一且语义清晰,便于后续ausearch -k快速过滤
补充关键上下文监控,形成行为闭环
单条执行记录价值有限。真正发现异常,需结合时间、用户、路径三重关联:
-
锁定调用者身份:
-F auid>=1000排除系统服务(auid 是登录会话初始 UID,不可被子进程篡改) -
捕获后续敏感动作:例如某应用启动后,在
/tmp创建并执行文件,应同时部署:-w /tmp/ -p wa -k app_tmp_activity -a always,exit -F arch=b64 -S execve -F dir=/tmp/ -k app_tmp_exec
-
限制噪音:用
-F uid!=1000排除非目标用户,或-F exit=-1单独捕获失败操作(如权限拒绝)
确保规则持久化与生效验证
临时规则(auditctl -a)重启即失,生产环境必须走持久化流程:
- 将上述规则写入
/etc/audit/rules.d/99-app-audit.rules - 运行
sudo augenrules --load(自动合并、语法检查、加载至内核) - 执行
sudo auditctl -l | grep app确认规则已加载 - 主动触发测试:运行目标命令 →
sudo ausearch -k app_server_spawn --start recent | aureport -f -i
常见失效原因:
-
systemctl restart auditd在 CentOS 7 上会清空规则(应改用augenrules --load) - 规则中路径不存在或为虚拟文件系统(如
/proc、/sys),auditd 不支持 - SELinux 启用时拦截审计(临时
setenforce 0测试是否为此原因)
不复杂但容易忽略











