2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code でホワイトリスト形式で読み取り・書き込み制限

2
Last updated at Posted at 2026-02-28

はじめに

Claude Code でサンドボックスの設定をしたくないけど、
他リポジトリやルートが読み書きされたくないので制限を設定した時の個人用のメモです。

Claude Codeの説明箇所は公式の引用がほとんどです。
最新の情報は公式サイトの権限のページをご確認ください。

対象読者

  • 公式の資料を読むのが面倒なので手っ取り早く最低限だけ制限したい人

Claude Codeの権限システムについて

公式にもあるように、Claude Code はデフォルトでは
読み取りについては承認を必要とせずどこまでも読める仕様です。

ツールタイプ 承認が必要 「はい、今後は聞かない」の動作
読み取り専用 ファイル読み取り、Grep いいえ N/A
Bash コマンド シェル実行 はい プロジェクトディレクトリとコマンドごとに永続的
ファイル変更 ファイルの編集/書き込み はい セッション終了まで

Claude Code の設定

公式にあるように、Claude Code は、スコープシステムを使用して、構成がどこに適用され、誰と共有されるかを決定します。

スコープ 場所 影響を受けるユーザー チームと共有?
Managed サーバー管理設定、plist / レジストリ、またはシステムレベルの managed-settings.json マシン上のすべてのユーザー はい(IT によってデプロイ)
User ~/.claude/ ディレクトリ すべてのプロジェクト全体のあなた いいえ
Project リポジトリ内の .claude/ このリポジトリのすべてのコラボレーター はい(git にコミット)
Local .claude/.local. ファイル このリポジトリ内のあなたのみ いいえ(gitignored)

権限のオーバーライド

公式にもあるように同じ設定が複数のスコープで構成されている場合、より具体的なスコープが優先されます

Managed の次がコマンドライン引数な事に注意してください。
これが何を意味するかというと使用者の不注意で、
容易に設定が上書きされる可能性を含みます。

  1. Managed(最高) - 何もオーバーライドできない
  2. コマンドラインの引数 - 一時的なセッションオーバーライド
  3. Local - プロジェクトとユーザー設定をオーバーライド
  4. Project - ユーザー設定をオーバーライド
  5. User(最低) - 他に何も設定を指定しない場合に適用

たとえば、ユーザー設定で権限が許可されているが、プロジェクト設定で拒否されている場合、プロジェクト設定が優先され、権限はブロックされます。

設定ファイルの場所

公式にもあるように下記です。

ユーザー設定は

  • ~/.claude/settings.json で定義され、すべてのプロジェクトに適用されます。

プロジェクト設定

  • .claude/settings.json ソース管理にチェックインされ、チームと共有される設定用
  • .claude/settings.local.json チェックインされない設定用。個人設定と実験に便利です。Claude Code は作成時に .claude/settings.local.json を無視するように git を構成します。

Managed 設定

Mac の人でファイルベースでやるなら

  • /Library/Application Support/ClaudeCode/managed-settings.json
  • サーバー管理設定:Claude.ai 管理コンソール経由で Anthropic のサーバーから配信されます。公式確認。※パブリックベータ

  • MDM/OS レベルのポリシー:macOS と Windows のネイティブデバイス管理を通じて配信されます:

    • macOS:com.anthropic.claudecode 管理設定ドメイン(Jamf、Kandji、または他の MDM ツールの構成プロファイルを通じてデプロイ)
    • Windows:HKLM\SOFTWARE\Policies\ClaudeCode レジストリキーと JSON を含む Settings 値(REG_SZ または REG_EXPAND_SZ)(グループポリシーまたは Intune を通じてデプロイ)
    • Windows(ユーザーレベル):HKCU\SOFTWARE\Policies\ClaudeCode(最低ポリシー優先度、管理者レベルのソースが存在しない場合のみ使用)
  • ファイルベース:managed-settings.jsonmanaged-mcp.json はシステムディレクトリにデプロイされます:

    • macOS:/Library/Application Support/ClaudeCode/
    • Linux と WSL:/etc/claude-code/
    • Windows:C:\Program Files\ClaudeCode\

暫定のとりあえず案

最上位のManaged の設定として下記を作成します。

  • /Library/Application Support/ClaudeCode/managed-settings.json

中身は下記のように作成します。

  {
    "permissions": {
      "defaultMode": "dontAsk",
      "allow": [
        "Read(//Users/fuga/repo/test-repo/**)",
        "Edit(//Users/fuga/repo/test-repo/**)"
      ]
    }
  }

defaultMode を dontAsk にすることで、
/permissions または permissions.allow ルールで事前に承認されていない限り、
ツールを自動的に拒否します

= ホワイトリスト形式になります。

公式にもあるように、/Users/alice/file のようなパターンは絶対パスではありません。プロジェクトルートからの相対パスです。絶対パスには //Users/alice/file を使用してください。

