2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
3> Use this file to discover all available pages before exploring further.3> Use this file to discover all available pages before exploring further.
4 4
5# Sandboxing5# 設定沙箱化 Bash 工具
6 6
7> 了解 Claude Code 的沙箱化 bash 工具如何提供檔案系統和網路隔離,以實現更安全、更自主的代理執行。7> 了解 Claude Code 的沙箱化 Bash 工具如何提供檔案系統和網路隔離,以實現更安全、更自主的代理執行。
8 8
9## 概述9Bash 沙箱讓 Claude 執行大多數 shell 命令,而無需停下來請求權限。與其批准每個命令,您可以定義命令可以接觸哪些檔案和網路域,作業系統會為每個 Bash 命令及其子流程強制執行該邊界。
10 10
11Claude Code 具有原生沙箱化功能,為代理執行提供更安全的環境,同時減少對持續權限提示的需求。沙箱化不是要求每個 bash 命令的權限,而是預先建立定義的邊界,讓 Claude Code 能夠以降低風險的方式更自由地工作。11本頁涵蓋如何:
12 12
13沙箱化 bash 工具使用作業系統級別的原語來強制執行檔案系統和網路隔離。13* [啟用沙箱](#get-started)並選擇沙箱化命令的批准方式
14* [設定](#configure-sandboxing)命令可以到達的路徑和網路域
15* [將沙箱化與權限規則和權限模式結合](#how-sandboxing-relates-to-permissions-and-permission-modes)
16* [在整個組織中強制執行沙箱化](#configure-the-sandbox-for-your-organization),使用受管設定
14 17
15## 為什麼沙箱化很重要18<Note>
16 19 若要比較其他隔離方法,例如開發容器、自訂容器和虛擬機,請參閱 [Sandbox environments](/zh-TW/sandbox-environments)。若要減少 Bash 以外工具的權限提示,請參閱 [permission modes](/zh-TW/permission-modes)。
17傳統的基於權限的安全性需要對 bash 命令進行持續的使用者批准。雖然這提供了控制,但可能導致:20</Note>
18
19* **批准疲勞**:重複點擊「批准」可能導致使用者對他們批准的內容關注度降低
20* **生產力降低**:持續的中斷會減慢開發工作流程
21* **自主性受限**:當等待批准時,Claude Code 無法高效工作
22
23沙箱化通過以下方式解決這些挑戰:
24
251. **定義清晰的邊界**:精確指定 Claude Code 可以存取的目錄和網路主機
262. **減少權限提示**:沙箱內的安全命令不需要批准
273. **維持安全性**:嘗試存取沙箱外的資源會觸發立即通知
284. **啟用自主性**:Claude Code 可以在定義的限制內更獨立地運行
29 21
30<Warning>22<h2 id="get-started">
31 有效的沙箱化需要**同時**進行檔案系統和網路隔離。沒有網路隔離,受損的代理可能會洩露敏感檔案,如 SSH 金鑰。沒有檔案系統隔離,受損的代理可能會後門系統資源以獲得網路存取。配置沙箱化時,重要的是確保您配置的設定不會在這些系統中建立繞過。23 開始使用
32</Warning>24</h2>
33 25
34## 它如何運作26沙箱內建於 Claude Code 中,在 macOS、Linux 和 WSL2 上執行。不支援原生 Windows。在 Windows 上,在 WSL2 發行版內執行 Claude Code。
35 27
36### 檔案系統隔離28在 macOS 上,無需安裝任何內容:沙箱化使用內建的 Seatbelt 框架。在 Linux 和 WSL2 上,沙箱依賴於兩個套件,詳見 [Set up Linux and WSL2](#set-up-linux-and-wsl2)。即使您還沒有安裝它們,您也可以從 `/sandbox` 開始,因為其面板會顯示是否缺少任何內容。
37 29
38沙箱化 bash 工具將檔案系統存取限制在特定目錄:30<Steps>
31 <Step title="執行 /sandbox">
32 啟動 Claude Code 工作階段並執行 `/sandbox` 命令:
39 33
40* **預設寫入行為**:對目前工作目錄及其子目錄的讀取和寫入存取34 ```text theme={null}
41* **預設讀取行為**:對整個電腦的讀取存取,除了某些被拒絕的目錄35 /sandbox
42* **被阻止的存取**:無法在沒有明確權限的情況下修改目前工作目錄外的檔案36 ```
43* **可配置**:通過設定定義自訂允許和拒絕的路徑
44 37
45您可以使用設定中的 `sandbox.filesystem.allowWrite` 授予對其他路徑的寫入存取。這些限制在作業系統級別強制執行(macOS 上的 Seatbelt,Linux 上的 bubblewrap),因此它們適用於所有子流程命令,包括 `kubectl`、`terraform` 和 `npm` 等工具,而不僅僅是 Claude 的檔案工具。38 這會開啟沙箱面板,有三個標籤:
46 39
47### 網路隔離40 * **Mode**:選擇沙箱化命令的批准方式,詳見下一步
41 * **Overrides**:選擇在沙箱下失敗的命令是否可以回退到執行未沙箱化。這是 [`allowUnsandboxedCommands`](/zh-TW/settings#sandbox-settings) 設定
42 * **Config**:檢視已解析的沙箱設定
48 43
49網路存取通過在沙箱外運行的代理伺服器進行控制:44 如果面板只顯示 Dependencies 標籤,則缺少必需的套件。按照 [Set up Linux and WSL2](#set-up-linux-and-wsl2) 中的說明安裝它,重新啟動 Claude Code,然後再次執行 `/sandbox`。
45 </Step>
50 46
51* **域名限制**:只能存取已批准的域名47 <Step title="選擇一個模式">
52* **使用者確認**:新的域名請求會觸發權限提示(除非啟用了 [`allowManagedDomainsOnly`](/zh-TW/settings#sandbox-settings),它會自動阻止非允許的域名)48 在 Mode 標籤上,選擇自動允許或常規權限。自動允許在不提示的情況下執行沙箱化命令,常規權限即使命令沙箱化也保持常規權限提示。請參閱 [Sandbox modes](#sandbox-modes) 了解在自動允許模式中仍然提示的命令。
53* **自訂代理支援**:進階使用者可以在出站流量上實施自訂規則49 </Step>
54* **全面覆蓋**:限制適用於所有指令碼、程式和由命令產生的子流程
55 50
56### 作業系統級別的強制執行51 <Step title="執行 Bash 命令">
52 要求 Claude 執行命令,例如構建或測試套件。預設情況下,沙箱內的命令只能寫入工作目錄。命令首次需要新的網路域時,Claude Code 會提示批准。
57 53
58沙箱化 bash 工具利用作業系統安全原語:54 無法沙箱化執行的命令會回退到常規權限流程。若要擴大或縮小這些邊界,請參閱 [Configure sandboxing](#configure-sandboxing)。
55 </Step>
56</Steps>
59 57
60* **macOS**:使用 Seatbelt 進行沙箱強制執行58在面板中選擇模式會寫入您專案的本地設定,位於 `.claude/settings.local.json`,這適用於目前專案,不會簽入 git。若要在所有專案中啟用沙箱,請在 `~/.claude/settings.json` 的使用者設定中將 [`sandbox.enabled`](/zh-TW/settings#sandbox-settings) 設定為 `true`。若要為組織中的每個開發人員強制執行沙箱化,請使用 [managed settings](#enforce-sandboxing-with-managed-settings)。
61* **Linux**:使用 [bubblewrap](https://github.com/containers/bubblewrap) 進行隔離
62* **WSL2**:使用 bubblewrap,與 Linux 相同
63
64不支援 WSL1,因為 bubblewrap 需要僅在 WSL2 中可用的核心功能。
65 59
66這些作業系統級別的限制確保由 Claude Code 命令產生的所有子流程都繼承相同的安全邊界。60<Warning>
61 預設情況下,如果沙箱因缺少依賴項或不支援的平台而無法啟動,Claude Code 會顯示警告並在沒有沙箱化的情況下執行命令。若要改為將其設為硬失敗,請將 [`sandbox.failIfUnavailable`](/zh-TW/settings#sandbox-settings) 設定為 `true`。這適用於需要沙箱化作為安全閘道的受管部署。
62</Warning>
67 63
68## 入門64<h3 id="set-up-linux-and-wsl2">
65 設定 Linux 和 WSL2
66</h3>
69 67
70### 先決條件68在 Linux 和 WSL2 上,沙箱依賴於兩個套件:
71 69
72在 **macOS** 上,沙箱化使用內建的 Seatbelt 框架開箱即用。70* [`bubblewrap`](https://github.com/containers/bubblewrap):無特權沙箱化工具,強制執行檔案系統隔離
71* [`socat`](http://www.dest-unreach.org/socat/):用於通過沙箱代理路由網路流量的中繼
73 72
74在 **Linux 和 WSL2** 上,首先安裝所需的套件:73使用您發行版的套件管理器安裝它們:
75 74
76<Tabs>75<Tabs>
77 <Tab title="Ubuntu/Debian">76 <Tab title="Ubuntu/Debian">
87 </Tab>86 </Tab>
88</Tabs>87</Tabs>
89 88
90WSL1 不支援沙箱化,因為它缺少所需的 Linux 命名空間原語。如果您看到 `Sandboxing requires WSL2`,請將您的發行版升級到 WSL2 或在沒有沙箱化的情況下執行 Claude Code。89安裝後,`/sandbox` 中的 Dependencies 標籤會顯示 `ripgrep`、`bubblewrap`、`socat` 和 seccomp 過濾器是否在您的平台上可用。Ripgrep 與原生 Claude Code 二進位檔案一起打包。seccomp 過濾器是可選的,增加 Unix 域套接字阻止。如果缺少,請使用 `npm install -g @anthropic-ai/sandbox-runtime` 安裝它。
91 90
92在 WSL2 上,沙箱化命令無法啟動 Windows 二進位檔案,例如 `cmd.exe`、`powershell.exe` 或 `/mnt/c/` 下的任何內容。WSL 通過 Unix socket 將這些交給 Windows 主機,沙箱會阻止此操作。如果命令需要呼叫 Windows 二進位檔案,請將其新增到 [`excludedCommands`](/zh-TW/settings#sandbox-settings),以便它在沙箱外執行。91當缺少必需的依賴項時,Dependencies 標籤是唯一顯示的標籤,直到您安裝它。依賴項檢查在啟動時執行,因此在安裝套件後重新啟動 Claude Code,以便 `/sandbox` 檢測到它們。
93 92
94### 啟用沙箱化93<AccordionGroup>
94 <Accordion title="Ubuntu 24.04 及更新版本:允許 bubblewrap 建立使用者命名空間">
95 在 Ubuntu 24.04 及更新版本上,預設 AppArmor 策略防止 bubblewrap 建立隔離所需的使用者命名空間。
95 96
96您可以通過執行 `/sandbox` 命令來啟用沙箱化:97 若要檢查您的環境(包括 WSL2 內)是否強制執行此限制,請執行 `sysctl kernel.apparmor_restrict_unprivileged_userns`。如果金鑰不存在或傳回 `0`,請跳過此步驟。如果傳回 `1`,請新增授予 `bwrap` 此功能的 AppArmor 設定檔:
97 98
98```text theme={null}99 ```bash theme={null}
99/sandbox100 sudo tee /etc/apparmor.d/bwrap > /dev/null <<'EOF'
100```101 abi <abi/4.0>,
102 include <tunables/global>
103
104 profile bwrap /usr/bin/bwrap flags=(unconfined) {
105 userns,
106 include if exists <local/bwrap>
107 }
108 EOF
109 ```
101 110
102這會開啟一個選單,您可以在其中選擇沙箱模式。如果缺少所需的依賴項(例如 Linux 上的 `bubblewrap` 或 `socat`),選單會顯示您平台的安裝說明。111 該設定檔僅適用於 `bwrap` 本身,不適用於在沙箱內執行的命令。重新載入 AppArmor 以應用它:
103 112
104預設情況下,如果沙箱無法啟動(缺少依賴項或不支援的平台),Claude Code 會顯示警告並在沒有沙箱化的情況下運行命令。要改為將其設為硬失敗,請將 [`sandbox.failIfUnavailable`](/zh-TW/settings#sandbox-settings) 設定為 `true`。這適用於需要沙箱化作為安全閘道的受管部署。113 ```bash theme={null}
114 sudo systemctl reload apparmor
115 ```
116 </Accordion>
117
118 <Accordion title="WSL2 注意事項">
119 使用 PowerShell 中的 `wsl -l -v` 檢查您的 WSL 版本。如果您看到 `Sandboxing requires WSL2`,您的發行版執行的是 WSL1。將其升級到 WSL2 或在沒有沙箱化的情況下執行 Claude Code。
105 120
106### 沙箱模式121 在 WSL2 上,沙箱化命令無法啟動 Windows 二進位檔案,例如 `cmd.exe`、`powershell.exe` 或 `/mnt/c/` 下的任何內容。WSL 通過 Unix 套接字將這些交給 Windows 主機,沙箱會阻止此操作。如果命令需要呼叫 Windows 二進位檔案,請將其新增到 [`excludedCommands`](/zh-TW/settings#sandbox-settings),以便它在沙箱外執行。
122 </Accordion>
123</AccordionGroup>
124
125<h3 id="sandbox-modes">
126 沙箱模式
127</h3>
107 128
108Claude Code 提供兩種沙箱模式:129Claude Code 提供兩種沙箱模式:
109 130
110**自動允許模式**:Bash 命令將嘗試在沙箱內運行,並自動允許而無需權限。無法沙箱化的命令(例如需要存取非允許主機的網路存取的命令)會回退到常規權限流程。明確拒絕規則始終被尊重,而且針對 `/`、您的主目錄或其他關鍵系統路徑的 `rm` 或 `rmdir` 命令仍然會觸發權限提示。詢問規則僅適用於回退到常規權限流程的命令。131**自動允許模式**:Bash 命令將嘗試在沙箱內執行,並自動允許而無需權限。無法沙箱化的命令(例如需要存取非允許主機的網路存取的命令)會回退到常規權限流程,其中 Claude Code 檢查您的 [permission rules](/zh-TW/permissions) 並提示您進行這些規則不允許的任何命令。
132
133即使在自動允許模式中,以下仍然適用:
111 134
112**常規權限模式**:所有 bash 命令都通過標準權限流程進行,即使沙箱化也是如此。這提供了更多控制,但需要更多批准。135* 明確的 [deny rules](/zh-TW/permissions) 始終被尊重
136* 針對 `/`、您的主目錄或其他關鍵系統路徑的 `rm` 或 `rmdir` 命令仍然會觸發權限提示
137* [Ask rules](/zh-TW/permissions) 適用於回退到常規權限流程的命令
138
139**常規權限模式**:所有 Bash 命令都通過常規權限流程進行,即使沙箱化也是如此。這提供了更多控制,但需要更多批准。
113 140
114在兩種模式中,沙箱強制執行相同的檔案系統和網路限制。區別僅在於沙箱化命令是自動批准還是需要明確權限。141在兩種模式中,沙箱強制執行相同的檔案系統和網路限制。區別僅在於沙箱化命令是自動批准還是需要明確權限。
115 142
143某些命令根本無法在沙箱內執行,例如與其不相容的工具或需要您未允許的主機的工具。與其讓任務失敗或要求您關閉沙箱化,Claude Code 包含一個逃生艙:當命令因沙箱限制而失敗時,Claude 分析失敗,可能使用 `dangerouslyDisableSandbox` 參數重試命令。重試的命令在沙箱外執行,因此它通過常規權限流程進行,需要您的批准。
144
145您可以通過在 [sandbox settings](/zh-TW/settings#sandbox-settings) 中設定 `"allowUnsandboxedCommands": false` 來禁用此逃生艙。禁用時,`/sandbox` Overrides 標籤顯示為 **Strict sandbox mode**,`dangerouslyDisableSandbox` 參數被完全忽略,所有命令必須沙箱化執行或在 `excludedCommands` 中明確列出。
146
116<Info>147<Info>
117 自動允許模式獨立於您的權限模式設定工作。即使您不在「接受編輯」模式中,當啟用自動允許時,沙箱化 bash 命令也會自動運行。這意味著在沙箱邊界內修改檔案的 bash 命令將執行而不提示,即使檔案編輯工具通常需要批准。148 自動允許模式獨立於您的權限模式設定工作。即使您不在「接受編輯」模式中,當啟用自動允許時,沙箱化 Bash 命令也會自動執行。這意味著在沙箱邊界內修改檔案的 Bash 命令將執行而不提示,即使檔案編輯工具通常需要批准。
118</Info>149</Info>
119 150
120### 配置沙箱化151<h2 id="configure-sandboxing">
152 設定沙箱化
153</h2>
121 154
122通過您的 `settings.json` 檔案自訂沙箱行為。有關完整配置參考,請參閱 [Settings](/zh-TW/settings#sandbox-settings)。155通過您的 `settings.json` 檔案自訂沙箱行為。請參閱 [Settings](/zh-TW/settings#sandbox-settings) 以了解完整的配置參考。
123
124#### 授予子流程對特定路徑的寫入存取
125 156
126預設情況下,沙箱化命令只能寫入目前工作目錄。如果子流程命令(如 `kubectl`、`terraform` 或 `npm`)需要寫入專案目錄外,請使用 `sandbox.filesystem.allowWrite` 授予對特定路徑的存取:157預設情況下,沙箱化命令只能寫入目前工作目錄。如果子流程命令(如 `kubectl`、`terraform` 或 `npm`)需要寫入專案目錄外,請使用 `sandbox.filesystem.allowWrite` 授予對特定路徑的存取:
127 158
136}167}
137```168```
138 169
139這些路徑在作業系統級別強制執行,因此在沙箱內運行的所有命令(包括其子流程)都尊重它們。當工具需要對特定位置的寫入存取時,這是推薦的方法,而不是使用 `excludedCommands` 將工具排除在沙箱外。170這些路徑在作業系統級別強制執行,因此在沙箱內執行的所有命令(包括其子流程)都尊重它們。當工具需要對特定位置的寫入存取時,這是推薦的方法,而不是使用 `excludedCommands` 將工具排除在沙箱外。
140 171
141當在多個 [settings scopes](/zh-TW/settings#settings-precedence) 中定義 `allowWrite`(或 `denyWrite`/`denyRead`/`allowRead`)時,陣列被**合併**,這意味著來自每個範圍的路徑被組合,而不是被替換。例如,如果受管設定允許寫入 `/opt/company-tools`,而使用者在其個人設定中新增 `~/.kube`,則兩個路徑都包含在最終沙箱配置中。這意味著使用者和專案可以擴展清單而無需複製或覆蓋由更高優先級範圍設定的路徑。172當在多個 [settings scopes](/zh-TW/settings#settings-precedence) 中定義相同的檔案系統陣列時,陣列被合併:來自每個範圍的路徑被組合,而不是被替換。
142 173
143路徑前綴控制路徑的解析方式:174路徑前綴控制路徑的解析方式:
144 175
148| `~/` | 相對於主目錄 | `~/.kube` 變成 `$HOME/.kube` |179| `~/` | 相對於主目錄 | `~/.kube` 變成 `$HOME/.kube` |
149| `./` 或無前綴 | 相對於專案設定的專案根目錄,或相對於 `~/.claude` 的使用者設定 | `.claude/settings.json` 中的 `./output` 解析為 `<project-root>/output` |180| `./` 或無前綴 | 相對於專案設定的專案根目錄,或相對於 `~/.claude` 的使用者設定 | `.claude/settings.json` 中的 `./output` 解析為 `<project-root>/output` |
150 181
151較舊的 `//path` 前綴用於絕對路徑仍然有效。如果您之前使用單斜線 `/path` 期望專案相對解析,請切換到 `./path`。此語法與 [Read and Edit](/zh-TW/permissions#read-and-edit) 權限規則不同,後者使用 `//path` 表示絕對路徑,`/path` 表示專案相對路徑。沙箱檔案系統路徑使用標準慣例:`/tmp/build` 是絕對路徑。182此語法與 [Read and Edit permission rules](/zh-TW/permissions#read-and-edit) 不同,後者使用 `//path` 表示絕對路徑,`/path` 表示專案相對路徑。沙箱檔案系統路徑使用標準慣例:`/tmp/build` 是絕對路徑。
152 183
153您也可以使用 `sandbox.filesystem.denyWrite` 和 `sandbox.filesystem.denyRead` 拒絕寫入或讀取存取。這些與來自 `Edit(...)` 和 `Read(...)` 權限規則的任何路徑合併。要重新允許讀取 `denyRead` 區域內的特定路徑,請使用 `sandbox.filesystem.allowRead`,它優先於 `denyRead`。當在受管設定中啟用 `allowManagedReadPathsOnly` 時,只有受管 `allowRead` 項目被尊重;使用者、專案和本地 `allowRead` 項目被忽略。`denyRead` 仍然從所有來源合併。184您也可以使用 `sandbox.filesystem.denyWrite` 和 `sandbox.filesystem.denyRead` 拒絕寫入或讀取存取,並使用 `sandbox.filesystem.allowRead` 重新允許讀取 `denyRead` 區域內的特定路徑。
154 185
155例如,要阻止從整個主目錄讀取,同時仍允許從目前專案讀取,請將此新增到您的專案的 `.claude/settings.json`:186下面的範例阻止從整個主目錄讀取,同時仍允許從目前專案讀取。將其放在您的專案的 `.claude/settings.json` 中,因為相對路徑 `.` 僅在配置位於專案設定中時才解析為專案根目錄:
156 187
157```json theme={null}188```json theme={null}
158{189{
168 199
169`allowRead` 中的 `.` 解析為專案根目錄,因為此配置位於專案設定中。如果您將相同的配置放在 `~/.claude/settings.json` 中,`.` 將解析為 `~/.claude`,專案檔案將保持被 `denyRead` 規則阻止。200`allowRead` 中的 `.` 解析為專案根目錄,因為此配置位於專案設定中。如果您將相同的配置放在 `~/.claude/settings.json` 中,`.` 將解析為 `~/.claude`,專案檔案將保持被 `denyRead` 規則阻止。
170 201
171<Tip>202<h2 id="how-sandboxing-works">
172 並非所有命令都與沙箱化開箱即用相容。一些可能幫助您充分利用沙箱的注意事項:203 沙箱化如何運作
204</h2>
173 205
174 * 許多 CLI 工具需要存取某些主機。當您使用這些工具時,它們將請求權限以存取某些主機。授予權限將允許它們現在和將來存取這些主機,使它們能夠在沙箱內安全執行。206<h3 id="filesystem-isolation">
175 * `watchman` 與在沙箱中運行不相容。如果您正在執行 `jest`,請考慮使用 `jest --no-watchman`207 檔案系統隔離
176 * `docker` 與在沙箱中運行不相容。考慮在 `excludedCommands` 中指定 `docker *` 以強制其在沙箱外運行。208</h3>
177</Tip>
178 209
179<Note>210沙箱化 Bash 工具將檔案系統存取限制在特定目錄:
180 Claude Code 包含一個有意的逃生艙機制,允許命令在必要時在沙箱外運行。當命令因沙箱限制而失敗時(例如網路連接問題或不相容的工具),Claude 會被提示分析失敗,並可能使用 `dangerouslyDisableSandbox` 參數重試命令。使用此參數的命令通過需要使用者權限執行的常規 Claude Code 權限流程進行。這允許 Claude Code 處理某些工具或網路操作無法在沙箱約束內運作的邊界情況。211
212* **預設寫入行為**:對目前工作目錄及其子目錄的讀取和寫入存取
213* **預設讀取行為**:對整個電腦的讀取存取,除了某些被拒絕的目錄。請注意,此預設仍允許讀取認證檔案,例如 `~/.aws/credentials` 和 `~/.ssh/`。將它們新增到 `denyRead` 以阻止它們。
214* **被阻止的存取**:無法在沒有明確權限的情況下修改目前工作目錄外的檔案,包括 shell 配置檔案(例如 `~/.bashrc`)和 `/bin/` 中的系統二進位檔案
215* **Git worktrees**:當工作目錄是[連結的 git worktree](/zh-TW/worktrees) 時,沙箱也允許寫入主儲存庫的共享 `.git` 目錄,以便 `git commit` 等命令可以更新 refs 和索引。對該目錄內的 `hooks/` 和 `config` 的寫入仍然被拒絕。
216* **可配置**:通過設定定義自訂允許和拒絕的路徑
217
218您可以使用設定中的 `sandbox.filesystem.allowWrite` 授予對其他路徑的寫入存取。這些限制在作業系統級別強制執行,因此它們適用於所有子流程命令,包括 `kubectl`、`terraform` 和 `npm` 等工具,而不僅僅是 Claude 的檔案工具。
181 219
182 您可以通過在 [sandbox settings](/zh-TW/settings#sandbox-settings) 中設定 `"allowUnsandboxedCommands": false` 來禁用此逃生艙。禁用時,`dangerouslyDisableSandbox` 參數被完全忽略,所有命令必須沙箱化運行或在 `excludedCommands` 中明確列出。220<h3 id="network-isolation">
221 網路隔離
222</h3>
223
224網路存取通過在沙箱外執行的代理伺服器進行控制:
225
226* **域名限制**:沒有預先允許的域名。命令首次需要新的域名時,Claude Code 會提示批准。使用 [`allowedDomains`](/zh-TW/settings#sandbox-settings) 預先允許域名以避免提示。
227* **受管鎖定**:如果在受管設定中設定了 [`allowManagedDomainsOnly`](/zh-TW/settings#sandbox-settings),非允許的域名會自動被阻止而不是提示,只有來自受管設定的 `allowedDomains` 被尊重。
228* **自訂代理支援**:進階使用者可以在出站流量上實施自訂規則
229* **全面覆蓋**:限制適用於所有指令碼、程式和由命令產生的子流程
230
231<Note>
232 內建代理根據請求的主機名強制執行允許清單,不終止或檢查 TLS 流量。請參閱 [Security limitations](#security-limitations) 了解此設計的含義,以及 [Custom proxy configuration](#custom-proxy-configuration) 如果您的威脅模型需要 TLS 檢查。
183</Note>233</Note>
184 234
185## 安全優勢235<h3 id="os-level-enforcement">
236 作業系統級別的強制執行
237</h3>
186 238
187### 防止提示注入239沙箱化 Bash 工具利用作業系統安全原語:
188 240
189即使攻擊者通過提示注入成功操縱 Claude Code 的行為,沙箱也確保您的系統保持安全:241* **macOS**:使用 Seatbelt 進行沙箱強制執行
242* **Linux**:使用 [bubblewrap](https://github.com/containers/bubblewrap) 進行隔離
243* **WSL2**:使用 bubblewrap,與 Linux 相同
190 244
191**檔案系統保護:**245不支援 WSL1,因為 bubblewrap 需要僅在 WSL2 中可用的核心功能。這些作業系統級別的限制確保由 Claude Code 命令產生的所有子流程都繼承相同的安全邊界。
192 246
193* 無法修改關鍵配置檔案,如 `~/.bashrc`247這些相同的原語可作為獨立的 [`@anthropic-ai/sandbox-runtime`](https://github.com/anthropic-experimental/sandbox-runtime) 套件使用,[Sandbox environments](/zh-TW/sandbox-environments#sandbox-runtime) 頁面涵蓋作為包裝整個 Claude Code 流程的單獨方法。
194* 無法修改 `/bin/` 中的系統級檔案
195* 無法讀取在您的 [Claude 權限設定](/zh-TW/permissions#manage-permissions) 中被拒絕的檔案
196 248
197**網路保護:**249<h2 id="how-sandboxing-relates-to-permissions-and-permission-modes">
250 沙箱化與權限和權限模式的關係
251</h2>
198 252
199* 無法將資料洩露到攻擊者控制的伺服器253沙箱化、[permission rules](/zh-TW/permissions) 和 [permission modes](/zh-TW/permission-modes) 是互補的層。下面的部分涵蓋沙箱如何與每個互動。
200* 無法從未授權的域名下載惡意指令碼
201* 無法對未批准的服務進行意外的 API 呼叫
202* 無法聯繫任何未明確允許的域名
203 254
204**監控和控制:**255<h3 id="permission-rules">
256 權限規則
257</h3>
205 258
206* 所有在沙箱外的存取嘗試都在作業系統級別被阻止259權限規則和沙箱化控制不同的事物:
207* 當邊界被測試時,您會收到立即通知
208* 您可以選擇拒絕、允許一次或永久更新您的配置
209 260
210### 減少攻擊面261* **權限規則**控制 Claude Code 可以使用哪些工具,並在任何工具執行之前進行評估。它們適用於所有工具:Bash、Read、Edit、WebFetch、MCP 和其他工具。
262* **沙箱化**提供作業系統級別的強制執行,限制 Bash 命令在檔案系統和網路級別可以存取的內容。它僅適用於 Bash 命令及其子流程。
211 263
212沙箱化限制了以下可能造成的損害:264這兩層在強制執行方式上也有所不同。Claude Code 在命令執行之前根據命令字串評估權限決定,在自動模式中,還根據單獨分類器對命令是否安全的判斷。作業系統在執行流程上強制執行沙箱邊界,因此無論模型選擇執行什麼,它都成立,即使允許的命令執行的操作超出其名稱所示。
213 265
214* **惡意依賴項**:具有有害程式碼的 NPM 套件或其他依賴項266檔案系統和網路限制通過沙箱設定和權限規則進行配置:
215* **受損指令碼**:具有安全漏洞的構建指令碼或工具
216* **社交工程**:欺騙使用者執行危險命令的攻擊
217* **提示注入**:欺騙 Claude 執行危險命令的攻擊
218 267
219### 透明操作268| 設定或規則 | 它的作用 |
269| :------------------------------------------------------------- | :------------------------------------------------ |
270| `sandbox.filesystem.allowWrite` | 授予子流程對工作目錄外路徑的寫入存取 |
271| `sandbox.filesystem.denyWrite` 和 `sandbox.filesystem.denyRead` | 阻止子流程對特定路徑的存取 |
272| `sandbox.filesystem.allowRead` | 重新允許讀取 `denyRead` 區域內的特定路徑 |
273| `Edit` 允許規則 | 授予對特定路徑的寫入存取,與 `sandbox.filesystem.allowWrite` 相同 |
274| `Read` 和 `Edit` 拒絕規則 | 阻止對特定檔案或目錄的存取 |
275| `WebFetch` 允許和拒絕規則 | 控制域名存取 |
276| 沙箱 `allowedDomains` | 控制 Bash 命令可以到達的域名 |
277| 沙箱 `deniedDomains` | 阻止特定域名,即使更廣泛的 `allowedDomains` 萬用字元會允許它們 |
220 278
221當 Claude Code 嘗試存取沙箱外的網路資源時:279來自 `sandbox.filesystem` 設定和權限規則的路徑被合併到最終沙箱配置中。
222 280
2231. 操作在作業系統級別被阻止281[claude-code repository 的 examples 目錄](https://github.com/anthropics/claude-code/tree/main/examples/settings)包含常見部署場景的入門設定配置,包括沙箱特定的範例。使用這些作為起點,並根據您的需求進行調整。
2242. 您會收到立即通知
2253. 您可以選擇:
226 * 拒絕請求
227 * 允許一次
228 * 更新您的沙箱配置以永久允許它
229 282
230## 安全限制283<h3 id="permission-modes">
284 權限模式
285</h3>
231 286
232* 網路沙箱化限制:網路過濾系統通過限制流程允許連接的域名來運作。它不會以其他方式檢查通過代理的流量,使用者負責確保他們在其策略中只允許受信任的域名。287`/sandbox` 不是 [permission mode](/zh-TW/permission-modes)。權限模式決定工具呼叫是否執行以及您是否首先被提示,而沙箱限制 Bash 命令執行後可以存取的內容。它們在控制的內容和替換每個操作提示的內容上有所不同:
233 288
234<Warning>289| | 它控制什麼 | 替換提示的內容 |
235 使用者應該意識到允許廣泛域名(如 `github.com`)可能帶來的潛在風險,這可能允許資料洩露。此外,在某些情況下,可能可以通過 [domain fronting](https://en.wikipedia.org/wiki/Domain_fronting) 繞過網路過濾。290| :-------------------------------------------------------------------- | :---------------- | :------------------------------------------------------------------------------------- |
236</Warning>291| `/sandbox` | Bash 命令執行後可以存取的內容 | 沙箱邊界本身,在 [auto-allow mode](#sandbox-modes) 中 |
292| [Auto mode](/zh-TW/permission-modes#eliminate-prompts-with-auto-mode) | 每個工具呼叫是否執行 | 檢查操作的分類器 |
293| `--dangerously-skip-permissions` | 每個工具呼叫是否執行 | 無。[Protected path](/zh-TW/permission-modes#protected-paths) 檢查也被跳過;只有移除 `/` 或您的主目錄仍然提示 |
237 294
238* Unix 套接字特權提升:`allowUnixSockets` 配置可能會無意中授予對強大系統服務的存取,這可能導致沙箱繞過。例如,如果它用於允許存取 `/var/run/docker.sock`,這將有效地通過利用 docker 套接字授予對主機系統的存取。鼓勵使用者仔細考慮他們通過沙箱允許的任何 unix 套接字。295沙箱的 [auto-allow mode](#sandbox-modes) 與 [auto mode](/zh-TW/permission-modes#eliminate-prompts-with-auto-mode) 分開:自動允許批准 Bash 命令,因為沙箱邊界包含它們,而自動模式使用分類器檢查操作。這兩個獨立工作,可以結合。若要為無人值守執行選擇隔離邊界,請參閱 [Sandbox environments](/zh-TW/sandbox-environments#how-isolation-relates-to-permission-modes)。
239* 檔案系統權限提升:過於寬泛的檔案系統寫入權限可能導致特權提升攻擊。允許寫入包含 `$PATH` 中可執行檔案的目錄、系統配置目錄或使用者 shell 配置檔案(`.bashrc`、`.zshrc`)可能導致當其他使用者或系統流程存取這些檔案時在不同安全上下文中執行程式碼。
240* Linux 沙箱強度:Linux 實現提供強大的檔案系統和網路隔離,但包含一個 `enableWeakerNestedSandbox` 模式,使其能夠在 Docker 環境中工作而無需特權命名空間。此選項大大削弱了安全性,應僅在其他隔離被強制執行的情況下使用。
241 296
242## 沙箱化與權限的關係297<h2 id="configure-the-sandbox-for-your-organization">
298 為您的組織設定沙箱
299</h2>
243 300
244沙箱化和 [permissions](/zh-TW/permissions) 是協同工作的互補安全層:301管理員可以為每個使用者要求沙箱化,防止開發人員擴大策略,並通過公司代理路由沙箱流量。
245 302
246* **權限**控制 Claude Code 可以使用哪些工具,並在任何工具運行之前進行評估。它們適用於所有工具:Bash、Read、Edit、WebFetch、MCP 和其他工具。303<h3 id="enforce-sandboxing-with-managed-settings">
247* **沙箱化**提供作業系統級別的強制執行,限制 Bash 命令在檔案系統和網路級別可以存取的內容。它僅適用於 Bash 命令及其子流程。304 使用受管設定強制執行沙箱化
305</h3>
248 306
249檔案系統和網路限制通過沙箱設定和權限規則進行配置:307若要為每個開發人員要求沙箱,通過 [managed settings](/zh-TW/settings#settings-files) 傳遞 `sandbox` 金鑰,可以是由您的 MDM 管理的檔案,也可以是通過 Claude.ai 上的 [server-managed settings](/zh-TW/server-managed-settings)。
250 308
251* 使用 `sandbox.filesystem.allowWrite` 授予子流程對工作目錄外路徑的寫入存取309以下受管設定配置啟用沙箱,如果沙箱無法初始化則拒絕啟動 Claude Code,並防止模型在沙箱外重試命令:
252* 使用 `sandbox.filesystem.denyWrite` 和 `sandbox.filesystem.denyRead` 阻止子流程對特定路徑的存取
253* 使用 `sandbox.filesystem.allowRead` 重新允許讀取 `denyRead` 區域內的特定路徑
254* 使用 `Read` 和 `Edit` 拒絕規則阻止對特定檔案或目錄的存取
255* 使用 `WebFetch` 允許/拒絕規則控制域名存取
256* 使用沙箱 `allowedDomains` 控制 Bash 命令可以到達的域名
257* 使用沙箱 `deniedDomains` 阻止特定域名,即使更廣泛的 `allowedDomains` 萬用字元會允許它們
258 310
259來自 `sandbox.filesystem` 設定和權限規則的路徑被合併到最終沙箱配置中。311```json theme={null}
312{
313 "sandbox": {
314 "enabled": true,
315 "failIfUnavailable": true,
316 "allowUnsandboxedCommands": false
317 }
318}
319```
320
321超過 `enabled` 的兩個金鑰控制沙箱無法執行命令時會發生什麼:
322
323* **`failIfUnavailable`**:缺少的依賴項(例如 Linux 上的 bubblewrap)會阻止 Claude Code 啟動,而不是顯示警告並回退到未沙箱化執行
324* **`allowUnsandboxedCommands: false`**:`dangerouslyDisableSandbox` 逃生艙被忽略,因此在沙箱下失敗的命令無法在其外重試
325
326值得考慮與它們一起的兩個補充。為任何必須在沒有隔離的情況下執行的組織批准的工具新增 `excludedCommands`。為認證目錄(例如 `~/.aws` 和 `~/.ssh`)新增 [`denyRead`](#filesystem-isolation) 項目,預設讀取策略仍允許這些。
327
328沙箱不在原生 Windows 上執行,因此如果您的機隊包括 Windows 主機,請將此配置限制在 macOS 和 Linux,或讓這些使用者在 WSL2 或容器內執行 Claude Code。
260 329
261此 [repository](https://github.com/anthropics/claude-code/tree/main/examples/settings) 包含常見部署場景的入門設定配置,包括沙箱特定的範例。使用這些作為起點,並根據您的需求進行調整。330<h3 id="keep-developers-from-widening-the-policy">
331 防止開發人員擴大策略
332</h3>
262 333
263## 進階用法334對於布林金鑰(例如 `enabled` 和 `failIfUnavailable`),Claude Code 使用受管值並忽略開發人員在本地設定的任何內容。對於陣列金鑰(例如 `excludedCommands` 和 `allowRead`),Claude Code 合併來自每個範圍的項目,因此開發人員可以附加擴大策略的項目。
264 335
265### 自訂代理配置336在受管設定中將 `allowManagedReadPathsOnly` 設定為 `true`,以便只有來自受管設定的 `allowRead` 項目被尊重。使用者、專案和本地 `allowRead` 項目被忽略。這防止開發人員擴大讀取存取超過組織批准的路徑。若要以相同方式將網路域鎖定到受管值,請設定 [`allowManagedDomainsOnly`](/zh-TW/settings#sandbox-settings)。
337
338`excludedCommands` 沒有等效的受管專用鎖定,因此開發人員總是可以附加在沙箱外執行其他命令的項目。保持受管清單狹窄。
339
340<h3 id="custom-proxy-configuration">
341 自訂代理配置
342</h3>
266 343
267對於需要進階網路安全的組織,您可以實施自訂代理以:344對於需要進階網路安全的組織,您可以實施自訂代理以:
268 345
271* 記錄所有網路請求348* 記錄所有網路請求
272* 與現有安全基礎設施整合349* 與現有安全基礎設施整合
273 350
351若要將 Claude Code 指向您的代理,請在 [sandbox settings](/zh-TW/settings#sandbox-settings) 中設定代理連接埠:
352
274```json theme={null}353```json theme={null}
275{354{
276 "sandbox": {355 "sandbox": {
282}361}
283```362```
284 363
285### 與現有安全工具的整合364<h2 id="troubleshooting">
365 故障排除
366</h2>
286 367
287沙箱化 bash 工具與以下工具配合使用:368某些命令在沙箱內失敗,即使它們在沙箱外工作。下面的修復涵蓋最常見的情況。
288 369
289* **權限規則**:與 [permission settings](/zh-TW/permissions) 結合以實現深度防禦370* **命令因主機不允許錯誤而失敗**:許多 CLI 工具需要到達特定主機。在提示時授予權限會將主機新增到您的允許清單,以便工具在將來在沙箱內執行。
290* **開發容器**:與 [dev containers](/zh-TW/devcontainer) 一起使用以獲得額外隔離371* **`jest` 掛起或失敗**:`watchman` 與沙箱不相容。改為執行 `jest --no-watchman`。
291* **企業策略**:通過 [managed settings](/zh-TW/settings#settings-precedence) 強制執行沙箱配置372* **Go 型 CLI 在 macOS 上 TLS 驗證失敗**:`gh`、`gcloud` 和 `terraform` 等工具在 Seatbelt 下可能無法進行 TLS 驗證。在 `excludedCommands` 中列出這些工具以在沙箱外執行它們。如果您使用 `httpProxyPort` 與 MITM 代理和自訂 CA,請改為將 [`enableWeakerNetworkIsolation`](/zh-TW/settings#sandbox-settings) 設定為 `true`。
373* **`docker` 命令失敗**:`docker` 與沙箱不相容。將 `docker *` 新增到 `excludedCommands` 以在沙箱外執行它。
374* **Bubblewrap 在容器內啟動失敗**:在無特權容器中,bubblewrap 無法掛載新的 `/proc` 檔案系統。將 [`enableWeakerNestedSandbox`](/zh-TW/settings#sandbox-settings) 設定為 `true`,以便內部沙箱綁定掛載容器的現有 `/proc`。僅在外部容器已提供您需要的隔離邊界時使用此設定,因為它向沙箱化命令公開流程資訊,新的 `/proc` 掛載會隱藏。
375* **Linux 上的 Seccomp 過濾器**:seccomp 過濾器是阻止 Unix 域套接字所必需的。`/sandbox` 中的 Dependencies 標籤顯示它是否可用。如果缺少,請執行 `npm install -g @anthropic-ai/sandbox-runtime` 安裝幫助程式。
376* **`--dangerously-skip-permissions` 以 root 身份失敗**:在 Linux 和 macOS 上以 root 身份或通過 sudo 執行時,此旗標被阻止,因為 root 存取加上沒有權限提示可以修改系統上的任何檔案或服務。檢查在識別的沙箱內自動跳過。若要在容器中自主執行,請使用 [dev container](/zh-TW/devcontainer) 配置,它以非 root 使用者身份執行 Claude Code。
292 377
293## 最佳實踐378<h2 id="limitations">
379 限制
380</h2>
294 381
2951. **從限制性開始**:從最小權限開始,根據需要擴展382沙箱化減少風險,但不是完整的隔離邊界。在依賴它作為硬安全控制之前,請檢查下面的限制。
2962. **監控日誌**:檢查沙箱違規嘗試以了解 Claude Code 的需求
2973. **使用環境特定配置**:開發與生產環境的不同沙箱規則
2984. **與權限結合**:將沙箱化與 IAM 策略一起使用以實現全面安全
2995. **測試配置**:驗證您的沙箱設定不會阻止合法工作流程
300 383
301## 開源384<h3 id="security-limitations">
385 安全限制
386</h3>
302 387
303沙箱執行時可作為開源 npm 套件供您在自己的代理專案中使用。這使更廣泛的 AI 代理社群能夠構建更安全、更安全的自主系統。這也可以用於沙箱化您可能希望運行的其他程式。例如,要沙箱化 MCP 伺服器,您可以執行:388* **網路過濾**:網路過濾系統通過限制流程允許連接的域名來運作。內建代理不終止或對出站流量執行 TLS 檢查,因此加密連接的內容不被檢查。您負責確保只有受信任的域名在您的策略中被允許。
304 389
305```bash theme={null}390<Warning>
306npx @anthropic-ai/sandbox-runtime <command-to-sandbox>391 允許廣泛域名(例如 `github.com`)可能會為資料洩露建立路徑。因為代理根據用戶端提供的主機名進行允許決定而不檢查 TLS,在沙箱內執行的程式碼可能可以使用 [domain fronting](https://en.wikipedia.org/wiki/Domain_fronting) 或類似技術到達允許清單外的主機。如果您的威脅模型需要更強的保證,請配置 [custom proxy](#custom-proxy-configuration),它終止 TLS 並檢查流量,並在沙箱內安裝其 CA 憑證。更強的 TLS 感知網路隔離是一個活躍的開發領域。
307```392</Warning>
308 393
309有關實現詳情和原始程式碼,請訪問 [GitHub repository](https://github.com/anthropic-experimental/sandbox-runtime)。394* **通過 Unix 套接字的特權提升**:`allowUnixSockets` 配置可能會無意中授予對強大系統服務的存取,這可能導致沙箱繞過。例如,允許存取 `/var/run/docker.sock` 有效地通過 Docker 套接字授予對主機系統的存取。仔細考慮您通過沙箱允許的任何 Unix 套接字。
395* **檔案系統權限提升**:過於寬泛的檔案系統寫入權限可能導致特權提升攻擊。允許寫入包含 `$PATH` 中可執行檔案的目錄、系統配置目錄或使用者 shell 配置檔案(例如 `.bashrc` 或 `.zshrc`)可能導致當其他使用者或系統流程存取這些檔案時在不同安全上下文中執行程式碼。
396* **Linux 沙箱強度**:Linux 實現提供強大的檔案系統和網路隔離,但包含一個 `enableWeakerNestedSandbox` 模式,使其能夠在 Docker 環境中工作而無需特權命名空間,或在 Linux 主機上禁用無特權使用者命名空間的情況下。此選項大大削弱了安全性,應僅在其他隔離被強制執行時使用。
397* **設定檔案受保護**:沙箱自動拒絕對 Claude Code 的 `settings.json` 檔案在每個範圍和受管設定目錄的寫入存取,因此沙箱化命令無法修改其自己的策略。
310 398
311## 限制399<h3 id="platform-and-tool-compatibility">
400 平台和工具相容性
401</h3>
312 402
313* **效能開銷**:最小,但某些檔案系統操作可能稍慢403* **平台支援**:支援 macOS、Linux 和 WSL2。不支援 WSL1 和原生 Windows。
314* **相容性**:某些需要特定系統存取模式的工具可能需要配置調整,或甚至可能需要在沙箱外運行404* **效能開銷**:最小,但某些檔案系統操作可能稍慢。
315* **平台支援**:支援 macOS、Linux 和 WSL2。不支援 WSL1。計劃提供原生 Windows 支援。405* **工具相容性**:某些需要特定系統存取模式的工具可能需要配置調整,或可能需要在沙箱外執行。
316 406
317## 沙箱化不涵蓋的內容407<h3 id="scope">
408 範圍
409</h3>
318 410
319沙箱隔離 Bash 子流程。其他工具在不同的邊界下運作:411沙箱隔離 Bash 子流程。其他工具在不同的邊界下運作:
320 412
321* **內建檔案工具**:Read、Edit 和 Write 直接使用權限系統,而不是通過沙箱運行。請參閱 [permissions](/zh-TW/permissions)。413* **內建檔案工具**:Read、Edit 和 Write 直接使用權限系統,而不是通過沙箱執行。請參閱 [permissions](/zh-TW/permissions)。
322* **電腦使用**:當 Claude 打開應用程式並控制您的螢幕時,它在您的實際桌面上運行,而不是在隔離環境中。每個應用程式的權限提示控制每個應用程式。請參閱 [CLI 中的電腦使用](/zh-TW/computer-use) 或 [Desktop 中的電腦使用](/zh-TW/desktop#let-claude-use-your-computer)。414* **電腦使用**:當 Claude 打開應用程式並控制您的螢幕時,它在您的實際桌面上執行,而不是在隔離環境中。每個應用程式的權限提示控制每個應用程式。請參閱 [CLI 中的電腦使用](/zh-TW/computer-use) 或 [Desktop 中的電腦使用](/zh-TW/desktop#let-claude-use-your-computer)。
415* **環境變數**:沙箱化 Bash 命令預設繼承父流程環境,包括在那裡設定的任何認證。若要從子流程中去除 Anthropic 和雲端提供商認證,請設定 [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/zh-TW/env-vars)。
416* **子代理**:[subagents](/zh-TW/sub-agents) 在與父工作階段相同的流程中執行,並使用相同的沙箱配置。當在父工作階段中啟用沙箱化時,子代理內的 Bash 命令被沙箱化。
417
418<Warning>
419 有效的沙箱化需要**同時**進行檔案系統和網路隔離。沒有網路隔離,受損的代理可能會洩露敏感檔案,如 SSH 金鑰。沒有檔案系統隔離,受損的代理可能會後門系統資源以獲得網路存取。當您擴大預設值時,檢查 `allowWrite` 路徑、廣泛的 `allowedDomains` 項目或 `excludedCommands` 例外是否不會撤銷另一側的限制。
420</Warning>
323 421
324## 另請參閱422<h2 id="see-also">
423 另請參閱
424</h2>
325 425
326* [Security](/zh-TW/security) - 全面的安全功能和最佳實踐426* [Sandbox environments](/zh-TW/sandbox-environments):比較內建沙箱與開發容器、容器和虛擬機
327* [Permissions](/zh-TW/permissions) - 權限配置和存取控制427* [Security](/zh-TW/security):全面的安全功能和最佳實踐
328* [Settings](/zh-TW/settings) - 完整配置參考428* [Permissions](/zh-TW/permissions):權限配置和存取控制
329* [CLI reference](/zh-TW/cli-reference) - 命令列選項429* [Settings](/zh-TW/settings):完整配置參考
430* [CLI reference](/zh-TW/cli-reference):命令列選項