Sandbox vs tool policy vs elevated
OpenClaw 具有三項相關(但不同)的控制機制:
- Sandbox (
agents.defaults.sandbox.*/agents.list[].sandbox.*) 決定 工具在何處執行(sandbox 後端與主機)。 - Tool policy (
tools.*,tools.sandbox.tools.*,agents.list[].tools.*) 決定 哪些工具可用/被允許。 - 提權(
tools.elevated.*、agents.list[].tools.elevated.*)是一個僅限執行的緊急逃逸方法,用於在您處於沙盒環境時在沙盒外執行操作(預設為gateway,或當執行目標設定為node時為node)。
使用檢查器來查看 OpenClaw 實際上 在做什麼:
openclaw sandbox explainopenclaw sandbox explain --session agent:main:mainopenclaw sandbox explain --agent workopenclaw sandbox explain --json它會顯示:
- 有效的 sandbox 模式/範圍/工作區存取權限
- 目前會話是否在 sandbox 環境中執行 (main vs non-main)
- 有效的 sandbox 工具允許/拒絕規則(以及來源為 agent/global/default)
- elevated 閘門與修復金鑰路徑
Sandbox:工具執行位置
Section titled “Sandbox:工具執行位置”Sandbox 由 agents.defaults.sandbox.mode 控制:
"off":所有內容都在主機上執行。"non-main":僅非主會話位於沙盒中(群組/通道常見的「意外」情況)。"all":所有內容都會被 sandbox。
請參閱沙盒化以了解完整矩陣(範圍、工作區掛載、映像檔)。
Bind mounts(安全性快速檢查)
Section titled “Bind mounts(安全性快速檢查)”docker.binds穿透 sandbox 檔案系統:您掛載的任何內容都會以您設定的模式(:ro或:rw)在容器內可見。- 如果省略模式,預設為讀寫;對於來源/機密,建議使用
:ro。 scope: "shared"會忽略每個 agent 的 繫結(僅全域 繫結適用)。- OpenClaw 會驗證綁定來源兩次:首先在標準化的來源路徑上,然後在解析最深層現有祖先後再次驗證。符號連結父級逃逸無法繞過被封鎖路徑或允許根目錄的檢查。
- 不存在的葉路徑仍然會受到安全檢查。如果
/workspace/alias-out/new-file透過符號連結父級解析到被封鎖的路徑或設定允許的根目錄之外,該綁定將被拒絕。 - 綁定
/var/run/docker.sock實際上是將主機控制權交給沙盒;請僅在有意的情況下這樣做。 - 工作區存取權限 (
workspaceAccess: "ro"/"rw") 與綁定模式無關。
工具原則:哪些工具存在/可呼叫
Section titled “工具原則:哪些工具存在/可呼叫”兩個層級很重要:
- 工具設定檔:
tools.profile和agents.list[].tools.profile(基本允許清單) - 提供者工具設定檔:
tools.byProvider[provider].profile和agents.list[].tools.byProvider[provider].profile - 全域/個別代理工具原則:
tools.allow/tools.deny和agents.list[].tools.allow/agents.list[].tools.deny - 提供者工具原則:
tools.byProvider[provider].allow/deny和agents.list[].tools.byProvider[provider].allow/deny - 沙盒工具原則 (僅在沙盒化時適用):
tools.sandbox.tools.allow/tools.sandbox.tools.deny和agents.list[].tools.sandbox.tools.*
經驗法則:
deny永遠優先。- 如果
allow非空,其他所有內容都將視為被封鎖。 - 工具原則是硬性停止:
/exec無法覆蓋被拒絕的exec工具。 - 工具原則會依名稱過濾可用工具;它不會檢查
exec內部的副作用。如果允許exec,拒絕write、edit或apply_patch並不會讓 shell 指令變成唯讀。 /exec僅變更經授權發送者的會話預設值;它不會授予工具存取權。 提供者工具金鑰接受provider(例如google-antigravity)或provider/model(例如openai/gpt-5.4)。
工具群組(簡寫)
Section titled “工具群組(簡寫)”工具原則(全域、代理程式、沙盒)支援可展開為多個工具的 group:* 項目:
{ tools: { sandbox: { tools: { allow: ["group:runtime", "group:fs", "group:sessions", "group:memory"], }, }, },}可用群組:
group:runtime:exec、process、code_execution(bash被接受作為exec的別名)group:fs:read、write、edit、apply_patch對於唯讀代理程式,請拒絕group:runtime以及可變更檔案系統的工具,除非沙盒檔案系統原則或獨立的主機邊界強制執行唯讀限制。group:sessions:sessions_list、sessions_history、sessions_send、sessions_spawn、sessions_yield、subagents、session_statusgroup:memory:memory_search,memory_getgroup:web:web_search,x_search,web_fetchgroup:ui:browser,canvasgroup:automation:heartbeat_respond,cron,gatewaygroup:messaging:messagegroup:nodes:nodesgroup:agents:agents_list,update_plangroup:media:image,image_generate,music_generate,video_generate,ttsgroup:openclaw: 所有內建 OpenClaw 工具(不包含提供者插件)
提升權限:僅執行的「在主機上執行」
Section titled “提升權限:僅執行的「在主機上執行」”Elevated 模式不會授予額外工具;它只影響 exec。
- 如果您在沙盒中,
/elevated on(或帶有elevated: true的exec)會在沙盒外執行(仍可能需要審批)。 - 使用
/elevated full略過該連線階段的 exec 審批。 - 如果您已經在直接執行,elevated 實際上是無操作(但仍受閘道控管)。
- 提升權限並非以技能為範圍,也不會覆寫工具允許/拒絕設定。
- Elevated 不會授予來自
host=auto的任意跨主機覆寫;它遵循正常的 exec 目標規則,且僅在配置/連線階段目標已是node時才保留node。 /exec與 elevated 分開。它僅調整已授權發送者的連線階段 exec 預設值。
閘道管制:
- 啟用方式:
tools.elevated.enabled(以及選用的agents.list[].tools.elevated.enabled) - 發送者允許清單:
tools.elevated.allowFrom.<provider>(以及選用的agents.list[].tools.elevated.allowFrom.<provider>)
參閱 Elevated Mode。
常見的「沙箱監獄」修復方法
Section titled “常見的「沙箱監獄」修復方法”「工具 X 被沙箱工具政策封鎖」
Section titled “「工具 X 被沙箱工具政策封鎖」”修復金鑰(擇一):
- 停用沙盒:
agents.defaults.sandbox.mode=off(或每個代理程式的agents.list[].sandbox.mode=off) - 在沙箱內允許該工具:
- 從
tools.sandbox.tools.deny中移除它(或是針對每個代理程式的agents.list[].tools.sandbox.tools.deny) - 或是將它加入
tools.sandbox.tools.allow(或是針對每個代理程式的允許設定)
- 從
「我以為這是 main,為什麼它被沙箱化了?」
Section titled “「我以為這是 main,為什麼它被沙箱化了?」”在 "non-main" 模式下,群組/頻道金鑰並非主要金鑰。請使用主要工作階段金鑰(由 sandbox explain 顯示)或將模式切換至 "off"。
- 沙箱機制 — 完整的沙箱參考資料(模式、範圍、後端、映像檔)
- 多代理程式沙箱與工具 — 每個代理程式的覆寫與優先順序
- 提權模式