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
最新
Ubuntu 24.04でClaude Codeのサンドボックスが起動しない:AppArmorがbubblewrapのuser namespace作成を妨げる問題の確認と修正  ·  Claude Codeのeffort設定はどれが優先されるか:CLAUDE_CODE_EFFORT_LEVEL、--effort、modelSettings、effortLevel、maxEffortLevelの順位  ·  Claude Code v2.1.310/v2.1.311:圧縮の要約欠落は再試行、ultrathinkはxhighで実行、DISABLE_COMPACTは一方向スイッチに  ·  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で、特定のファイルに触れたときだけルールを読み込む
practice

Ubuntu 24.04でClaude Codeのサンドボックスが起動しない:AppArmorがbubblewrapのuser namespace作成を妨げる問題の確認と修正

30秒バージョン · 忙しい方へ
サンドボックスが起動しないとき、既定ではサンドボックスなしで実行される。起動失敗で終了させたいなら、failIfUnavailableを自分で設定する。

詳しく読む +
01 · なぜ起きたのか?

AppArmorが原因かを最速で確認するには?

sysctl kernel.apparmor_restrict_unprivileged_usernsを実行する。1が返ったときだけAppArmorプロファイルが必要で、0やキーが存在しない場合は不要。これは公式ドキュメントの確認方法で、私は実行していない。

02 · 仕組みは?

そのAppArmorプロファイルを追加すると、サンドボックス内のコマンドの権限が増えますか?

公式ドキュメントによれば増えない。プロファイルはbwrap自体にのみ適用され、サンドボックス内で実行するコマンドには適用されない。ただしシステム上のbwrapにuser namespaceの能力を与えるものなので、自分の環境のポリシーに照らして判断する。

03 · 自分にどう影響する?

サンドボックスが起動しないのにClaudeはコマンドを実行できる。正常ですか?

ドキュメントによれば、それが既定の挙動だ。依存関係の不足やプラットフォーム非対応のとき、Claude Codeはサンドボックスなしでコマンドを実行する。代わりに終了させるにはsandbox.failIfUnavailable: trueを設定する。

04 · どうすればいい?

エンジニアではありません。一言でいうと?

サンドボックスは間仕切りのある部屋で、Ubuntuのセキュリティポリシーは既定では間仕切りを作ることを許さない。先に「間仕切りを作る道具」に許可を出して初めて部屋が建つ。

全文 +

Ubuntu 24.04以降でbubblewrapとsocatを入れても、Claude Codeのサンドボックスが起動しないことがある。よくある原因は、AppArmorの既定ポリシーがbubblewrapに必要なuser namespaceの作成を妨げることだ。公式のサンドボックスドキュメントには専用の節があり、v2.1.310では/sandboxと起動時の警告がこの制限を名指しするようになった。本稿は公式ドキュメントに沿って確認と修正の手順を整理する。コマンドはUbuntuマシンで実行していないので、自分の環境で確認してほしい。

まずこの問題か確認する

ドキュメントの確認方法(WSL2でも有効):

sysctl kernel.apparmor_restrict_unprivileged_userns
  • 0が返る:この手順は不要。
  • No such file or directoryが出る:キーが存在しないので、これも不要。
  • 1が返る:bwrapにこの権限を与えるAppArmorプロファイルを追加する。

別途、/sandboxのDependenciesタブには、不足しているripgrep、bubblewrap、socat、seccompフィルターが一覧される。依存関係の確認は起動時に行われるので、パッケージを入れたらClaude Codeを再起動する。タブが見えなければ依存関係はすべて揃っている。

ドキュメントの修正手順

sudo tee /etc/apparmor.d/bwrap > /dev/null <<'EOF'
abi <abi/4.0>,
include <tunables/global>

profile bwrap /usr/bin/bwrap flags=(unconfined) { userns, include if exists <local/bwrap> } EOF sudo systemctl reload apparmor

ドキュメントは、このプロファイルがbwrap自体にのみ適用され、サンドボックス内で実行するコマンドには適用されないと強調している。許可するのはサンドボックスを作る行為であり、内部のプログラムへの規則の緩和ではない。これは先に取り上げたsandbox.allowNestedUserNamespacesとは別の層だ。後者はサンドボックス内のコマンドにもuser namespaceの作成を許し、ドキュメントはセキュリティ境界を1つ無効にすると警告している。AppArmorの手順はサンドボックスを起動できるようにするだけだ。

