跳到內容

OpenClaw 權限管理指南:Sandbox、Tool Policy 與 Elevated

開發者在處理自動化任務時,最頭痛的莫過於權限配置與環境隔離的衝突。當你以為腳本會在主機上順利執行,卻因為沙盒限制而頻頻報錯,這種「明明權限開了卻跑不動」的挫折感,相信大家都不陌生。

透過 OpenClaw 的 Sandbox、Tool policy 與 Elevated 機制,你可以精確控制工具的執行環境與權限邊界。這篇文章將帶你釐清這些控制項的運作邏輯,確保你的 OpenClaw 任務能精準執行。

使用 inspector 工具來查看 OpenClaw 當前實際的執行狀態,這能幫你快速釐清問題所在:

Terminal window
openclaw sandbox explain
openclaw sandbox explain --session agent:main:main
openclaw sandbox explain --agent work
openclaw sandbox explain --json

它會輸出以下資訊:

  • 有效的沙盒模式、範圍與工作區存取權限
  • 當前 session 是否處於沙盒中(main 與非 main 的區別)
  • 有效的沙盒工具允許/拒絕清單(以及這些規則是來自 agent、全域還是預設設定)
  • Elevated 閘道與修復建議的 key 路徑

沙盒化行為主要由 agents.defaults.sandbox.mode 進行控制:

  • "off":所有內容都在主機上執行。
  • "non-main":僅非 main 的 session 會被沙盒化(這通常是群組或頻道中常見的「意外」)。
  • "all":所有內容都會被沙盒化。

請參考 Sandboxing 以查看完整的矩陣資訊(包含範圍、工作區掛載與映像檔)。

  • docker.binds 會穿透沙盒檔案系統:你掛載的任何內容都會以你設定的模式(:ro 或 :rw)在容器內可見。
  • 如果省略模式,預設為讀寫;建議針對原始碼或機密檔案使用 :ro。
  • scope: "shared" 會忽略個別 agent 的掛載設定(僅套用全域掛載)。
  • OpenClaw 會對掛載來源進行兩次驗證:先檢查標準化後的來源路徑,再檢查解析最深層現有父目錄後的路徑。透過符號連結(symlink)父目錄的逃逸方式,無法繞過被封鎖的路徑或允許的根目錄檢查。
  • 不存在的葉節點路徑仍會被安全檢查。如果 /workspace/alias-out/new-file 透過符號連結父目錄解析到被封鎖的路徑,或是超出設定的允許根目錄,掛載將被拒絕。
  • 掛載 /var/run/docker.sock 等同於將主機控制權交給沙盒;請務必謹慎操作。
  • 工作區存取權限 (workspaceAccess: "ro"/"rw") 與掛載模式是獨立的。

Tool policy:哪些工具存在或可被呼叫

Section titled “Tool policy:哪些工具存在或可被呼叫”

這裡有兩個層級的設定非常重要:

  • Tool profile:tools.profile 與 agents.list[].tools.profile(基礎允許清單)
  • Provider tool profile:tools.byProvider[provider].profile 與 agents.list[].tools.byProvider[provider].profile
  • 全域/個別 agent 工具政策:tools.allow/tools.deny 與 agents.list[].tools.allow/agents.list[].tools.deny
  • Provider 工具政策: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 僅會更改授權發送者的 session 預設值;它不會授予額外的工具存取權。 Provider 工具 key 接受 provider(例如 google-antigravity)或 provider/model(例如 openai/gpt-5.4)。

工具政策(全域、agent、沙盒)支援 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:sessions:sessions_list、sessions_history、sessions_send、sessions_spawn、sessions_yield、subagents、session_status
  • group:memory:memory_search、memory_get
  • group:web:web_search、x_search、web_fetch
  • group:ui:browser、canvas
  • group:automation:cron、gateway
  • group:messaging:message
  • group:nodes:nodes
  • group:agents:agents_list
  • group:media:image、image_generate、video_generate、tts
  • group:openclaw:所有內建的 OpenClaw 工具(不包含 provider 外掛)

Elevated:僅限 exec 的「在主機上執行」

Section titled “Elevated:僅限 exec 的「在主機上執行」”

Elevated 並不會授予額外的工具權限;它只會影響 exec。

  • 如果你處於沙盒中,執行 /elevated on(或將 elevated: true 用於 exec)會在沙盒外執行(審核機制可能仍然適用)。
  • 使用 /elevated full 來跳過該 session 的 exec 審核。
  • 如果你已經在直接執行,Elevated 實際上沒有作用(仍受閘道限制)。
  • Elevated 不具備技能範圍限制,也不會覆蓋工具的允許/拒絕設定。
  • Elevated 不會授予來自 host=auto 的任意跨主機覆蓋;它遵循正常的 exec 目標規則,並且僅在設定或 session 目標已經是 node 時保留 node。
  • /exec 與 Elevated 是分開的。它僅調整授權發送者的個別 session exec 預設值。

閘道設定:

  • 啟用:tools.elevated.enabled(以及選用的 agents.list[].tools.elevated.enabled)
  • 發送者允許清單:tools.elevated.allowFrom.<provider>(以及選用的 agents.list[].tools.elevated.allowFrom.<provider>)

請參考 Elevated Mode。

「工具 X 被沙盒工具政策封鎖」

Section titled “「工具 X 被沙盒工具政策封鎖」”

請選擇以下其中一種修復方式:

  • 停用沙盒:agents.defaults.sandbox.mode=off(或針對個別 agent 使用 agents.list[].sandbox.mode=off)
  • 在沙盒內允許該工具:
    • 從 tools.sandbox.tools.deny 中移除它(或針對個別 agent 的 agents.list[].tools.sandbox.tools.deny)
    • 或者將其加入 tools.sandbox.tools.allow(或個別 agent 的允許清單)

「我以為這是 main,為什麼它被沙盒化了?」

Section titled “「我以為這是 main,為什麼它被沙盒化了?」”

在 "non-main" 模式下,群組/頻道 key 並非 main。請使用 sandbox explain 顯示的主 session key,或是將模式切換為 "off"。

如果你在設定過程中遇到困難,歡迎隨時透過 AI Setup Assistant 尋求協助。

OpenClaw

OpenClaw Expert

還是卡住了?

如果這篇文件沒有解決你的情境,直接問 OpenClaw Expert,拿到可執行步驟。