代码执行沙箱

📎 引用文件

本文引用的文件 - agent/src/core/runner.py - agent/src/tools/bash_tool.py - agent/src/tools/background_tools.py - agent/src/security/_shell_safety.py - agent/src/config/limits.py - agent/src/security/scanner.py - agent/src/security/network.py - agent/src/security/workspace_policy.py - agent/src/security/workspace_access.py - agent/tests/test_runner_env.py - agent/tests/test_tool_timeout.py - README_zh.md

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能与资源限制
  8. 故障排除指南
  9. 结论
  10. 附录:配置与安全策略清单

简介

本文件面向 Vibe-Trading 的代码执行沙箱,系统性说明其隔离机制、资源限制与执行环境安全。重点覆盖进程隔离、内存与文件访问控制、Shell 命令安全过滤、危险操作拦截、网络请求限制、执行监控、异常捕获与超时处理,并提供沙箱配置选项、安全策略定制与性能优化建议,以及常见场景的安全防护与排障方法。

项目结构

围绕“可执行代码”的隔离与约束,关键模块分布如下: - 子进程执行器与运行时环境构建:agent/src/core/runner.py - Shell 工具与后台任务执行:agent/src/tools/bash_tool.py、agent/src/tools/background_tools.py - Shell 安全过滤(防杀进程等):agent/src/tools/_shell_safety.py - 结果大小限制与截断:agent/src/config/limits.py - 外部内容注入扫描与净化:agent/src/security/scanner.py - 网络目标校验桥接:agent/src/security/network.py - 工作区路径策略与访问控制:agent/src/security/workspace_policy.py、agent/src/security/workspace_access.py - 行为验证测试:agent/tests/test_runner_env.py、agent/tests/test_tool_timeout.py - 默认安全策略与启用开关说明:README_zh.md

graph TB A["Runner(子进程执行器)"] --> B["环境变量白名单<br/>临时 HOME / rlimits / UID 降级"] A --> C["产物收集与日志落盘"] D["BashTool(Shell 工具)"] --> E["Shell 安全过滤<br/>禁止广谱 Python 进程终止"] F["BackgroundTools(后台任务)"] --> G["进程组管理<br/>超时/输出限制"] H["Security Scanner(注入扫描)"] --> I["外部内容净化/告警"] J["Network/Workspace(网络/工作区)"] --> K["URL 目标校验<br/>路径范围限制"]

图表来源 - agent/src/core/runner.py:33-110 - agent/src/core/runner.py:175-278 - agent/src/core/runner.py:480-620 - agent/src/tools/bash_tool.py:1-52 - agent/src/tools/background_tools.py:1-46 - agent/src/tools/_shell_safety.py:1-60 - agent/src/config/limits.py:1-49 - agent/src/security/scanner.py:1-220 - agent/src/security/network.py:1-11 - agent/src/security/workspace_policy.py:1-12 - agent/src/security/workspace_access.py:1-15

章节来源 - agent/src/core/runner.py:33-110 - agent/src/core/runner.py:175-278 - agent/src/core/runner.py:480-620 - agent/src/tools/bash_tool.py:1-52 - agent/src/tools/background_tools.py:1-46 - agent/src/tools/_shell_safety.py:1-60 - agent/src/config/limits.py:1-49 - agent/src/security/scanner.py:1-220 - agent/src/security/network.py:1-11 - agent/src/security/workspace_policy.py:1-12 - agent/src/security/workspace_access.py:1-15

核心组件

章节来源 - agent/src/core/runner.py:33-110 - agent/src/core/runner.py:480-620 - agent/src/tools/bash_tool.py:1-52 - agent/src/tools/background_tools.py:1-46 - agent/src/security/scanner.py:1-220 - agent/src/security/network.py:1-11 - agent/src/security/workspace_policy.py:1-12 - agent/src/security/workspace_access.py:1-15 - agent/src/config/limits.py:1-49

架构总览

下图展示从调用方到子进程执行的完整流程,包括环境裁剪、临时 HOME、资源限制、权限降级、超时与产物收集。

sequenceDiagram participant Caller as "调用方" participant Runner as "Runner(执行器)" participant Env as "环境构建" participant OS as "操作系统/内核" participant Child as "子进程(生成代码)" participant FS as "文件系统" Caller->>Runner : execute(entry_script, run_dir) Runner->>Env : _build_runtime_env(run_dir) Env-->>Runner : 白名单环境变量 + 编码/代理设置 Runner->>OS : 创建临时 HOME(仅暴露必要路径) Runner->>OS : 可选 UID 降级(vibe-sandbox) Runner->>OS : 设置 rlimits(RLIMIT_AS, RLIMIT_NOFILE) Runner->>Child : 启动子进程(带超时) Child->>FS : 读写受限目录/产物 Child-->>Runner : stdout/stderr/退出码 Runner->>FS : 写入日志与 artifacts Runner-->>Caller : RunResult(success, exit_code, logs, artifacts)

图表来源 - agent/src/core/runner.py:431-478 - agent/src/core/runner.py:503-620 - agent/src/core/runner.py:113-172 - agent/src/core/runner.py:85-110

详细组件分析

Runner:子进程执行与沙箱化

