教程

OpenClaw "Sandbox 越狱"排障指南:Sandbox / Tool Policy / Elevated 三层控制到底谁说了算

详解 OpenClaw 三套独立又叠加的权限控制机制:Sandbox 决定工具运行位置、Tool Policy 决定工具是否可用、Elevated 是仅针对 exec 的提权逃生舱,附 sandbox explain 排障命令和常见问题修复清单。

2026/8/125分钟 阅读ClaudeEagle

在 OpenClaw 中遇到"工具被拒绝执行"这类问题时,很多人会第一时间怀疑是权限没配对——但官方文档特别指出,OpenClaw 实际上有三套相关但完全不同的控制机制,搞混它们是排障时最常见的坑。本文基于官方文档理清 Sandbox、Tool Policy、Elevated 各自的职责边界。

三层控制各管一件事

1. Sandbox(沙箱) 决定:工具在哪里运行(Docker 还是宿主机) 配置键:agents.defaults.sandbox.* / agents.list[].sandbox.* 2. Tool Policy(工具策略) 决定:哪些工具可用/被允许 配置键:tools.* / tools.sandbox.tools.* / agents.list[].tools.* 3. Elevated(提权) 仅针对:exec 的"逃生舱"—— 在沙箱环境下临时切到宿主机执行 配置键:tools.elevated.* / agents.list[].tools.elevated.*

理解这三者独立且叠加生效,是排查"为什么这个工具用不了"这类问题的关键前提——三个控制点里任何一个说"不行",结果就是不行。

第一步排障:用 sandbox explain 看真相

bash
openclaw sandbox explain
openclaw sandbox explain --session agent:main:main
openclaw sandbox explain --agent work
openclaw sandbox explain --json

这个命令会打印出当前生效的完整状态——沙箱模式/范围/工作区访问权限、当前会话是否真的处于沙箱中(区分 main 和非-main 会话)、沙箱下工具的有效允许/拒绝清单(以及这个清单是从 agent 级、全局级还是默认值继承来的)、以及提权的门禁状态和对应的修复配置键路径。排障永远从这条命令开始,比凭猜测改配置高效得多。

Sandbox:工具在哪跑

agents.defaults.sandbox.mode 三种取值: "off" 全部在宿主机上运行 "non-main" 只有非-main 会话被沙箱化 (群组/频道场景下常见的"意外惊喜"来源) "all" 所有会话都被沙箱化

Bind mounts 安全速查——这是容易被忽视的安全细节:

- docker.binds 会"穿透"沙箱文件系统:挂载的内容会以 你设置的模式(:ro 或 :rw)出现在容器内 - 省略模式默认是读写(read-write),涉及源码/密钥挂载 建议显式加 :ro - scope: "shared" 会忽略 per-agent 绑定,只有全局绑定生效 - 挂载 /var/run/docker.sock 相当于把宿主机控制权交给了沙箱, 务必是有意为之才这么做 - workspaceAccess("ro"/"rw")和 bind 模式是相互独立的两个设置

Tool Policy:哪些工具存在/可调用

两条铁律,记住这两条能避免大部分困惑:

1. deny 永远优先生效 2. 一旦 allow 非空,其他所有未列出的工具都视为被拦截 Tool Policy 是硬性拦截——/exec 命令无法覆盖一个已被拒绝 的 exec 工具。/exec 只能改动已授权发送者的会话默认设置, 它本身不授予工具访问权限。

工具组简写能显著简化配置:

json5
{
  tools: {
    sandbox: {
      tools: {
        allow: ["group:runtime", "group:fs", "group:sessions", "group:memory"],
      },
    },
  },
}
可用工具组: group:runtime → exec, bash, process group:fs → read, write, edit, apply_patch group:sessions → sessions_list, sessions_history, sessions_send, sessions_spawn, session_status group:memory → memory_search, memory_get group:ui → browser, canvas group:automation → cron, gateway group:messaging → message group:nodes → nodes group:openclaw → 所有内置 OpenClaw 工具(不含provider插件)

Elevated:仅针对 exec 的逃生舱

Elevated 不会授予额外的工具权限,它只影响 exec 这一个工具 - 沙箱状态下:/elevated on(或 exec 时带 elevated: true 参数) 会切到宿主机运行(审批可能仍然适用) - /elevated full 可以为当前会话跳过 exec 审批 - 如果已经是非沙箱直接运行状态,elevated 基本是空操作 (仍受门禁约束) - Elevated 不区分技能范围(skill-scoped),也不会覆盖 工具的 allow/deny 设置 - /exec 和 elevated 是两回事——/exec 只调整已授权发送者的 会话级 exec 默认行为

