Bible Network Crypto DeFi Onchain RWA AI Agent Stablecoin Chain SAFU CryptoTax DeFAI AGI Claude Me Claude Skill Claude Design Claude Cowork
獨立知識媒體
與任何項目無關聯
學會用 Claude,每件事都做得更好
claudeskill-me.com
最新
用 OpenTelemetry 看 Claude Code 的壓縮與 hook:compaction、hook_execution_complete 與 precompute_reuse 欄位怎麼讀  ·  Bash 權限規則的盲區:deny 擋不住 /bin/rm、bash -c 與 git -C,devbox run * 還會放行內層任何命令  ·  CLAUDE.md 太長了怎麼辦:用 .claude/rules/ 與 paths 讓規則只在碰到特定檔案時才載入  ·  沙盒裡跑 Chromium 出現 No usable sandbox!:--no-sandbox、excludedCommands、allowNestedUserNamespaces 三種解法各放棄什麼  ·  Claude Code v2.1.309:沙盒啟動檔不再在沙盒外執行、denyWrite 經 symlink 失效等一批沙盒與權限缺口修正  ·  auto mode 的 $defaults 陷阱:autoMode.soft_deny 少放一個字串,內建的 force push 攔截規則就整批消失
advanced

沙盒裡跑 Chromium 出現 No usable sandbox!:--no-sandbox、excludedCommands、allowNestedUserNamespaces 三種解法各放棄什麼

30 秒速讀
沙盒擋住 Chromium 的三種解法,沒有一種是免費的:差別只在你放棄的是瀏覽器的隔離、單條命令的限制,還是沙盒的一道邊界。

完整解析 +
01 · 為什麼發生?

三種裡最安全的是哪個?

文件沒有排序。依各自放棄的東西,範圍最小的是 --no-sandbox(只放棄瀏覽器自己的隔離),最大的是 allowNestedUserNamespaces(文件用警告框,說代碼可能在沙盒外執行)。這個排序是我的判斷。

02 · 運作原理是什麼?

excludedCommands 我寫了 playwright,為什麼沒生效?

多半是樣式。文件說樣式要以 * 結尾、整條呼叫的每個命令都要匹配,而且比對的是呼叫文字:npm test 內部呼叫的 playwright 不算。要匹配你實際讓 Claude 執行的那條命令。

03 · 如何應用

可以寫在專案的 settings.json 讓全隊共用嗎?

allowNestedUserNamespaces 不行:文件說要放使用者設定,專案無法開啟。excludedCommands 在沙盒被設為「admin-required」時,專案檔裡的條目會被忽略。

04 · 我該怎麼做?

不是工程師,這跟我有什麼關係?

如果有人為了讓測試能跑而在設定裡打開其中一項,等於在安全上開了個洞。知道有哪三種、各自代價是什麼,才能在 code review 時問對問題。

完整內容 +

在 Linux 或 WSL2 的 Claude Code 沙盒裡跑 Chromium、Playwright 或 rootless Podman,常會撞到 No usable sandbox!。官方沙盒文件對這個問題給了三種處理,每一種都放棄了不同的東西。本文把三者並排比較。以下事實引自官方沙盒文件與 changelog;我沒有在自己的機器上實測這三種做法,會提到的取捨都是文件的說法加上我的整理。

問題是什麼

文件說明,在 Linux 與 WSL2 上,沙盒內的命令預設不能建立 user namespace,所以依賴它的工具會失敗。文件列出的症狀:Chromium 以 No usable sandbox! 結束;unshare -U true 印出 Operation not permitted;rootless Podman 印出 cannot clone: Operation not permitted,或更早因為自己的某個資料夾 read-only file system 而停止。

做法一:瀏覽器自己加 --no-sandbox

對 Chromium 或 Electron,啟動時加 --no-sandbox。Claude Code 的沙盒維持不變,代價是瀏覽器在沒有它自己沙盒的情況下執行網頁內容。如果測試只開你自己控制的本機頁面,這個代價比較小;如果會開外部網址,風險就在瀏覽器那一層。這是我的判斷,文件只說「放棄了瀏覽器自己的隔離」。

做法二:excludedCommands,讓整條命令離開沙盒

把命令樣式放進 sandbox.excludedCommands,符合的命令會在沙盒外以你的完整權限執行:

{
  "sandbox": {
    "enabled": true,
    "excludedCommands": ["npx playwright test *"]
  }
}