flowchart TD Start(["开始 execute"]) --> BuildEnv["构建运行环境<br/>白名单 + 编码 + 代理"] BuildEnv --> Home["创建临时 HOME<br/>仅暴露必要路径"] Home --> Rlimit["设置 rlimits<br/>RLIMIT_AS / RLIMIT_NOFILE"] Rlimit --> DropUID{"是否可降级到 vibe-sandbox?"} DropUID --> |是| RunAsUser["以受限用户运行子进程"] DropUID --> |否| RunAsRoot["以当前用户运行(记录警告)"] RunAsUser --> Exec["启动子进程(带超时)"] RunAsRoot --> Exec Exec --> Collect["收集 stdout/stderr/退出码"] Collect --> Artifacts["收集 artifacts/写日志"] Artifacts --> End(["返回 RunResult"])

图表来源 - agent/src/core/runner.py:431-478 - agent/src/core/runner.py:113-172 - agent/src/core/runner.py:85-110 - agent/src/core/runner.py:503-620

章节来源 - agent/src/core/runner.py:33-110 - agent/src/core/runner.py:175-278 - agent/src/core/runner.py:431-478 - agent/src/core/runner.py:503-620 - agent/tests/test_runner_env.py:18-115 - agent/tests/test_runner_env.py:155-220 - agent/tests/test_runner_env.py:297-318

BashTool:Shell 命令安全执行

sequenceDiagram participant Client as "调用方" participant Tool as "BashTool" participant Safety as "Shell 安全过滤" participant Proc as "子进程" Client->>Tool : 执行 command Tool->>Safety : broad_python_kill_error(command) alt 检测到危险 Safety-->>Tool : 返回错误信息 Tool-->>Client : 错误响应(不执行) else 安全 Safety-->>Tool : 通过 Tool->>Proc : 启动 shell 命令(带超时/输出限制) Proc-->>Tool : stdout/stderr/退出码 Tool-->>Client : 结构化结果 end

图表来源 - agent/src/tools/bash_tool.py:1-52 - agent/src/tools/_shell_safety.py:1-60

章节来源 - agent/src/tools/bash_tool.py:1-52 - agent/src/tools/_shell_safety.py:1-60

BackgroundTools:后台任务与进程组管理

章节来源 - agent/src/tools/background_tools.py:1-46

Security Scanner:外部内容注入扫描与净化

章节来源 - agent/src/security/scanner.py:1-220

Network/Workspace:网络与工作区访问控制

章节来源 - agent/src/security/network.py:1-11 - agent/src/security/workspace_policy.py:1-12 - agent/src/security/workspace_access.py:1-15

Limits:工具结果大小限制

章节来源 - agent/src/config/limits.py:1-49

依赖关系分析

graph LR Runner["Runner"] --> Env["环境变量白名单"] Runner --> RL["资源限制(resource)"] Runner --> UID["权限降级(pwd)"] Bash["BashTool"] --> Safe["Shell 安全过滤"] BG["BackgroundTools"] --> Proc["进程组/信号"] Scan["Security Scanner"] --> Regex["正则匹配"] Net["Network/Workspace"] --> URL["URL 校验"] Net --> Path["路径范围校验"]

图表来源 - agent/src/core/runner.py:175-278 - agent/src/core/runner.py:85-110 - agent/src/tools/bash_tool.py:1-52 - agent/src/tools/background_tools.py:1-46 - agent/src/security/scanner.py:1-220 - agent/src/security/network.py:1-11 - agent/src/security/workspace_policy.py:1-12

章节来源 - agent/src/core/runner.py:175-278 - agent/src/core/runner.py:85-110 - agent/src/tools/bash_tool.py:1-52 - agent/src/tools/background_tools.py:1-46 - agent/src/security/scanner.py:1-220 - agent/src/security/network.py:1-11 - agent/src/security/workspace_policy.py:1-12

性能与资源限制

章节来源 - agent/src/core/runner.py:85-110 - agent/src/core/runner.py:431-478 - agent/src/config/limits.py:1-49 - agent/tests/test_tool_timeout.py:42-99

故障排除指南

章节来源 - agent/tests/test_runner_env.py:188-220 - agent/tests/test_runner_env.py:297-318 - agent/tests/test_tool_timeout.py:42-99 - agent/src/tools/_shell_safety.py:1-60 - agent/src/security/network.py:1-11

结论

Vibe-Trading 的代码执行沙箱通过多层防御实现安全的代码执行: - 进程隔离:子进程执行、临时 HOME、可选 UID 降级。 - 资源限制:RLIMIT_AS/NOFILE、超时、输出限制。 - 访问控制:环境变量白名单、Shell 安全过滤、网络与工作区限制。 - 监控与健壮性:工具超时与心跳、注入扫描与净化、产物与日志收集。 建议在容器化部署中启用 UID 降级与资源限制,并结合环境变量精细调优;在生产环境中保持 Shell 工具默认关闭,仅在可信交互场景显式启用。

附录:配置与安全策略清单

章节来源 - README_zh.md:991-998 - agent/src/core/runner.py:175-278 - agent/src/core/runner.py:431-478 - agent/src/tools/_shell_safety.py:1-60 - agent/src/security/scanner.py:1-220 - agent/src/security/network.py:1-11 - agent/src/security/workspace_policy.py:1-12 - agent/src/config/limits.py:1-49