Skip to content

沙箱

ByteMind 提供多层级沙箱机制,限制 Agent 的文件访问、命令执行和网络请求范围。沙箱确保 Agent 在执行任务时不会超出预期边界,同时审批流程仍然生效。

沙箱层级

ByteMind 的沙箱在三个层面提供保护:

层级控制目标配置方式
文件系统读写目录范围writable_roots
命令执行可执行命令白名单exec_allowlist
网络访问允许访问的域名/IPnetwork_allowlist

文件系统沙箱

启用后,写操作(write_filereplace_in_fileapply_patch)被限制在 writable_roots 指定的目录内。读操作不受影响。

json
{
  "sandbox_enabled": true,
  "writable_roots": ["./src", "./tests", "./docs"]
}

此配置下,Agent 只能对 ./src./tests./docs 三个目录下的文件执行写入操作。尝试写入其他位置(如根目录配置、系统文件)将被拦截。

命令执行沙箱

exec_allowlist 定义可跳过审批直接执行的命令白名单,不在白名单中的命令仍需审批或触发沙箱拦截:

json
{
  "exec_allowlist": [
    { "command": "go", "args_pattern": ["test", "./..."] },
    { "command": "go", "args_pattern": ["build"] },
    { "command": "make", "args_pattern": ["build"] },
    { "command": "npm", "args_pattern": ["test"] },
    { "command": "git", "args_pattern": ["status"] }
  ]
}

每条规则包含 command(可执行文件名)和 args_pattern(参数匹配模式)。args_pattern 为前缀匹配:["test", "./..."] 同时匹配 go test ./...go test ./... -v

网络沙箱

network_allowlist 限制 Agent 执行网络请求时可访问的目标(适用于 web_fetchweb_search 等工具以及 run_shell 中的网络操作):

json
{
  "network_allowlist": [
    { "host": "api.github.com" },
    { "host": "*.openai.com", "port": 443 }
  ]
}

系统沙箱模式

system_sandbox_mode 控制沙箱约束在系统层面的执行严格程度:

说明
off不使用系统级沙箱(默认)
best_effort如果平台支持,应用系统沙箱
required强制要求系统沙箱,若不可用则报错

WARNING

system_sandbox_mode 需要 sandbox_enabled: true。设置为非 off 值但未启用沙箱会导致校验失败。

json
{
  "sandbox_enabled": true,
  "system_sandbox_mode": "best_effort"
}

与审批模式的关系

沙箱和审批系统独立但互补:

场景沙箱行为审批行为
写入 writable_roots 内文件允许仍需审批(默认)
写入 writable_roots 外文件拦截不触发审批
执行 allowlist 中的命令跳过审批不显示审批提示
执行未知命令触发风险判定弹出审批提示
访问 allowlist 中的网络允许不触发审批
访问未知网络目标触发风险判定弹出审批提示

即使配置了 full_access 审批模式,沙箱的文件系统和网络限制仍然生效。沙箱提供的是硬性边界,审批提供的是交互式门控。

通过环境变量启用

多个可写目录使用操作系统的路径列表分隔符(Linux/macOS 用 :,Windows 用 ;):

bash
# Linux / macOS — 冒号分隔
BYTEMIND_SANDBOX_ENABLED=true BYTEMIND_WRITABLE_ROOTS=./src:./tests bytemind
powershell
# Windows PowerShell — 分号分隔
$env:BYTEMIND_SANDBOX_ENABLED = "true"
$env:BYTEMIND_WRITABLE_ROOTS = "./src;./tests"
bytemind

启用系统沙箱模式:

bash
BYTEMIND_SANDBOX_ENABLED=true BYTEMIND_SYSTEM_SANDBOX_MODE=best_effort bytemind

最佳实践

  1. 渐进启用 — 先在可信项目中开启,确认工作流正常再推广
  2. 最小权限writable_roots 只包含确实需要修改的目录
  3. 与 exec_allowlist 配合 — 将常用安全命令(go testnpm test 等)加入白名单减少审批噪音
  4. CI 环境加 full_access — CI 流水线中配置 full_access 避免阻塞,沙箱提供硬性保护

相关页面

Released under the MIT License.