Claude Codeの サンドボックスと 権限設定 おすすめの ルール
- 権限はallow・ask・denyのルールと権限モードで決めます。
- サンドボックスはコマンドの読み書きと接続先をOSで囲います。
- サンドボックスはmacOS、Linux、WSL2で使えます。

Claude Codeの安全の仕組みは2段です。 1段目は権限(permission)で、Claudeがどのツールを、どのファイルやドメインに使ってよいかをsettings.jsonのallow・ask・denyと権限モードで決めます。2段目はサンドボックス(sandbox)で、Claudeが動かすシェルのコマンドと、そこから起動されたプロセスが触れるファイルと接続先を、OSの機能で囲います。
公式は、この2つを重ねて使うよう案内しています。権限のルールはコマンドの文字列で判定するので書き方次第ですり抜けられますが、サンドボックスはOSが止めるので、プロンプトインジェクションで判断を誤らされても効き続けます。サンドボックスはmacOS、Linux、WSL2で使えて、ネイティブのWindowsでは使えません。
内容は、2026年10月26日に公式のConfigure permissions、Permission modes、Sandboxing、Development containers、Deploy managed settings、Advanced setupと照らし合わせました。
Claude Codeの 権限の 仕組み
Claude Codeは、操作の種類ごとに確認を出すかどうかを分けています。次の表は、確認をいちばん多く出すManualモード(設定値はdefault)での動きです。
| 操作 | 確認 | 「次から |
|---|---|---|
| 操作ファイルの | 確認なし | 「次から聞かない」を選んだときなし |
| 操作Bashの | 確認あり | 「次から聞かない」を選んだときその |
| 操作ファイルの | 確認あり | 「次から聞かない」を選んだときその |
| 操作WebFetch | 確認あり | 「次から聞かない」を選んだときその |
| 操作WebSearch | 確認あり | 「次から聞かない」を選んだときその |
確認の画面で「Yes, and don't ask again」を選ぶと、BashのコマンドやWebFetchのドメインは、gitリポジトリの一番上にある.claude/settings.local.jsonにルールとして保存されます。ファイル編集の許可はファイルに保存されず、セッションが終わると消えます。
確認なしで動く読み取りだけのコマンドには、ls、cat、head、tail、grep、find、wc、diff、cd、読み取りだけのgitなどがあります。この一覧は変えられないので、これらでも確認させたいときはaskかdenyのルールを足します。
公式は、権限のルールを守らせているのはモデルではなくClaude Code本体だと書いています。CLAUDE.mdやプロンプトに「〜しないで」と書いても、Claudeの振る舞いが変わるだけで、許可そのものは変わりません。止めたいことは、下で説明するルールかモードで止めます。
権限モードの 一覧と 切り 替え方
権限モード(許可モード)は、どの操作で確認を出すかをまとめて切り替えるものです。
| モード | 動き |
|---|---|
モードdefault | 動き各ツールを |
モードacceptEdits | 動き作業フォルダのmkdirやmvなどを |
モードplan | 動き読んで |
モードauto | 動き別の |
モードdontAsk | 動き確認が |
モードbypassPermissions | 動き確認を |
v2.1.283以降は、何も設定していなければ、ターミナルとVS Codeの対話のセッションはautoで始まります。claude -pとAgent SDKはdefaultで始まります。組織にHIPAA構成が適用されていて、そのセッションが対象のときは、autoの既定が効かずdefaultで始まります。
対話中はShift+Tabで切り替えます。autoから押すとまずdefaultになり、そのあとdefault、acceptEdits、planの順に回ります。dontAskはこの順番に出てこないので、起動するときに指定します。
# 計画だけ立てるモードで始める
claude --permission-mode plan
# 確認が要る操作を全部断るモードで始める
claude --permission-mode dontAskいつも同じモードで始めたいときは、settings.jsonのpermissions.defaultModeに書きます。ただしautoとbypassPermissionsは、プロジェクトの.claude/settings.jsonや.claude/settings.local.jsonに書いても効きません。
{
"permissions": {
"defaultMode": "default"
}
}自動モードとプランモードの詳しい使い方は、それぞれの記事にまとめています。
関連記事settings.jsonの allow・ ask・ deny
権限のルールは、settings.jsonのpermissionsに3つのリストで書きます。
- allow 確認なしで使ってよい
- ask 使うたびに確認する
- deny 使わせない
ルールはdeny、ask、allowの順に調べられ、最初に当たったもので決まります。細かく書いたルールが優先されることはありません。たとえばdenyにBash(aws *)があると、allowにBash(aws s3 ls)を書いても止まります。allowでdenyの例外は作れません。
書く場所は次の3つが基本です。リストはどれか1つが選ばれるのではなく、全部のファイルの分が合わさります。
| ファイル | 効く範囲 |
|---|---|
ファイル~/.claude/ | 効く範囲自分の |
ファイル.claude/ | 効く範囲その |
ファイル.claude/ | 効く範囲その |
どこかのファイルでdenyされたものは、ほかのどのファイルでもallowできません。ユーザーの設定で許可していても、プロジェクトの設定で拒否されていれば止まり、その逆も同じです。
プロジェクトの.claude/settings.jsonにあるallowのルールは、そのフォルダを信頼する画面(workspace trust)で承認するまで効きません。denyとaskは制限するだけなので、承認の前から効きます。置き場所と優先順位の全体は、settings.jsonの記事で説明しています。
ルールの 書き方
ルールはツール名かツール名(条件)の形で書きます。ツール名だけなら、そのツールのすべての使い方に当たります。
Bashは、すべてのBashのコマンドに当たりますBash(npm run build)は、npm run buildだけに当たりますBash(npm run *)は、npm runで始まるコマンドに当たりますRead(./.env)は、今のフォルダの.envを読むことに当たりますWebFetch(domain:example.com)は、example.comへの取得に当たりますmcp__github__*は、githubというMCPサーバーのすべてのツールに当たりますAgent(Explore)は、Exploreのサブエージェントに当たります
Bashの ルール
*はその位置の任意の文字列を表します。公式は、*をサブコマンドの後ろに置くよう注意しています。Bash(git log *)はgit logだけを許しますが、Bash(git *)はすべてのgitのコマンドを許します。
*の前の空白にも意味があります。Bash(ls *)はls -laとlsに当たり、lsofには当たりません。Bash(ls*)はlsofにも当たります。
&&や|でつないだコマンドは、1つずつに分けて調べられます。Bash(safe-cmd *)を許しても、safe-cmd && other-cmdのother-cmdまでは許されません。
気をつけたいのは、BashのルールはClaudeが書いたコマンドの文字列で判定する点です。公式の例では、denyのBash(git push *)はgit push origin mainを止めますが、git -C . push origin mainは止めません。Bash(curl *)も/usr/bin/curlやsh -c 'curl ...'は止めません。コマンドの書き方によらずに止めたいときは、サンドボックスを使います。
Readと Editの ルール
ファイルのルールはgitignoreと同じ書き方で、先頭の形によって起点が変わります。
| 書き方 | 起点 | 例 |
|---|---|---|
書き方//path | 起点ファイルシステムの | 例Read(//Users/ |
書き方~/ | 起点ホームフォルダ | 例Read(~/ |
書き方/path | 起点設定ファイルの場所 | 例Edit(/ |
書き方path、./path | 起点今の | 例Read(*. |
/pathは絶対パスではありません。プロジェクトの設定に書けばプロジェクトのフォルダから、~/.claude/settings.jsonに書けば~/.claude/からの位置になります。ユーザーの設定でRead(/secrets/**)と書くと、止まるのは~/.claude/secrets/です。絶対パスは//で始めます。
.claudeignoreは効かないので、読ませたくないファイルはReadのdenyに書きます。書き換えも止めたいときは、同じパスをEditでもdenyに入れます。
WebFetchと MCPの ルール
WebFetch(domain:example.com)はexample.comだけに当たり、api.example.comには当たりません。サブドメインも含めるならWebFetch(domain:*.example.com)を足します。
MCPのツールはmcp__サーバー名__ツール名で書きます。サーバーの全部のツールならmcp__サーバー名__*です。denyにmcp__*と書くと、すべてのMCPのツールを止められます。
/permissionsで ルールを 見る・ 足す
対話中に/permissionsを打つと、いま効いているすべてのルールと、それぞれがどのsettings.jsonから来ているかが出ます。ここからルールを足したり消したりでき、Claudeが作業している途中でも、次のツールの呼び出しから反映されます。
/permissions設定ファイルに書いたルールが効いていないと感じたら、まずここで、ルールが出ているか、思っていたファイルから来ているかを確かめます。
おすすめの 権限設定
最初は「よく使う安全なコマンドだけ許す」「外に出す操作は毎回聞く」「秘密のファイルは読ませない」の3つから始めます。次の例は、公式の書き方だけで作った.claude/settings.jsonの出発点です。
{
"permissions": {
"allow": [
"Bash(npm run *)",
"Bash(git commit *)"
],
"ask": [
"Bash(git push *)"
],
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Edit(./.env)"
]
}
}npm runのスクリプトとコミットは毎回の確認を省きます。使っていないパッケージマネージャーなら、自分のテストやビルドのコマンドに置き換えますgit pushは外に出る操作なので、askで毎回確認します。askのルールはbypassPermissionsを含むどのモードでも確認を出します.envやsecrets/は、Claudeの組み込みのファイルツールで読ませず、.envは書き換えもさせません。ただしReadとEditのdenyは、catやsedのように認識できるファイル操作と>などのリダイレクトには効きますが、PythonやNodeのスクリプトがファイルを自分で開くような、サブプロセスの間接的な読み書きには効きません。Bash(npm run *)は、そのプロジェクトで定義された任意のnpmスクリプトを確認なしで動かすので、スクリプトの中身を信頼できるプロジェクトだけで許します。すべてのプロセスからファイルを守りたいときは、次のサンドボックスを有効にします
allowにBashやBash(git *)のような広いルールを入れるのは避けます。上で書いたとおり、denyのBash(git push *)は書き方を変えたpushを止められないので、本当に止めたいものはサンドボックスと組み合わせます。
権限の設定やCLAUDE.mdのひな形を自分のプロジェクトに合わせるときに迷ったら、このサイトを運営するBlueAIの「Claude サロン」で、分からない点をLINEで質問できます(申し込みの頁は準備中です)。中身と料金はClaudeの学び方の記事に載せています。
サンドボックスとは
Claude Codeのサンドボックスは、Claudeが動かすシェルのコマンド(Bash、PowerShell、Monitor)と、そこから起動されたプロセスの周りに、OSが守らせる境界を作る仕組みです。境界の中のコマンドはOSが止めるので、Claude Codeはコマンドを1つずつ確認しなくても動かせます。
Claudeのファイルのツール、MCPサーバー、フックは境界の外で動くので、こちらは権限のルールで守ります。
既定ではオフです。オンにするには、対話中に/sandboxを打つか、settings.jsonに"sandbox": { "enabled": true }を書きます。/sandboxの画面でモードを選ぶと、そのプロジェクトの.claude/settings.local.jsonに保存されます。
| モード | 動き |
|---|---|
| モードAuto-allow | 動きサンドボックスの |
| モードRegular permissions | 動きサンドボックスの |
Auto-allowでも、Bashのdenyのルールは止め、Bash(git push *)のような中身を指定したaskのルールは確認を出します。
サンドボックスの既定の境界は次の通りです。
| 種類 | 既定 |
|---|---|
| 種類書き込み | 既定作業フォルダ、 |
| 種類読み取り | 既定マシンの~/.sshなども |
| 種類ネットワーク | 既定直接は |
| 種類環境変数 | 既定Claude Codeから |
読み取りは既定で広いので、~/.sshや~/.aws/credentialsのような資格情報は、sandbox.credentialsかsandbox.filesystem.denyReadで守ります。許可リストにないホストへつなごうとしたときの扱いは、権限モードで変わります。ManualとacceptEditsでは確認が出て、dontAskでは断られます。
サンドボックスの 対応OS
| 環境 | サンドボックス |
|---|---|
| 環境macOS | サンドボックス使える |
| 環境Linux | サンドボックス使える |
| 環境WSL2 | サンドボックス使える |
| 環境WSL1 | サンドボックス使えない |
| 環境ネイティブの | サンドボックス使えない |
ネイティブのWindowsでは、Claude Codeはコマンドをサンドボックスなしで動かします。Windowsでサンドボックスを使いたいなら、WSL2のディストリビューションの中でClaude Codeを動かします。WSL1の場合は、WSL2に上げるかサンドボックスなしで使うよう公式は案内しています。WindowsでのClaude Codeの入れ方は次の記事にまとめています。
関連記事LinuxとWSL2では、先に2つのパッケージを入れます。
# Ubuntu、Debian
sudo apt-get install bubblewrap socat
# Fedora
sudo dnf install bubblewrap socat足りないものがあると、/sandboxの画面にDependenciesのタブが出ます。Ubuntu 24.04以降ではAppArmorがbubblewrapを止めることがあり、公式のSandboxingのページに対処のための設定が載っています。
サンドボックスの中身は、公開されている@anthropic-ai/sandbox-runtimeというパッケージです。
サンドボックスの 設定例
個人の開発で使う出発点の例です。サンドボックスをオンにし、失敗したコマンドをサンドボックスの外でやり直すことを禁じ、つないでよいドメインだけを書きます。
{
"sandbox": {
"enabled": true,
"allowUnsandboxedCommands": false,
"network": {
"allowedDomains": ["github.com", "*.npmjs.org"]
}
}
}| キー | 意味 |
|---|---|
キーenabled | 意味サンドボックスを |
キーfailIfUnavailable | 意味使えない |
キーallowUnsandboxedCommands | 意味falseで |
キーexcludedCommands | 意味外で |
キーfilesystem. | 意味書き込みを |
キーfilesystem. | 意味読ませないパス |
キーnetwork. | 意味つないでよい |
failIfUnavailableを書かないと、サンドボックスが動かない環境では、何も言わずにサンドボックスなしでコマンドが動きます。会社で必須にするならtrueにします。
サンドボックスの中でコマンドが失敗すると、ClaudeがdangerouslyDisableSandboxという指定で、サンドボックスの外でやり直そうとすることがあります。これを止めるのがallowUnsandboxedCommandsのfalseです。
dockerはサンドボックスと一緒に使えません。docker composeを使うならexcludedCommandsに"docker compose *"のように書きますが、ここに書いたコマンドは制限なしで動くので、なるべく狭く書きます。素のsshや多くのデータベースのドライバーは、許可したホストにもつながらないことがあります。
サンドボックスのパスの書き方は、権限のルールと違います。サンドボックスでは~/.kubeはホームから、/tmp/buildは絶対パスです。権限のルールの//pathや/pathとは読み替えが要ります。
dev containerで 丸ごと 隔離する
チームで同じ隔離された環境を使いたいなら、dev container(開発用コンテナ)の中でClaude Codeを動かす方法があります。Claudeが動かすコマンドはコンテナの中で動き、編集したファイルは手元のリポジトリに出てきます。
入れ方は、.devcontainer/devcontainer.jsonのfeaturesに公式のClaude Codeの機能を足し、コンテナを作り直すだけです。
{
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"features": {
"ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {}
}
}公式の見本のコンテナ(anthropics/claude-codeのリポジトリの.devcontainer/)には、外への通信を許可した先だけに絞るinit-firewall.shも入っています。ただし公式は、--dangerously-skip-permissionsで動かした場合、コンテナの中にあるもの(~/.claudeにあるClaude Codeの認証情報を含む)を悪意のあるプロジェクトが外へ送るのは防げないと注意しています。信頼できるリポジトリだけで使い、~/.sshなどホストの秘密をコンテナにつながないようにします。
管理者権限・ sudoと managed settings
Claude Codeを使うのに管理者権限は要りません。公式の手順では、ネイティブのWindowsでも管理者として実行しなくてよいと書かれています。npmで入れる場合は、sudo npm install -gを使わないよう公式が注意しています。
さらに、LinuxとmacOSでは、rootやsudoのままbypassPermissions(--dangerously-skip-permissions)で始めようとすると、Claude Codeは起動を断ります。
--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons会社で権限を揃えたいときは、管理者がmanaged settings(管理設定)を配ります。managed settingsはユーザーやプロジェクトの設定より強く、利用者の設定で緩めることができません(一部のセキュリティ関連の項目だけは、下位の設定のより厳しい値も効きます)。ファイルで配る場合の置き場所は次の通りです。
| OS | 置き場所 |
|---|---|
| OSmacOS | 置き場所/Library/ |
| OSLinuxと | 置き場所/etc/ |
| OSWindows | 置き場所C:\ |
それぞれのフォルダにmanaged-settings.jsonを置きます。ほかに、claude.aiの管理画面から配るserver-managed settingsと、MDM(macOSの構成プロファイルやWindowsのレジストリ)で配る方法があります。
公式の例は、.envとsecrets/を読ませず、bypassのモードを使えなくし、権限のルールはmanaged settingsのものだけを使う設定です。
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./secrets/**)"
],
"disableBypassPermissionsMode": "disable"
},
"allowManagedPermissionRulesOnly": true
}自動モードを使わせないなら、permissions.disableAutoModeを"disable"にします。サンドボックスの接続先をmanaged settingsの許可リストだけにするなら、sandbox.network.allowManagedDomainsOnlyを使います。会社で運用するときのほかの決めごとは、セキュリティ設定の記事にまとめています。
--dangerously-skip-permissionsを 使う前に
--dangerously-skip-permissionsは、--permission-mode bypassPermissionsと同じ意味のフラグです。確認をほぼすべて飛ばし、.gitや.claudeのような保護されたパスへの書き込みも通します。
公式は、このモードを、ホストを壊す心配のないコンテナやVM、インターネットにつながらないdev containerのような隔離された環境だけで使うよう案内しています。どのモードでも止まるものもあり、明示したaskのルール、AskUserQuestion、rmによる重要なパスの削除などは、このモードでも自動では通りません。
確認を減らしたいだけなら、操作を分類器が確かめる自動モードか、サンドボックスのAuto-allowが先の選択肢です。フラグの意味と使えなくする方法は、用語集にまとめています。
--dangerously-skip-permissionsの用語解説
よく ある質問
Claude Codeの サンドボックスとは 何ですか?
Claudeが動かすシェルのコマンドと、そこから起動されたプロセスが触れるファイルと接続先を、OSの機能で囲う仕組みです。書き込みは作業フォルダなどに限られ、ネットワークは許可したドメインにしか出られません。/sandboxでオンにします。
Windowsで サンドボックスは 使えますか?
ネイティブのWindowsでは使えません。WSL2の中でClaude Codeを動かせば使えます。WSL1では使えないので、WSL2に上げるか、サンドボックスなしで使います。
権限設定は どこに 書きますか?
settings.jsonのpermissionsに、allow、ask、denyのリストで書きます。自分のすべてのプロジェクトなら~/.claude/settings.json、チームで共有するなら.claude/settings.json、そのプロジェクトの自分だけなら.claude/settings.local.jsonです。
allowと denyの 両方に 当たると どうなりますか?
denyが勝ちます。ルールはdeny、ask、allowの順に調べられ、細かく書いたallowでもdenyの例外にはなりません。どのファイルのdenyでも同じです。
権限モードは どう 切り 替えますか?
対話中はShift+Tabで切り替えます。起動するときは--permission-modeで指定し、いつも同じモードで始めたいならsettings.jsonのpermissions.defaultModeに書きます。
Claude Codeを 管理者権限や sudoで 動か すべきですか?
いいえ。管理者権限は要りません。LinuxとmacOSでは、rootやsudoのままでは--dangerously-skip-permissionsで起動できません。会社で設定を揃えたいときは、管理者がmanaged settingsを配ります。
公式資料
- Configure permissions(2026年10月26日に確認)
- Permission modes(2026年10月26日に確認)
- Sandboxing(2026年10月26日に確認)
- Development containers(2026年10月26日に確認)
- Deploy managed settings(2026年10月26日に確認)
- Advanced setup(2026年10月26日に確認)