なぜ無視せず直すのか

ドキュメントによれば、既定では依存関係の不足やプラットフォーム非対応でサンドボックスが起動できない場合、Claude Codeはサンドボックスなしでコマンドを実行する。代わりに起動時に終了させるにはsandbox.failIfUnavailableをtrueにする。ドキュメントが挙げるのは依存関係の不足とプラットフォーム非対応で、AppArmorによる阻害がこれに含まれるかは明記されておらず、含まれると見なすのは私の推論だ。サンドボックスに頼るなら、AppArmorを直し、必要に応じてfailIfUnavailableを有効にし、管理者の展開ではallowUnsandboxedCommands: falseも併用することを私は勧める。またドキュメントは、ネイティブWindowsではサンドボックスが動かず、failIfUnavailableを設定するとそれらのマシンでClaude Codeが起動時に終了すると警告している。

サンドボックスが本当に有効か検証する

ドキュメントのプローブの1つ:touch ~/sandbox-probeはLinuxとWSL2でRead-only file systemで失敗するはずだ(macOSではOperation not permitted)。curl --noproxy '*' https://example.comは、サンドボックスのプロキシを迂回する経路がないためCould not resolve hostで失敗するはずだ。ドキュメントはまた、失敗したコマンドをサンドボックス外で再試行しようとClaudeが提案してきたら断るよう述べる。touchが成功し、ホームディレクトリがサンドボックスの書き込み許可先でないなら、~/sandbox-probeを削除して/sandboxで確認する。

紛らわしい2つの状況

  • コンテナ内:非特権コンテナではbubblewrapが新しい/procをマウントできず、サンドボックス内のコマンドはCan't mount proc on /newroot/proc: Operation not permittedのようなbwrapエラーで失敗する。ドキュメントの解決策はenableWeakerNestedSandbox: trueで、外側のコンテナが必要な分離をすでに提供している場合に限って使うよう警告している。新しい/procのマウントなら隠れるプロセス情報が見えてしまうためだ。
  • WSL1:Sandboxing requires WSL2と出たら、ディストリビューションがWSL1で動いている。WSL2へ更新するか、サンドボックスなしでClaude Codeを使う。wsl -l -vで確認する。

私の判断

これは私の整理であり公式の助言ではない。サンドボックスが起動しないときは、まず/sandboxの案内に従う。Ubuntu 24.04以降ではそのsysctlを確認する。コンテナとWSL1は別の経路なので、解決策を混ぜない。特に、サンドボックスを正常に見せるためだけにallowNestedUserNamespacesを有効にしてはいけない。それは別の問題を解く設定だ。

出典:Configure the sandboxed Bash tool - Claude Code Docs、Claude Code changelog - Claude Code Docs
図解
Linux 沙盒起不來:AppArmor、容器、WSL 三種情況沙盒起不來時先看 /sandbox,再依情況分三條路:Ubuntu 24.04 的 AppArmor、容器內的 /proc、WSL1;預設失敗時會無沙盒執行Sandbox will not start on Linux: which problem is it?Sandboxed commands fail or sandbox is offcheck /sandbox first (Dependencies tab)Ubuntu 24.04+sysctl kernel.apparmor_restrict_unprivileged_usernsreturns 1Fix:Add AppArmor profile for bwrap(userns, bwrap only)sudo systemctl reload apparmorInside a containerbwrap: Cannot mount procon /newroot/procOperation not permittedFix:enableWeakerNestedSandbox: trueonly if the outer containeralready isolates enoughWSL"Sandboxing requires WSL2"means the distro is on WSL1check: wsl -l -vFix:Upgrade to WSL2or run without the sandboxBy default a sandbox that cannot start means commands run WITHOUT the sandboxsandbox.failIfUnavailable: true makes Claude Code exit at startup insteadDo not use allowNestedUserNamespaces for this: it opens a different boundaryClaude 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に文字列を1つ入れ忘れると、組み込みのforce pushルールが丸ごと消える
practice · 10/23
Claude Codeのサンドボックスで「No usable sandbox!」:--no-sandbox、excludedCommands、allowNestedUserNamespacesがそれぞれ手放すもの
advanced · 10/23
Claude Code 2.1.299へ上げる前に確認:MCP allowルールの厳格化、名前に妙な文字を含むスキルの除外、UserPromptSubmitフックの実行順の変更
practice · 10/19
関連ニュース