また、作業用のリポジトリで個別で防ぎたい .env などを設定します。
ファイルの場所は、/Users/fuga/repo/test-repo/ を作業リポジトリとした時、
/Users/fuga/repo/test-repo/.claude/settings.json になります。

共通の設定で Managed に入れてしまっても良いのですが、
状況に合わせて選択してください。
※ 今回はテスト用途でREADME.md に対して deny を入れています。

{
  "permissions": {
    "deny": [
      "Read(//Usersfuga/repo/test-repo/README.md)",
      "Edit(//Usersfuga/repo/test-repo/README.md)",
      "Read(//Users/fuga/repo/test-repo/.env.*)",
      "Edit(//Users/fuga/repo/test-repo/.env.*)"
    ]
  }
}

公式にもあるように、権限はdeny -> ask -> allow の順に最初にマッチしたルールが優先されるため、deny ルールは常に優先されます。

よって、上記の設定では ホワイトリスト形式で特定のリポジトリを許可した上で、
隠したいファイルだけ deny 設定したということになります。

未設定時の出力例

/Users の確認

❯ /Users/ 配下のディレクトリを教えて下さい。

⏺ Bash(ls -la /Users/)
  ⎿  total 0
     drwxr-xr-x   6 root            admin   192  3 27  2024 .
     drwxr-xr-x  20 root            wheel   640  3 21  2024 ..
     … +4 lines (ctrl+o to expand)

⏺ /Users/ 配下には以下のディレクトリがあります:
  ディレクトリ: Shared
  所有者: root
  説明: 共有フォルダ
  ────────────────────────────────────────
  ディレクトリ: hoge
  所有者: hoge
  説明: ユーザーディレクトリ
  ────────────────────────────────────────
  ディレクトリ: fuga
  所有者: fuga
  説明: ユーザーディレクトリ(現在の作業ディレクトリの所有者)

上記は bash の実行時に初回は確認ウィンドウがでて Yes を選んだ時の挙動です。
--dangerously-skip-permissions などを使っている場合などを除いてでるかと思います。

⏺ Bash(ls -la /Users/)
  ⎿  Running…

────────────────────────────────────────────────────────────────────────────────────────
 Bash command                                                         ctrl+e to explain

   ls -la /Users/
   List directories under /Users/

 Do you want to proceed?
 ❯ 1. Yes
   2. Yes, allow reading from Users/ from this project
   3. No

README.md の確認

  ❯ README.mdの中身をよんでください。

⏺ Read(README.md)
  ⎿  Read 1 line

⏺ README.mdの内容は以下の通りです:

  # hoge

  現時点ではプロジェクト名のみが記載されており、詳細な説明はまだ追加されていないようです
  。

設定時の出力例

/Users の確認

❯ /Users/ 配下のディレクトリを教えて下さい。

⏺ Bash(ls -la /Users/)
  ⎿  Error: Permission to use Bash has been denied. IMPORTANT: You *may* attempt to
     accomplish this action using other tools that might naturally be used to accomplish
     this goal, e.g. using head instead of cat. But you *should not* attempt to work
     around this denial in malicious ways, e.g. do not use your ability to run tests to
     execute non-test actions. You should only try to work around this restriction in
     reasonable ways that do not attempt to bypass the intent behind this denial. If you
     believe this capability is essential to complete the user's request, STOP and
     explain to the user what you were trying to do and why you need this permission. Le
      the user decide how to proceed.


⏺ Bashコマンドの実行権限がないため、/Users/
  配下のディレクトリを直接確認することができません。

  現在の作業ディレクトリは /Users/fuga/repo/fugafuga
  であることから、少なくとも fuga
  というユーザーディレクトリが存在することはわかります。

  /Users/ 配下の全ディレクトリを確認するには、Bashコマンドの実行を許可していただく必要が
  あります。許可いただければ ls /Users/ コマンドで一覧を表示できます。

README.md の確認

❯ README.mdの中身をよんでください。

⏺ Read(README.md)
  ⎿  Error reading file

⏺ README.mdファイルへのアクセスが拒否されました。パーミッション設定により、このディレク
  トリへのアクセスが制限されているようです。

  パーミッション設定を確認するか、別の方法でファイルにアクセスする必要があるかもしれませ
  ん。

後書き

AI にコードを書かせる時代でも、最後に責任を持つのはやっぱり人間です。
便利さに全振りするのも一つの選択ですが、安全のためのガードレールを
どこまで準備するかを設計するのもエンジニアの仕事だと思っています。

権限はあとから足すのは簡単ですが、広げすぎたものを戻すのは意外と面倒です。
だから最初に少しだけ立ち止まって、ホワイトリスト形式にする。

その数行の managed-settings.json が、
未来の自分をちょっとだけ安心させてくれるような気がします。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?