auditctl 通过监控 execve 系统调用实现对脚本执行的细粒度审计,需指定架构、解释器路径、脚本路径及 key 标签,规则应写入 /etc/audit/rules.d/ 并用 augenrules 加载以持久化。

在 Linux 中,auditctl 可以对特定脚本(如 /usr/local/bin/backup.sh)的执行过程进行细粒度监控,包括谁执行、何时执行、传入什么参数、是否成功等。关键不是“锚点”,而是通过系统调用层面的审计规则,捕获 execve 等关键事件。
明确监控目标:聚焦 execve 系统调用
脚本执行本质是内核调用 execve() 加载解释器(如 /bin/bash)并传入脚本路径和参数。Audit 无法直接“监控脚本文件被读取”,但能精准捕获其被执行的瞬间。因此规则应围绕 execve 展开,而非文件读写。
- 使用
-a always,exit确保每次调用都记录 - 用
-F exe=/path/to/interpreter(如/bin/bash)缩小范围,避免捕获所有命令 - 用
-F path=/full/path/to/script.sh进一步限定——注意:这实际匹配的是execve的第一个参数(即脚本路径),但需确保脚本有可执行权限且被直接调用(如./script.sh或/path/script.sh) - 加上
-F arch=b64(x86_64)或b32(兼容模式),避免因架构不匹配漏记
添加精准审计规则
假设脚本为 /opt/scripts/deploy.sh,使用 bash 解释器:
sudo auditctl -a always,exit -F arch=b64 -F exe=/bin/bash -F path=/opt/scripts/deploy.sh -F key=deploy_script
说明:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
-F key=deploy_script是关键标签,便于后续用ausearch -k deploy_script快速筛选日志 - 若脚本可能被不同用户执行,无需额外加
-F uid,审计默认记录所有 UID/GID - 规则立即生效,无需重启服务
验证与提取执行轨迹日志
触发一次脚本运行后,用以下命令查看完整上下文:
sudo ausearch -k deploy_script --start recent --raw | aureport -f -i
输出中重点关注:
-
exe="/bin/bash":实际执行的程序 -
cwd="/home/user":执行时的工作目录 -
cmd="deploy.sh --env prod":完整的命令行参数(含空格和选项) -
uid=1001 auid=1001:真实用户 ID 和审计会话 ID(即使 sudo 切换也保留原始 auid) -
success=yes或no:执行是否成功返回
持久化规则与注意事项
临时规则在 reboot 后丢失,需写入配置文件:
- 编辑
/etc/audit/rules.d/script-monitor.rules,内容同上auditctl命令(去掉sudo auditctl,只留规则行) - 执行
sudo augenrules --load激活并持久生效 - 注意:若脚本由 cron 或 systemd service 调用,
auid仍为原始用户(cron 默认继承 root 的 auid),可用ausearch -m execve -i | grep deploy.sh辅助确认 - 避免过度监控:不要对
/bin/sh或/usr/bin/python全局加path=,否则日志爆炸
不复杂但容易忽略:真正记录的是“谁调用了什么解释器去跑哪个脚本”,而不是“谁打开了脚本文件”。抓住 execve 这个核心,就能清晰还原每一次执行轨迹。

