文件列了幾條會踩到的規則:

  • 樣式要以 * 結尾;沒有萬用字元的樣式是完全比對,docker 只匹配不帶參數的 docker。
  • 呼叫裡的每一條命令都要匹配:npm ci && docker compose build 除非另一條涵蓋 npm ci,否則仍在沙盒內。
  • 比對的是呼叫的文字:腳本或 make 目標在內部呼叫的工具不算,/usr/local/bin/docker 也不算。所以跑瀏覽器時,要匹配的是測試命令,不是瀏覽器。
  • 重新導向到檔案、cd、$(...) 會讓整個呼叫留在沙盒內。

文件另外警告:Claude 可以先編輯你工作目錄裡的腳本再執行它,而被排除的命令有你的完整權限,所以排除一個會跑腳本的命令,等於把那個腳本的內容也放出沙盒。被排除的命令仍走一般權限流程,auto mode 下由分類器審查;在 bypassPermissions 模式則不會提示,除非有 ask 規則匹配。

做法三:allowNestedUserNamespaces

v2.1.305 新增:

{
  "sandbox": {
    "allowNestedUserNamespaces": true
  }
}

文件要求把它設在 ~/.claude/settings.json,不是專案的 .claude/settings.json,並說專案無法開啟這個設定。好處是保留 Chromium/Electron 自己的沙盒,也能跑巢狀的 bubblewrap 或 unshare。代價,文件用了警告框:你關掉了一道安全邊界,沙盒化命令裡的程式碼最後可能在沙盒之外執行;不要倚賴沙盒的任何限制,包括受保護路徑與 credentials.files,去擋一個惡意命令;在 auto-allow 模式下,那個命令可以不經提示就執行。文件還說,開頭是 unshare 的命令無論 excludedCommands 怎麼寫都會留在沙盒內,而這個設定單獨並不足以讓 rootless Podman 或 Buildah 運作,因為沙盒還有別的方式擋住它們。

怎麼選

  • 只是 Chromium/Electron 測試,且內容是自己的:先用做法一,範圍最小。
  • Podman、Buildah,或會跑瀏覽器的腳本:文件指向 excludedCommands,並預期你接受這些命令有完整權限。
  • 想保留瀏覽器自身沙盒、或需要巢狀 bubblewrap:做法三,但要接受上面那段警告,而且文件建議有資安團隊的話先問過他們。
  • 如果 session 設了 CLAUDE_CODE_SUBPROCESS_ENV_SCRUB=1:文件說這時每條命令都在沙盒內執行,上面的設定都沒有作用,Chromium/Electron 用 --no-sandbox,其他工具請在 Claude Code 外自己跑。

這個排序(先小範圍、再排除、最後才動 namespace)是我的建議,依據是文件各選項的描述,不是我對三者做的比較測試。

資料來源:Configure the sandboxed Bash tool - Claude Code Docs、Claude Code changelog - Claude Code Docs
圖解
沙盒內 Chromium/Podman 失敗的三種解法與各自代價No usable sandbox! 的三條出路:--no-sandbox 放棄瀏覽器隔離、excludedCommands 放棄單條命令的全部限制、allowNestedUserNamespaces 放棄沙盒一道邊界Chromium or rootless Podman fails in the Linux sandbox: three ways outNo usable sandbox! / cannot cloneuser namespaces are blocked by defaultOption 1--no-sandboxClaude Code sandbox stays onGives up: browser's own isolationNarrowestOption 2excludedCommandsMatching command runs outsideGives up: all limits, full accessPodman, BuildahOption 3allowNestedUserNamespacesBrowser keeps its own sandboxGives up: a sandbox boundaryWidest riskSet option 3 in ~/.claude/settings.json (needs v2.1.305+), a repository cannot turn it onCommands starting with unshare stay sandboxed whatever excludedCommands saysWith CLAUDE_CODE_SUBPROCESS_ENV_SCRUB=1 every command is sandboxed and none of these applyClaude Skill Me · claudeskill-me.com
歡迎截圖分享,轉載請註明來源
提問
請至少輸入 10 個字
相關詞彙
相關文章
Bash 權限規則的盲區:deny 擋不住 /bin/rm、bash -c 與 git -C,devbox run * 還會放行內層任何命令
practice · 10/23
auto mode 的 $defaults 陷阱:autoMode.soft_deny 少放一個字串,內建的 force push 攔截規則就整批消失
practice · 10/23
用 OpenTelemetry 看 Claude Code 的壓縮與 hook:compaction、hook_execution_complete 與 precompute_reuse 欄位怎麼讀
advanced · 10/23
Fork 子代理不再從空白開始、直接繼承整段對話——v2.1.302 起在 VS Code、桌面版與 headless 預設開啟
advanced · 10/19
相關新聞
更多相關主題