Claude Code の bypassPermissions を安全に使える条件
--dangerously-skip-permissions と bypassPermissions モードで何が無効になるのか、公式が示す隔離環境・非 root・egress 制限の条件、それでも残るリスクと代替手段を整理します。
--dangerously-skip-permissions は確認プロンプトを消せますが、公式ドキュメントが示す使用条件ははっきりしています。コンテナ、VM、dev container のような隔離環境で、Claude Code がホストを壊せない状況でのみ使うことです。
普段の開発マシンで常用する設定ではありません。このモードで何が無効になり、何が残るのかを整理します。
KEY POINT
この記事で分かること
- bypassPermissions で無効になるものと、それでも止まるもの
- 有効化の条件と、root では起動できない仕様
- 隔離環境でも残るリスクと、代わりに使える手段
無効になるもの、それでも止まるもの
bypassPermissions は権限プロンプトと安全チェックを無効にし、ツール呼び出しを即座に実行します。通常は自動承認されない protected paths への書き込みも実行されます。
ただし、すべてが素通りになるわけではありません。公式ドキュメントは「どのモードでも自動承認しない操作」を挙げています。
| 分類 | bypassPermissions での扱い |
|---|---|
| deny ルールに一致するツール | ブロックされる |
| allow ルール | 効果がない |
| 明示的な ask ルールに一致するツール | 確認される |
AskUserQuestion と requiresUserInteraction の MCP ツール | 確認される |
critical path を対象にした rm / rmdir | 確認される |
| クロスセッションメッセージの安全策 2 つ | 適用される |
blockReadsOutsideWorkingDirectories が有効なときの作業ディレクトリ外の読み取り | 確認される(v2.1.257 以降) |
-p の非対話実行では、これらの「確認されるはずの呼び出し」は確認の代わりに拒否されます。
プロンプトインジェクション対策にはならない
公式ドキュメントは、bypassPermissions がプロンプトインジェクションや意図しない操作に対する保護を提供しないと明記しています。プロンプトを減らしたいだけなら、分類器が実行前に判定する auto モードを検討してください。
有効化の条件
このモードは、有効にせずに開始したセッションからは入れません。起動時に決める必要があります。
claude --permission-mode bypassPermissions
claude --dangerously-skip-permissions
2 つのコマンドは等価です。設定から有効にする場合は permissions.defaultMode に "bypassPermissions" を指定しますが、効くのはユーザー設定、--settings、管理者設定だけです。プロジェクトの .claude/settings.json と .claude/settings.local.json に書いても効かず、セッションは Manual モードで始まります。Claude Code on the web も設定ファイルからのこのモードを無視します。
そのほかに、次の制約があります。
- 初回の対話セッションでは、責任を引き受けるかを尋ねる警告ダイアログが出ます。承諾はユーザー設定に保存され、次回以降は出ません。拒否すると Claude Code は終了します。
- 非対話モードではダイアログが出ません。
--bgのバックグラウンドセッションは、対話セッションで一度承諾するまで拒否されます。 - Linux と macOS では、root または
sudoで実行すると起動を拒否し、--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasonsというメッセージを出します。このチェックは、認識済みのサンドボックス内では自動的にスキップされます。 --restrictedを付けて開始したセッションでは、このモードは拒否されます(v2.1.248 以降)。
公式が示す安全に使える条件
次の条件がそろった環境が前提です。
- 隔離されていること: コンテナ、VM、または sandbox runtime。ホストのシステムを壊せないこと。
- 非 root で動かすこと: dev container 構成は Claude Code を非 root ユーザーで実行します。
remoteUserが非 root アカウントかを確認します。 - ネットワーク egress を絞ること: 参照実装の dev container には
init-firewall.shが含まれ、許可した宛先だけに送信を制限します。ファイアウォールの実行にはNET_ADMINとNET_RAWの権限が必要です。 - 信頼できるリポジトリだけで使うこと: 公式は、信頼できるリポジトリでのみ使い、Claude の動きを監視するよう求めています。
コンテナでも防げないこと
公式ドキュメントは、--dangerously-skip-permissions で実行した場合、dev container は悪意あるプロジェクトがコンテナ内でアクセスできるものを持ち出すことを防がないと明記しています。これには ~/.claude の認証情報が含まれます。~/.ssh やクラウド認証ファイルをマウントせず、リポジトリスコープや短命のトークンを使ってください。バインドマウントしたワークスペースがホスト上のファイルそのものである点にも注意が必要です。
代わりに検討する手段
プロンプトを減らす目的なら、公式は用途ごとの組み合わせを示しています。
| やりたいこと | 使うもの | 必要な隔離 |
|---|---|---|
| 安全チェックを残してプロンプトを減らす | auto モード | 不要(サンドボックスやコンテナは多層防御になる) |
| CI で許可リストを厳密に決めて動かす | --permission-mode dontAsk と --allowedTools | CI ランナーが提供する範囲 |
| ローカルで分類器を使わずプロンプトを減らす | Manual モード + Bash サンドボックスの auto-allow | 組み込みの Bash サンドボックス |
| コンテナ内で完全に無人実行する | claude -p "<prompt>" --dangerously-skip-permissions | コンテナ、VM、または sandbox runtime |
組織として使わせたくない場合は、permissions.disableBypassPermissionsMode を "disable" にします。管理者設定に置くのが一般的ですが、どのスコープからでも動くため、自分のユーザー設定に書いて自分を締め出すこともできます。
モードごとの違いは defaultMode 4 種類の違いと選び方、非対話実行の組み立ては claude -p で CI やスクリプトから使う にあります。ルール設計全体は親記事の settings.json で permissions を設計する を参照してください。
まとめ
--dangerously-skip-permissionsは--permission-mode bypassPermissionsと等価で、起動時にしか有効にできない- deny ルール、ask ルール、critical path への
rmなどは、このモードでも止まる - Linux と macOS では root や
sudoでは起動できず、非 root ユーザーでの実行が前提になる - 公式の条件は、隔離環境・非 root・egress 制限・信頼できるリポジトリの 4 点
- コンテナでも認証情報の持ち出しは防げず、プロンプト削減が目的なら auto モードを先に検討する
よくある質問
- --dangerously-skip-permissions と bypassPermissions は違うものですか?
- 同じものです。公式ドキュメントは --dangerously-skip-permissions を --permission-mode bypassPermissions と等価だと説明しています。
- セッションの途中で bypassPermissions に切り替えられますか?
- できません。有効にせずに開始したセッションからは入れません。起動時のフラグか、ユーザー設定・--settings・管理者設定の defaultMode で有効にする必要があります。
- bypassPermissions でも deny ルールは効きますか?
- 効きます。deny ルールは bypassPermissions を含むすべてのモードでブロックします。逆に allow ルールは bypassPermissions では効果がありません。
参考にした一次情報
この記事は公式ドキュメントを基に AI が下書きを作成し、運営者が内容を確認して公開しています。誤りを見つけた場合はお問い合わせからお知らせください。