You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux是否支持execve用户态回调?除auditd外如何监控可执行文件调用及参数

监控可执行文件调用并获取命令行参数的用户态方案

除了配置auditd规则,还有几种实用的用户态方案可以实现需求,以下是具体选项:

1. auditd 用户态工具链(推荐,原生可靠)

既然你已经了解auditd,其实它自带的用户态工具就能直接满足需求,无需自己手动解析日志:

  • 临时添加监控规则(重启后失效,如需持久化可写入/etc/audit/rules.d/):
    auditctl -a exit,always -F path=/path/to/target/exe -F perm=x
    
  • 实时查看触发的事件:
    ausearch -f /path/to/target/exe --raw | aureport -x -i
    
    这条命令会直接输出包含完整命令行参数、调用用户、PID等关键信息的结构化报告。
  • 如果要自定义处理逻辑,可以用libaudit库编写轻量用户态程序,直接订阅audit事件流,比解析日志文件更高效。

2. strace(临时测试场景适用)

strace是常用的系统调用跟踪工具,可用于监控可执行文件的调用:

  • 监控所有已运行的目标进程:
    strace -e execve -f -qq -o /tmp/exe_monitor.log -p $(pidof target_exe)
    
  • 如果要捕获新启动的进程,可以配合简单脚本循环检测:
    > /tmp/tracked_pids
    while true; do
      for pid in $(pgrep -f /path/to/target/exe); do
        if ! grep -q "^$pid$" /tmp/tracked_pids; then
          echo "$pid" >> /tmp/tracked_pids
          strace -e execve -f -qq -o /tmp/exe_$pid.log -p "$pid" &
        fi
      done
      sleep 1
    done
    
    这种方式属于临时方案,适合短时间测试,稳定性不如auditd。

3. eBPF 工具(高效灵活,生产环境首选)

eBPF是现代Linux系统的高性能监控方案,纯用户态加载程序,无需修改内核:

  • 用bcc工具集的execsnoop快速实现监控:
    execsnoop -n target_exe
    
    运行后会实时打印目标程序的所有调用事件,包含完整命令行参数、PID、PPID、调用者用户等信息。
  • 若需自定义逻辑,可基于bcc或libbpf编写专属工具,精准过滤目标可执行文件的execve调用,性能开销极低。

4. inotify + proc 文件系统(局限性较大)

你之前使用过inotify,可结合proc文件系统补充获取命令行参数,但存在明显局限:

  • 用inotify监控目标可执行文件的OPEN事件,触发后遍历/proc目录,通过/proc/$pid/exe软链接匹配目标程序,再读取/proc/$pid/cmdline获取命令行(注意参数以\0分隔,需做转换)。
  • 这种方式可能漏掉短生命周期的进程(事件触发时进程已退出),且有一定延迟,仅适合对实时性要求不高的场景。

总结

  • 追求可靠性和原生集成:优先选择auditd用户态工具链
  • 生产环境高性能需求:使用eBPF方案
  • 临时测试:用strace快速验证
  • 兼容现有inotify逻辑:可尝试inotify+proc组合,但需接受局限性

内容的提问来源于stack exchange,提问作者Eric Texley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:54:51