跳轉到主要內容

概述

Claude Code 具有原生沙箱隔離功能,為代理執行提供更安全的環境,同時減少對持續權限提示的需求。沙箱隔離不是要求對每個 bash 命令進行許可,而是預先建立定義的邊界,讓 Claude Code 能夠以更低的風險更自由地工作。 沙箱化 bash 工具使用作業系統級別的原語來強制執行檔案系統和網路隔離。

為什麼沙箱隔離很重要

傳統的基於權限的安全性需要對 bash 命令進行持續的使用者批准。雖然這提供了控制,但可能導致:
  • 批准疲勞:重複點擊「批准」可能導致使用者對他們批准的內容關注度降低
  • 生產力降低:持續的中斷會減慢開發工作流程
  • 自主性受限:當等待批准時,Claude Code 無法高效工作
沙箱隔離通過以下方式解決這些挑戰:
  1. 定義清晰的邊界:精確指定 Claude Code 可以存取的目錄和網路主機
  2. 減少權限提示:沙箱內的安全命令不需要批准
  3. 維護安全性:嘗試存取沙箱外的資源會觸發即時通知
  4. 啟用自主性:Claude Code 可以在定義的限制內更獨立地運行
有效的沙箱隔離需要同時進行檔案系統和網路隔離。沒有網路隔離,被破壞的代理可能會洩露敏感檔案,如 SSH 金鑰。沒有檔案系統隔離,被破壞的代理可能會後門系統資源以獲得網路存取。配置沙箱隔離時,重要的是確保您配置的設定不會在這些系統中建立繞過。

工作原理

檔案系統隔離

沙箱化 bash 工具將檔案系統存取限制在特定目錄:
  • 預設寫入行為:對目前工作目錄及其子目錄的讀取和寫入存取
  • 預設讀取行為:對整個電腦的讀取存取,除了某些被拒絕的目錄
  • 被阻止的存取:無法在沒有明確許可的情況下修改目前工作目錄外的檔案
  • 可配置:通過設定定義自訂允許和拒絕的路徑

網路隔離

網路存取通過在沙箱外運行的代理伺服器進行控制:
  • 域名限制:只能存取已批准的域名
  • 使用者確認:新的域名請求會觸發權限提示
  • 自訂代理支援:進階使用者可以在出站流量上實施自訂規則
  • 全面覆蓋:限制適用於所有指令碼、程式和由命令產生的子程序

作業系統級別的強制執行

沙箱化 bash 工具利用作業系統安全原語:
  • Linux:使用 bubblewrap 進行隔離
  • macOS:使用 Seatbelt 進行沙箱強制執行
這些作業系統級別的限制確保由 Claude Code 命令產生的所有子程序都繼承相同的安全邊界。

入門

啟用沙箱隔離

您可以通過執行 /sandbox 斜杠命令來啟用沙箱隔離:
> /sandbox
這會使用預設設定啟動沙箱化 bash 工具,允許存取您的目前工作目錄,同時阻止存取敏感系統位置。

配置沙箱隔離

通過您的 settings.json 檔案自訂沙箱行為。有關完整配置參考,請參閱 設定
並非所有命令都與沙箱隔離開箱即用相容。一些可能幫助您充分利用沙箱的注意事項:
  • 許多 CLI 工具需要存取某些主機。當您使用這些工具時,它們會請求存取某些主機的權限。授予權限將允許它們現在和將來存取這些主機,使它們能夠在沙箱內安全執行。
  • watchman 與在沙箱中運行不相容。如果您正在執行 jest,請考慮使用 jest --no-watchman
  • docker 與在沙箱中運行不相容。考慮在 excludedCommands 中指定 docker 以強制其在沙箱外運行。
Claude Code 包含一個有意的逃生艙機制,允許命令在必要時在沙箱外運行。當命令因沙箱限制(如網路連接問題或不相容的工具)而失敗時,Claude 會被提示分析失敗,並可能使用 dangerouslyDisableSandbox 參數重試命令。使用此參數的命令會通過正常的 Claude Code 權限流程進行,需要使用者許可才能執行。這允許 Claude Code 處理某些工具或網路操作無法在沙箱限制內運行的邊界情況。您可以通過在 沙箱設定 中設定 "allowUnsandboxedCommands": false 來禁用此逃生艙。禁用後,dangerouslyDisableSandbox 參數將被完全忽略,所有命令必須在沙箱內運行或在 excludedCommands 中明確列出。

安全優勢

防止提示注入

即使攻擊者成功通過提示注入操縱 Claude Code 的行為,沙箱也確保您的系統保持安全: 檔案系統保護:
  • 無法修改關鍵配置檔案,如 ~/.bashrc
  • 無法修改 /bin/ 中的系統級別檔案
  • 無法讀取在您的 Claude 權限設定 中被拒絕的檔案
