メインコンテンツへスキップ
Claude Code は、エージェントが実行できることと実行できないことを正確に指定できるようにするため、きめ細かい権限をサポートしています。権限設定はバージョン管理にチェックインでき、組織内のすべての開発者に配布できるほか、個々の開発者がカスタマイズできます。

権限システム

Claude Code は、パワーと安全性のバランスを取るために、段階的な権限システムを使用しています。
ツールタイプ承認が必要「はい、今後は聞かない」の動作
読み取り専用ファイル読み取り、GrepいいえN/A
Bash コマンドシェル実行はいプロジェクトディレクトリとコマンドごとに永続的
ファイル変更Edit/Write ファイルはいセッション終了まで

権限を管理する

/permissions を使用して、Claude Code のツール権限を表示および管理できます。この UI は、すべての権限ルールと、それらが取得される settings.json ファイルをリストします。
  • Allow ルールは、Claude Code が手動承認なしで指定されたツールを使用できるようにします。
  • Ask ルールは、Claude Code が指定されたツールを使用しようとするたびに確認を促します。
  • Deny ルールは、Claude Code が指定されたツールを使用することを防止します。
ルールは順序で評価されます。deny -> ask -> allow。最初にマッチしたルールが優先されるため、deny ルールは常に優先されます。

権限モード

Claude Code は、ツールの承認方法を制御するいくつかの権限モードをサポートしています。設定ファイルdefaultMode を設定します。
モード説明
default標準動作。各ツールの最初の使用時に権限を促します
acceptEditsセッション中のファイル編集権限を自動的に受け入れます
planPlan Mode。Claude はファイルを分析できますが、ファイルを変更したりコマンドを実行したりすることはできません
dontAsk/permissions または permissions.allow ルールで事前に承認されていない限り、ツールを自動的に拒否します
bypassPermissionsすべての権限プロンプトをスキップします(安全な環境が必要です。以下の警告を参照してください)
bypassPermissions モードはすべての権限チェックを無効にします。このモードは、Claude Code が損害を引き起こせないコンテナや VM などの隔離された環境でのみ使用してください。管理者は、管理設定disableBypassPermissionsMode"disable" に設定することで、このモードを防止できます。

権限ルール構文

権限ルールは、Tool または Tool(specifier) の形式に従います。

ツールのすべての使用をマッチさせる

ツールのすべての使用をマッチさせるには、括弧なしでツール名を使用します。
ルール効果
Bashすべての Bash コマンドをマッチさせます
WebFetchすべてのウェブフェッチリクエストをマッチさせます
Readすべてのファイル読み取りをマッチさせます
Bash(*)Bash と同等で、すべての Bash コマンドをマッチさせます。

細かい制御のためにスペシファイアを使用する

括弧内にスペシファイアを追加して、特定のツール使用をマッチさせます。
ルール効果
Bash(npm run build)正確なコマンド npm run build をマッチさせます
Read(./.env)現在のディレクトリの .env ファイルを読み取ることをマッチさせます
WebFetch(domain:example.com)example.com へのフェッチリクエストをマッチさせます

ワイルドカードパターン

Bash ルールは * を使用したグロブパターンをサポートしています。ワイルドカードはコマンド内の任意の位置に表示できます。この設定により、npm および git commit コマンドが許可され、git push がブロックされます。
{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(git commit *)",
      "Bash(git * main)",
      "Bash(* --version)",
      "Bash(* --help *)"
    ],
    "deny": [
      "Bash(git push *)"
    ]
  }
}
* の前のスペースは重要です。Bash(ls *)ls -la にマッチしますが lsof にはマッチしません。一方、Bash(ls*) は両方にマッチします。レガシーな :* サフィックス構文は * と同等ですが、非推奨です。

ツール固有の権限ルール

Bash

Bash 権限ルールは * を使用したワイルドカードマッチングをサポートしています。ワイルドカードは、開始、中央、終了を含むコマンド内の任意の位置に表示できます。
  • Bash(npm run build) は正確な Bash コマンド npm run build をマッチさせます
  • Bash(npm run test *)npm run test で始まる Bash コマンドをマッチさせます
  • Bash(npm *)npm で始まるコマンドをマッチさせます
  • Bash(* install) install で終わるコマンドをマッチさせます
  • Bash(git * main)git checkout maingit merge main などのコマンドをマッチさせます
