Go to file
Pan Qiancheng c70317e54d 文件修改信息的debug日志 2025-04-07 13:20:15 +08:00
.vscode 加入enable的支持 2025-04-07 09:16:50 +08:00
config 加入enable的支持 2025-04-07 09:16:50 +08:00
logs 文件修改信息的debug日志 2025-04-07 13:20:15 +08:00
Makefile debug 2025-04-07 13:07:37 +08:00
README.md 加入enable的支持 2025-04-07 09:16:50 +08:00
execve_intercept.c 文件修改信息的debug日志 2025-04-07 13:20:15 +08:00
intercept.so 文件修改信息的debug日志 2025-04-07 13:20:15 +08:00
test_bash.sh welcome3 2025-03-26 16:49:27 +08:00

README.md

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. 编译:

    gcc -shared -fPIC execve_interceptor.c -o execve_interceptor.so -ldl -ljson-c
    
    • 确保你的代码文件名为 execve_interceptor.c
  3. 创建配置和日志目录 (如果不存在):

    mkdir -p config logs
    
  4. 创建配置文件:

    • config 目录下创建 execve_rules.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 环境变量在执行命令前加载编译好的动态链接库。

示例:

export LD_PRELOAD=$(pwd)/execve_interceptor.so
nvidia-smi
rm test.txt
pip install torch

前置依赖:

  • jsonc
# Ubuntu/Debian
sudo apt-get install libjson-c-dev

# CentOS/RHEL
sudo yum install json-c-devel

编译:

  • cd execve_hook && make

测试:

  • ./test_bash.sh

配置文件格式:

[
    {
        "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则这里的参数必须全部存在
    }
]