0
1

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のsettings.jsonは作ろう(denyルール)

Posted at

はじめに

どうも、水無月せきなです。
遅まきながらClaude Codeを使い始めて、ふと気になりました。

.envとかリポジトリにあるけど、読まれるのかな?」

気になったからには、ちょっと調べてみましょう。

先に結論

デフォルトだと機密ファイル(.envなど)を読み取れるので、.claude/settings.json を作成して機密ファイルの読み書きをdenyに指定しましょう

読み取りを阻止する設定

とりあえず、.env.env.localといったファイルの読み取りを阻止する場合は下記のようになります。

.claude/settings.json
{
    "permissions": {
      "allow": [
      ],
      "deny": [
        "Read(.env*)"
      ]
    }
}

調査

試しに、下記のファイルを作ってみます。

.env.local
SAMPLE="test!"

Claude Codeに上記のファイルの内容を教えてもらいます。

.env.localの読み取り
> .env.localの内容を教えて

● Read(.env.local)
  ⎿  Read 1 line (ctrl+r to expand)

● .env.localにはSAMPLE="test!"が含まれています。

ファイルの内容を読み取れました。

今度は、下記のファイルを用意しましょう。

.env
ENVIRONMENT=DEV
.envの読み取り
> .env.の内容を教えて

● Read(.env)
  ⎿  Read 1 line (ctrl+r to expand)

● .envにはENVIRONMENT=DEVが含まれています。

ファイルの内容が返ってきました。

今度は、.claude/settings.jsonを作成します。

.claude/settings.json
{
    "permissions": {
      "allow": [
      ],
      "deny": [
        "Read(.env*)"
      ]
    }
  }

作成後、一度Claude Codeのセッションを開き直します。

Claude Codeを開き直す
# ここはClaude Codeの中で実行
/exit

# もう一度開く
claude

そして、さっきと同じように聞いてみましょう。

.env.localの読み取り
> .env.localの内容を教えて

● Read(.env.local)
  ⎿  Error: Permission to read /workspaces/LangChain-ChatApp/.env.local has been denied.

● .env.localファイルを読み取る権限がありません。ファイルの権限やアクセス設定を確認してください。

読み取りに失敗しました。

.envの読み取り
> .env.の内容を教えて

● Read(.env)
  ⎿  Error: Permission to read /workspaces/LangChain-ChatApp/.env has been denied.

● .envファイルを読み取る権限がありません。セキュリティ上、環境変数ファイルへのアクセスが制限されています。

こちらも失敗しました。

結果

条件 結果
denyなし 読み取れる
"deny": ["Read(.env*)"] 読み取れない

補足

Cursorは?

Cursorは.cursorignoreをルートディレクトリに作ることで制御できます。

ただ、**/.envといった機密ファイルは読み取れないようにグローバルで設定されています。

image.png

この点は安心ですね。

まとめ

ということで、Claude Codeはデフォルトの状態だと.envといった機密ファイルを読み取れるので、セキュリティを気にする場合は.claude/settings.jsondenyを指定した方が良いでしょう。

既に包括的なdenyルールを公開されている方がいらっしゃったので、その方の記事と、ほんの少しだけ修正したルールを掲載して終わりにしたいと思います。

ここまでお読みいただき、ありがとうございました。

.claude/settings.json

元記事だと"Read(.env.*)"となっている箇所を"Read(.env*)"に変えました。
.envの読み取りを止められなかったからです。

.claude/settings.json
{
  "permissions": {
    "allow": [
    ],
    "deny": [
      "Bash(sudo:*)",
      "Bash(rm:*)",
      "Bash(rm -rf:*)",
      "Bash(git push:*)",
      "Bash(git commit:*)",
      "Bash(git reset:*)",
      "Bash(git rebase:*)",
      "Read(.env*)",
      "Read(id_rsa)",
      "Read(id_ed25519)",
      "Read(**/*token*)",
      "Read(**/*key*)",
      "Write(.env*)",
      "Write(**/secrets/**)",
      "Bash(curl:*)",
      "Bash(wget:*)",
      "Bash(nc:*)",
      "Bash(npm uninstall:*)",
      "Bash(npm remove:*)",
      "Bash(psql:*)",
      "Bash(mysql:*)",
      "Bash(mongod:*)",
      "mcp__supabase__execute_sql"
    ]
  },
}

参考文献

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?