アクセス解析は同意後だけ使います。詳細

安全と会社での利用

Claude Codeのサンドボックスと権限設定⁠|おすすめのルール

要点この記事の答え
  1. 権限はallow・ask・denyのルールと権限モードで決めます。
  2. サンドボックスはコマンドの読み書きと接続先をOSで囲います。
  3. サンドボックスはmacOS、Linux、WSL2で使えます。
T-1 が出したコマンドのうち git push は権限の門で止まるが、書き方を変えた git -C . push はすり抜け、サンドボックスの壁の中で動いてネットへ出ようとしたところを OS が止める。権限とサンドボックスを二段で重ね、しゃがんだ利用者が /sandbox のスイッチを入れている設計図。

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)での動きです。

操作確認「次から聞かない」を選んだとき
操作ファイルの読み取り、Grep確認なし(作業フォルダの中)「次から聞かない」を選んだときなし
操作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動き各ツールを初めて使うときに確認する。画面ではManual
モード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"
  }
}

自動モードとプランモードの詳しい使い方は、それぞれの記事にまとめています。

関連記事使い方Claude Codeのauto mode(自動モード)とは|設定と使い方、止められる操作Claude Codeのauto mode(自動モード)とは何か。分類器が操作を確かめる仕組み、Manual・acceptEdits・plan・bypassPermissionsとの違い、ターミナル・VS Code・デスクトップアプリ・Windowsでの切り替え、既定で止められる操作、料金、設定での調整を公式ドキュメントで解説。 関連記事使い方Claude Codeのプランモード(plan mode)とは|入り方・抜け方と、使いどころClaude Codeのプランモードとは何か。Shift+Tabや/planでの入り方、VS Codeとデスクトップアプリでの使い方、承認して抜ける方法、Planサブエージェント、ultrathinkの効き方、廃止されたultraplan、許可モードとの関係を公式ドキュメントで解説。

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/settings.json効く範囲自分のすべてのプロジェクト
ファイル.claude/settings.json効く範囲そのプロジェクト(gitでチームと共有)
ファイル.claude/settings.local.json効く範囲そのプロジェクトの自分だけ

どこかのファイルでdenyされたものは、ほかのどのファイルでもallowできません。ユーザーの設定で許可していても、プロジェクトの設定で拒否されていれば止まり、その逆も同じです。

プロジェクトの.claude/settings.jsonにあるallowのルールは、そのフォルダを信頼する画面(workspace trust)で承認するまで効きません。denyとaskは制限するだけなので、承認の前から効きます。置き場所と優先順位の全体は、settings.jsonの記事で説明しています。

関連記事設定と CLAUDE.mdClaude Codeの設定|settings.jsonの場所・おすすめ設定・MCP・環境変数Claude Codeの設定は、ユーザー、プロジェクト、ローカルのsettings.jsonを編集して変えます。場所と優先順位、初期設定、おすすめの設定例、MCP、出力スタイル、権限、環境変数、学習に使われない設定、日本語、VS Codeまで公式仕様に沿って解説します。

ルールの書き方

ルールはツール名かツール名(条件)の形で書きます。ツール名だけなら、そのツールのすべての使い方に当たります。

  • 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/alice/secrets/**)
書き方~/path起点ホームフォルダ例Read(~/Documents/*.pdf)
書き方/path起点設定ファイルの場所例Edit(/src/**/*.ts)
書き方path、./path起点今のフォルダ例Read(*.env)

/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サンドボックス使える(OSに入っているSeatbeltを使う)
環境Linuxサンドボックス使える(bubblewrapとsocatが要る)
環境WSL2サンドボックス使える(Linuxと同じ準備が要る)
環境WSL1サンドボックス使えない
環境ネイティブのWindowsサンドボックス使えない

ネイティブのWindowsでは、Claude Codeはコマンドをサンドボックスなしで動かします。Windowsでサンドボックスを使いたいなら、WSL2のディストリビューションの中でClaude Codeを動かします。WSL1の場合は、WSL2に上げるかサンドボックスなしで使うよう公式は案内しています。WindowsでのClaude Codeの入れ方は次の記事にまとめています。

関連記事入れる・困ったときClaude CodeをWindowsで使う|インストールのコマンド、使い方、WSL2とエラーの直し方Claude CodeをWindowsで使う方法。PowerShell・コマンドプロンプト・WinGetでの入れ方、起動とログイン、Git for Windowsの要否、ネイティブとWSL2の選び方、公式のエラーの直し方をまとめました。

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.allowWrite意味書き込みを足すパス
キーfilesystem.denyRead意味読ませないパス
キーnetwork.allowedDomains意味つないでよいドメイン

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/Application Support/ClaudeCode/
OSLinuxとWSL置き場所/etc/claude-code/
OSWindows置き場所C:\Program Files\ClaudeCode\

それぞれのフォルダに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を使います。会社で運用するときのほかの決めごとは、セキュリティ設定の記事にまとめています。

関連記事安全と会社での利用Claude Codeのセキュリティ設定|権限・sandbox・法人運用【2026年版】Claude Codeを安全に使うためのpermissions、sandbox、機密ファイル拒否、ネットワーク制御、managed settings、データ保持、監査を公式仕様で解説。

--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を配ります。

公式資料