網路保護:
  • 無法將資料洩露到攻擊者控制的伺服器
  • 無法從未授權的域名下載惡意指令碼
  • 無法對未批准的服務進行意外的 API 呼叫
  • 無法聯繫任何未明確允許的域名
監控和控制:
  • 所有在沙箱外的存取嘗試都在作業系統級別被阻止
  • 當邊界被測試時,您會收到即時通知
  • 您可以選擇拒絕、允許一次或永久更新您的配置

減少攻擊面

沙箱隔離限制了以下來源的潛在損害:
  • 惡意依賴項:具有有害程式碼的 NPM 套件或其他依賴項
  • 被破壞的指令碼:具有安全漏洞的構建指令碼或工具
  • 社交工程:欺騙使用者執行危險命令的攻擊
  • 提示注入:欺騙 Claude 執行危險命令的攻擊

透明操作

當 Claude Code 嘗試存取沙箱外的網路資源時:
  1. 操作在作業系統級別被阻止
  2. 您會收到即時通知
  3. 您可以選擇:
    • 拒絕請求
    • 允許一次
    • 更新您的沙箱配置以永久允許它

安全限制

  • 網路沙箱隔離限制:網路過濾系統通過限制程序允許連接的域名來運行。它不會以其他方式檢查通過代理的流量,使用者負責確保他們只在其策略中允許受信任的域名。
使用者應該意識到允許廣泛域名(如 github.com)可能帶來的潛在風險,這可能允許資料洩露。此外,在某些情況下,可能可以通過 域名前置 繞過網路過濾。
  • 通過 Unix 套接字的權限提升:allowUnixSockets 配置可能會無意中授予對強大系統服務的存取權限,這可能導致沙箱繞過。例如,如果它用於允許存取 /var/run/docker.sock,這將有效地通過利用 docker 套接字授予對主機系統的存取權限。建議使用者仔細考慮他們通過沙箱允許的任何 unix 套接字。
  • 檔案系統權限提升:過度寬泛的檔案系統寫入權限可能導致權限提升攻擊。允許寫入包含 $PATH 中的可執行檔案、系統配置目錄或使用者 shell 配置檔案(.bashrc.zshrc)的目錄可能導致當其他使用者或系統程序存取這些檔案時在不同安全上下文中執行程式碼。
  • Linux 沙箱強度:Linux 實現提供強大的檔案系統和網路隔離,但包含一個 enableWeakerNestedSandbox 模式,使其能夠在 Docker 環境中工作,而無需特權命名空間。此選項大大削弱了安全性,應僅在其他隔離方式得到強制執行的情況下使用。

進階用法

自訂代理配置

對於需要進階網路安全的組織,您可以實施自訂代理以:
  • 解密和檢查 HTTPS 流量
  • 應用自訂過濾規則
  • 記錄所有網路請求
  • 與現有安全基礎設施整合
{
  "sandbox": {
    "network": {
      "httpProxyPort": 8080,
      "socksProxyPort": 8081
    }
  }
}

與現有安全工具的整合

沙箱化 bash 工具與以下工具配合使用:
  • IAM 策略:與 權限設定 結合以實現深度防禦
  • 開發容器:與 devcontainers 一起使用以獲得額外隔離
  • 企業策略:通過 受管設定 強制執行沙箱配置

最佳實踐

  1. 從限制性開始:從最少權限開始,根據需要擴展
  2. 監控日誌:查看沙箱違規嘗試以了解 Claude Code 的需求
  3. 使用環境特定配置:開發和生產環境的不同沙箱規則
  4. 與權限結合:將沙箱隔離與 IAM 策略一起使用以實現全面安全
  5. 測試配置:驗證您的沙箱設定不會阻止合法工作流程

開源

沙箱執行時可作為開源 npm 套件提供,供您在自己的代理專案中使用。這使更廣泛的 AI 代理社群能夠構建更安全、更安全的自主系統。這也可用於沙箱隔離您可能希望執行的其他程式。例如,要沙箱隔離 MCP 伺服器,您可以執行:
npx @anthropic-ai/sandbox-runtime <command-to-sandbox>
有關實現詳情和原始程式碼,請訪問 GitHub 儲存庫

限制

  • 效能開銷:最少,但某些檔案系統操作可能稍微較慢
  • 相容性:某些需要特定系統存取模式的工具可能需要配置調整,或甚至可能需要在沙箱外運行
  • 平台支援:目前支援 Linux 和 macOS;計劃支援 Windows

另請參閱

  • 安全性 - 全面的安全功能和最佳實踐
  • IAM - 權限配置和存取控制
  • 設定 - 完整配置參考
  • CLI 參考 - 命令列選項,包括 -sb