# execve 拦截器 ## 简介 本项目是一个通过动态链接库预加载 (LD\_PRELOAD) 方式实现的 `execve` 系统调用拦截器。它可以根据预定义的规则,在程序执行指定的命令时进行警告、阻止或记录操作。 **主要功能:** * **命令拦截与告警:** 当执行配置中指定的命令时,可以显示警告信息并询问用户是否继续执行。 * **命令阻止:** 可以完全阻止执行配置中指定的命令。 * **参数匹配:** 支持基于命令参数进行更细粒度的规则匹配。 * **配置热加载:** 能够检测到配置文件修改并自动重新加载规则。 * **日志记录:** 记录所有通过 `execve` 执行的命令及其参数。 * **输出重定向与错误检测:** 将执行命令的标准输出和错误输出记录到日志文件,并能在检测到错误时发出提示。 * **仅拦截终端 Shell:** 默认只在终端 Shell (如 bash, zsh, fish, sh) 中拦截 `execve` 调用,避免影响其他程序。 * **功能开关:** 可以通过配置文件中的 `enabled` 字段全局启用或禁用拦截功能。 ## 安装 1. **前提条件:** * 安装 `gcc` 等编译工具。 * 安装 `json-c` 库 (开发版本)。在 Debian/Ubuntu 上可以使用 `sudo apt-get install libjson-c-dev` 安装,在 CentOS/RHEL 上可以使用 `sudo yum install json-c-devel` 安装。 2. **编译:** ```bash gcc -shared -fPIC execve_interceptor.c -o execve_interceptor.so -ldl -ljson-c ``` * 确保你的代码文件名为 `execve_interceptor.c`。 3. **创建配置和日志目录 (如果不存在):** ```bash mkdir -p config logs ``` 4. **创建配置文件:** * 在 `config` 目录下创建 `execve_rules.json` 文件,并按照以下格式配置规则: ```json { "enabled": true, "rules": [ { "cmd": "nvidia-smi", "type": "warn", "msg": "在沐曦环境下请执行mx-smi" }, { "cmd": "rm", "type": "error", "msg": "Error: rm command is forbidden" }, { "cmd": "pip", "type": "warn", "msg": "使用pip安装torch时,请注意使用厂家支持版本", "args": ["install", "torch"] } ] } ``` * `enabled`: 布尔值,用于启用或禁用整个拦截器功能。 * `rules`: 一个 JSON 数组,包含多个规则对象。 * `cmd`: 要拦截的命令名称。 * `type`: 拦截类型,可以是 `"warn"` (警告) 或 `"error"` (阻止)。 * `msg`: 当规则匹配时显示的消息。 * `args` (可选): 一个字符串数组,指定需要匹配的命令参数。只有当所有指定的参数都存在时,规则才匹配。 ## 配置 * **`config/execve_rules.json`:** 这是主要的配置文件,用于定义拦截规则。你可以根据需要添加、修改或删除规则。 * **`logs/execve.log`:** 记录所有通过 `execve` 执行的命令及其参数。 * **`logs/execve_out.log`:** 记录被拦截命令的标准输出和错误输出。 ## 使用 要使用该拦截器,你需要通过 `LD_PRELOAD` 环境变量在执行命令前加载编译好的动态链接库。 **示例:** ```bash export LD_PRELOAD=$(pwd)/execve_interceptor.so nvidia-smi rm test.txt pip install torch ``` ## 前置依赖: - jsonc: ```bash # Ubuntu/Debian sudo apt-get install libjson-c-dev # CentOS/RHEL sudo yum install json-c-devel ``` ## 编译: - cd execve_hook && make ## 测试: - ./test_bash.sh ## 配置文件格式: ```json [ { "cmd": "nvidia-smi", // 将匹配的命令 "type": "warn", // 如果为warn,则会提示是否继续执行 "msg": "在沐曦环境下请执行mx-smi" // 提示信息 }, { "cmd": "rm", // 匹配的命令 "type": "error", // 如果为error,则会拦截命令执行 "msg": "Error: rm command is forbidden" // 提示信息 }, { "cmd": "pip", // 匹配的命令 "type": "warn", "msg": "使用pip安装torch时,请注意使用厂家支持版本", "args": ["install", "torch"] //当存在args,则这里的参数必须全部存在 } ] ```