* が末尾にスペース付きで表示される場合(Bash(ls *) など)、単語境界を強制し、プレフィックスの後にスペースまたは文字列の終わりが続く必要があります。たとえば、Bash(ls *)ls -la にマッチしますが lsof にはマッチしません。対照的に、スペースなしの Bash(ls*) は、単語境界制約がないため、ls -lalsof の両方にマッチします。
Claude Code はシェルオペレータ(&& など)を認識しているため、Bash(safe-cmd *) のようなプレフィックスマッチルールは、safe-cmd && other-cmd コマンドを実行する権限を与えません。
コマンド引数を制約しようとする Bash 権限パターンは脆弱です。たとえば、Bash(curl http://github.com/ *) は curl を GitHub URL に制限することを意図していますが、次のようなバリエーションにはマッチしません。
  • URL の前のオプション。curl -X GET http://github.com/...
  • 異なるプロトコル。curl https://github.com/...
  • リダイレクト。curl -L http://bit.ly/xyz(github にリダイレクト)
  • 変数。URL=http://github.com && curl $URL
  • 余分なスペース。curl http://github.com
より信頼性の高い URL フィルタリングについては、以下を検討してください。
  • Bash ネットワークツールを制限する。deny ルールを使用して curlwget などのコマンドをブロックし、許可されたドメインに対して WebFetch(domain:github.com) 権限で WebFetch ツールを使用します
  • PreToolUse フックを使用する。Bash コマンドの URL を検証し、許可されていないドメインをブロックするフックを実装します
  • CLAUDE.md を通じて Claude Code に許可された curl パターンについて指示します
WebFetch のみを使用しても、ネットワークアクセスは防止されません。Bash が許可されている場合、Claude は curlwget または他のツールを使用して任意の URL に到達できます。

Read と Edit

Edit ルールは、ファイルを編集するすべての組み込みツールに適用されます。Claude は、Grep や Glob などのファイルを読み取るすべての組み込みツールに Read ルールを適用するためにベストエフォートを試みます。 Read と Edit ルールの両方は、gitignore 仕様に従い、4 つの異なるパターンタイプがあります。
パターン意味マッチ
//pathファイルシステムルートからの絶対パスRead(//Users/alice/secrets/**)/Users/alice/secrets/**
~/pathホームディレクトリからのパスRead(~/Documents/*.pdf)/Users/alice/Documents/*.pdf
/pathプロジェクトルートからの相対パスEdit(/src/**/*.ts)<project root>/src/**/*.ts
path または ./path現在のディレクトリからの相対パスRead(*.env)<cwd>/*.env
/Users/alice/file のようなパターンは絶対パスではありません。プロジェクトルートからの相対パスです。絶対パスには //Users/alice/file を使用してください。
例。
  • Edit(/docs/**): <project>/docs/ での編集(/docs/ ではなく、<project>/.claude/docs/ でもありません)
  • Read(~/.zshrc): ホームディレクトリの .zshrc を読み取ります
  • Edit(//tmp/scratch.txt): 絶対パス /tmp/scratch.txt を編集します
  • Read(src/**): <current-directory>/src/ から読み取ります
gitignore パターンでは、* は単一のディレクトリ内のファイルをマッチさせ、** はディレクトリ全体で再帰的にマッチさせます。すべてのファイルアクセスを許可するには、括弧なしでツール名を使用します。ReadEdit、または Write

WebFetch

  • WebFetch(domain:example.com) は example.com へのフェッチリクエストをマッチさせます

MCP

  • mcp__puppeteerpuppeteer サーバーによって提供されるツール(Claude Code で設定された名前)をマッチさせます
  • mcp__puppeteer__* ワイルドカード構文は、puppeteer サーバーからのすべてのツールもマッチさせます
  • mcp__puppeteer__puppeteer_navigatepuppeteer サーバーによって提供される puppeteer_navigate ツールをマッチさせます

Agent(subagents)

Agent(AgentName) ルールを使用して、Claude が使用できる subagents を制御します。
  • Agent(Explore) は Explore subagent をマッチさせます
  • Agent(Plan) は Plan subagent をマッチさせます
  • Agent(my-custom-agent)my-custom-agent という名前のカスタム subagent をマッチさせます
これらのルールを設定の deny 配列に追加するか、--disallowedTools CLI フラグを使用して特定のエージェントを無効にします。Explore エージェントを無効にするには。
{
  "permissions": {
    "deny": ["Agent(Explore)"]
  }
}

フックで権限を拡張する

Claude Code フックは、実行時に権限評価を実行するカスタムシェルコマンドを登録する方法を提供します。Claude Code がツール呼び出しを行うと、PreToolUse フックは権限システムの前に実行され、フック出力は権限システムの代わりにツール呼び出しを承認または拒否するかどうかを決定できます。

作業ディレクトリ

デフォルトでは、Claude は起動されたディレクトリ内のファイルにアクセスできます。このアクセスを拡張できます。
  • 起動時--add-dir <path> CLI 引数を使用します
  • セッション中/add-dir コマンドを使用します
  • 永続的な設定設定ファイルadditionalDirectories に追加します
追加ディレクトリ内のファイルは、元の作業ディレクトリと同じ権限ルールに従います。プロンプトなしで読み取り可能になり、ファイル編集権限は現在の権限モードに従います。

権限がサンドボックスとどのように相互作用するか

権限とサンドボックスは、補完的なセキュリティレイヤーです。
  • 権限は、Claude Code が使用できるツール、およびアクセスできるファイルまたはドメインを制御します。すべてのツール(Bash、Read、Edit、WebFetch、MCP など)に適用されます。
  • サンドボックスは、Bash ツールのファイルシステムとネットワークアクセスを制限する OS レベルの強制を提供します。Bash コマンドとその子プロセスにのみ適用されます。
防御を深くするために両方を使用します。
  • 権限 deny ルールは、Claude が制限されたリソースへのアクセスを試みることさえ防止します
  • サンドボックス制限は、プロンプトインジェクションが Claude の意思決定をバイパスしても、Bash コマンドが定義された境界外のリソースに到達することを防止します
  • サンドボックス内のファイルシステム制限は、Read と Edit deny ルールを使用し、別のサンドボックス設定は使用しません
  • ネットワーク制限は、WebFetch 権限ルールとサンドボックスの allowedDomains リストを組み合わせます

管理設定

Claude Code 設定の一元的な制御が必要な組織の場合、管理者はユーザーまたはプロジェクト設定でオーバーライドできない管理設定をデプロイできます。これらのポリシー設定は通常の設定ファイルと同じ形式に従い、MDM/OS レベルのポリシー、管理設定ファイル、またはサーバー管理設定を通じて配信できます。配信メカニズムとファイルの場所については、設定ファイルを参照してください。

管理のみの設定

一部の設定は管理設定でのみ有効です。
設定説明
disableBypassPermissionsModebypassPermissions モードと --dangerously-skip-permissions フラグを防止するために "disable" に設定します
allowManagedPermissionRulesOnlytrue の場合、ユーザーおよびプロジェクト設定が allowask、または deny 権限ルールを定義することを防止します。管理設定のルールのみが適用されます
allowManagedHooksOnlytrue の場合、ユーザー、プロジェクト、およびプラグインフックの読み込みを防止します。管理フックと SDK フックのみが許可されます
allowManagedMcpServersOnlytrue の場合、管理設定からの allowedMcpServers のみが尊重されます。deniedMcpServers はすべてのソースからマージされます。管理 MCP 設定を参照してください
blockedMarketplacesマーケットプレイスソースのブロックリスト。ブロックされたソースはダウンロード前にチェックされるため、ファイルシステムに触れることはありません。管理マーケットプレイス制限を参照してください
sandbox.network.allowManagedDomainsOnlytrue の場合、管理設定からの allowedDomainsWebFetch(domain:...) allow ルールのみが尊重されます。許可されていないドメインはユーザーに促すことなく自動的にブロックされます。拒否されたドメインはすべてのソースからマージされます
strictKnownMarketplacesユーザーが追加できるプラグインマーケットプレイスを制御します。管理マーケットプレイス制限を参照してください
allow_remote_sessionstrue の場合、ユーザーがリモートコントロールウェブセッションを開始できます。デフォルトは true です。リモートセッションアクセスを防止するには false に設定します

設定の優先順位

権限ルールは、他のすべての Claude Code 設定と同じ設定優先順位に従います。
  1. 管理設定。コマンドライン引数を含む他のレベルでオーバーライドできません
  2. コマンドライン引数。一時的なセッションオーバーライド
  3. ローカルプロジェクト設定.claude/settings.local.json
  4. 共有プロジェクト設定.claude/settings.json
  5. ユーザー設定~/.claude/settings.json
ツールがいずれかのレベルで拒否されている場合、他のレベルはそれを許可できません。たとえば、管理設定 deny は --allowedTools でオーバーライドできず、--disallowedTools は管理設定が定義する内容を超えて制限を追加できます。 権限がユーザー設定で許可されているがプロジェクト設定で拒否されている場合、プロジェクト設定が優先され、権限はブロックされます。

設定例

このリポジトリには、一般的なデプロイメントシナリオのスターター設定が含まれています。これらを出発点として使用し、ニーズに合わせて調整してください。

関連項目

  • 設定。権限設定テーブルを含む完全な設定リファレンス
  • サンドボックス。Bash コマンドの OS レベルのファイルシステムとネットワーク分離
  • 認証。Claude Code へのユーザーアクセスを設定します
  • セキュリティ。セキュリティ保護とベストプラクティス
  • フック。ワークフローを自動化し、権限評価を拡張します