门禁配置键:

启用开关:tools.elevated.enabled (及可选的 agents.list[].tools.elevated.enabled) 发送者白名单:tools.elevated.allowFrom.<provider> (及可选的 agents.list[].tools.elevated.allowFrom.<provider>)

常见"沙箱越狱"问题的修复清单

"Tool X blocked by sandbox tool policy"

修复方式(任选一种): 1. 关闭沙箱:agents.defaults.sandbox.mode=off (或单独针对某 agent:agents.list[].sandbox.mode=off) 2. 在沙箱内放行该工具: - 从 tools.sandbox.tools.deny 中移除 (或对应的 agents.list[].tools.sandbox.tools.deny) - 或加入 tools.sandbox.tools.allow(或对应 agent 级 allow)

"我以为这是 main 会话,为什么被沙箱化了?"

在 "non-main" 模式下,群组/频道的 key 并不算 main。 用 sandbox explain 显示的 main 会话 key, 或者干脆把 mode 切成 "off"

实战建议

1. 遇到任何权限相关的报错,第一反应是跑一次 openclaw sandbox explain --json,而不是直接改配置猜 2. 涉及 docker.binds 挂载源码或密钥目录时, 养成显式写 :ro 的习惯,不要依赖"默认行为" 3. 团队/多agent场景,优先用 group:* 简写而不是逐个列举工具名, 减少遗漏和维护成本 4. Elevated 权限的 allowFrom 白名单要按 provider 精确配置, 避免"启用了但没限定谁能用"这种半成品配置

总结

Sandbox 决定"在哪跑",Tool Policy 决定"能不能用",Elevated 决定"沙箱里能不能临时越到宿主机跑 exec"——三者相互独立又叠加生效,任何一层说"不"结果就是不行。记住 openclaw sandbox explain 这一条命令,能省下大量对着配置文件瞎猜的时间。


来源:Sandbox vs Tool Policy vs Elevated — OpenClaw 官方文档

相关文章推荐

教程OpenClaw SecretRef 完全教程:让 API Key 不用再以明文躺在配置文件里详解 OpenClaw SecretRef 密钥引用机制:内存快照运行时模型、active/inactive Surface 判定逻辑、env/file/exec 三种引用来源写法,以及生产环境凭据管理的实战建议。2026/8/12教程OpenClaw Elevated Mode 完全指南:AI 执行高权限命令的安全授权机制(2026)OpenClaw Elevated Mode(提权模式)完整指南:Elevated Mode 的设计理念(默认最小权限/高危操作需二次确认)、触发条件(哪些操作会进入 elevated 状态)、授权方式(/approve 命令批准单次/永久允许/拒绝)、在配置中预设允许的高权限命令(allowlist 策略)、Elevated Mode 与 Docker 沙箱的协同安全模型、在生产服务器上的推荐配置,以及常见使用场景(系统级命令/sudo/敏感文件操作)的安全实践。2026/4/2教程Claude Code 权限管理完全指南:精确控制 AI 能执行哪些操作Claude Code 权限系统完整解析:四种权限模式(default/acceptEdits/bypassPermissions/plan)、--allowedTools 和 --disallowedTools 精确工具控制、Bash 命令白名单语法(通配符匹配)、settings.json 持久化权限配置、CLAUDE.md 中的权限规则声明、CI/CD 自动化场景的权限配置、以及如何在效率和安全之间找到平衡点。2026/3/18教程OpenClaw Session Pruning 与 Compaction 的区别:谁在悄悄给你的会话上下文瘦身详解 OpenClaw Session Pruning 会话修剪机制:如何在每次 LLM 调用前修剪旧的工具调用结果以降低成本,与 Compaction 压缩机制的区别与配合方式,附智能默认值和手动配置方法。2026/8/12教程OpenClaw Prompt Caching 调优指南:cacheRetention、cache-ttl 修剪与心跳保温三件套详解 OpenClaw 提示缓存调优三大配置项:cacheRetention 缓存保留策略、contextPruning cache-ttl 上下文修剪、heartbeat 心跳保温,附配置合并优先级和不同场景的调优建议。2026/8/12教程OpenClaw Standing Orders 完全教程:让 Agent 拥有"常设授权",不再事事请示详解 OpenClaw Standing Orders(常设指令)机制:如何在 AGENTS.md 中定义授权范围、触发条件、审批关卡和升级规则,让 Agent 在边界内自主执行常规工作,配合 Cron Jobs 实现定时自动化。2026/8/12