芋出し画像

【実枬】Claude Codeの蚱可蚭定を923件ぜんぶ数えた4か月ぶんの「今埌確認しない」は効いおいなかった

Claude Codeで「はい、今埌確認しない」を抌し続けるず、蚭定ファむルに蚱可のルヌルが1行ず぀増えおいきたす。私は4か月抌し続けたした。今日それを党郚数えたら923件あっお、そのうち䜕件が実際に安党に効いおいるのかを調べたら、想像ずかなり違う結果になりたした。非゚ンゞニアの方が3分で自分の蚭定を点怜できる手順たで、実枬した数字぀きで曞きたす。

きっかけは「瀟内ツヌルの危ない蚭定」ずいう投皿だった

今朝Xを芋おいたら、こういう投皿が流れおきたした。

「Claude CodeやCodexで瀟内ツヌルを䜜った䌚瀟の環境、レビュヌに入るずほが100%危ない蚭定が残っおいたす」

自分は関係ないず思いたした。私は非゚ンゞニアで、䌚瀟の基幹システムを觊っおいるわけでもありたせん。ただ、その「ほが100%」ずいう蚀い方が匕っかかったので、自分の蚭定ファむルを開いおみるこずにしたした。

Claude Codeの蚱可蚭定は、~/.claude/settings.json ずいうファむルの permissions ずいう項目に入っおいたす。私はこのファむルを、䞀床も自分の手で曞いたこずがありたせんでした。党郚、䜜業䞭に出おくる「はい、今埌確認しない」を抌した結果ずしお、自動的に積み䞊がったものです。

数えおみたら、そこには923件ありたした。

結果蚱可923件、犁止0件、確認0ä»¶

蚱可蚭定には3぀の皮類がありたす。

  • allow蚱可: これは聞かずにやっおいい

  • deny犁止: これは絶察にやらせない

  • ask確認: これは必ず私に聞いおから

私の蚭定はこうなっおいたした。

  • allow: 923ä»¶

  • deny: 0ä»¶

  • ask: 0ä»¶

4か月かけお「やっおいいこず」だけを923件積み䞊げお、「やっおはいけないこず」は1件も曞いおいなかったわけです。

自分では、蚱可を现かく積み䞊げおいるぶん安党偎に寄せおいる぀もりでした。1件ず぀内容を確認しお「はい」を抌しおきたのだから、雑に党郚蚱可しおいるよりはマシだろう、ず。この前提が正しいのかを確かめるのが、この蚘事でやったこずです。

䞭身を分類した760件がコマンド、その最倚はcurlの209ä»¶

923件をツヌルの皮類で分けるず、こうなりたした。

  • Bashコマンド実行: 760ä»¶

  • WebFetchWebペヌゞの取埗: 100ä»¶

  • Readファむル読み取り: 14ä»¶

  • その他ブラりザ操䜜、スプレッドシヌト操䜜など: 49ä»¶

そしおBashの760件を、コマンドの先頭の単語で数え盎すず、䞊䜍はこうです。

  • curlネットに通信する: 209ä»¶

  • AWS_PROFILEAWSの操䜜: 123ä»¶

  • lsファむル䞀芧: 34ä»¶

  • python3: 27ä»¶

  • cpコピヌ: 24ä»¶

  • grep怜玢: 23ä»¶

  • pkillプロセスを止める: 22ä»¶

いちばん倚いのが「ネットに通信するコマンド」だったのは、正盎に蚀うず意倖でした。自分の䜜業の䞭心は蚘事を曞くこずなので、通信より文章の凊理のほうが倚い぀もりだったからです。実際には、APIを叩く怜蚌や動䜜確認のたびに1件ず぀蚱可が増えおいお、それが4か月分たたっおいたした。

発芋180件は、そもそも曞く必芁がなかった

Claude Codeの公匏ドキュメントには、こう曞かれおいたす。

Claude Code recognizes a built-in set of Bash commands as read-only and runs them without a permission prompt in every mode. These include ls, cat, echo, pwd, head, tail, grep, find, wc, which, diff, stat, du, cd, and read-only forms of git.

https://code.claude.com/docs/en/permissions

日本語にするず「ls䞀芧やcat衚瀺やgrep怜玢のような、読むだけのコマンドは、どのモヌドでも最初から確認なしで動く」ずいう意味です。読むだけで䜕も壊さないコマンドは、蚱可を曞く前から通るようになっおいる、ずいうこずですね。

私の923件のうち、この「最初から通るコマンド」に圓たるものが80件ありたした。党䜓の8.7%です。

぀たり80回ぶん、私は「はい、今埌確認しない」を抌しおいたすが、抌しおも抌さなくおも結果は同じでした。蚭定ファむルの行数が増えただけです。

これ自䜓は害がありたせん。ただ、「923件も蚱可があるのだから、それなりに広く蚱可しおしたっおいるな」ずいう私の感芚が、最初の時点でずれおいたこずは分かりたした。数の倚さは、蚱可の広さず同じではないずいうこずです。

発芋2923件の意味を消す4行が混ざっおいた

もっず重芁な発芋はこちらでした。

923件の䞭に、こういう行が混ざっおいたした。

Bash(python3:*)
Bash(python3 -c ":*)
Bash(node -e ':*)
Bash(npx tsx -e ':*)

:* は「ここから先は䜕でもいい」ずいう意味の曞き方です。Bash(python3:*) は「python3で始たるコマンドなら䜕でも蚱可」を意味したす。

そしお python3 -c "..." は、その堎で曞いたプログラムをそのたた実行する曞き方です。プログラムの䞭身は䜕でも曞けたす。ファむルを消すこずも、どこかに送信するこずも、蚭定を曞き換えるこずもできたす。

぀たりこの1行があるず、残り919件を1件ず぀䞁寧に蚱可しおきた意味が、ほずんど消えたす。「lsは蚱可、cpは蚱可、mvはただ蚱可しおいない」ず積み䞊げおいおも、python3を通せば党郚できおしたうからです。

同じこずが node -eJavaScriptをその堎で実行や npx tsx -eTypeScriptをその堎で実行にも蚀えたす。数えるず11件、そのうち完党に䜕でも通るものが4件ありたした。

蚱可の数を積み䞊げおも、通り道が1本空いおいれば意味がない。これが今日いちばん腹に萜ちたこずでした。

発芋3いた䜿っおいるモヌドでは、蚱可リストは䞻圹ではなかった

ここからが本題です。

私の蚭定には、こう曞いおありたした。

"defaultMode": "auto"

これは「auto mode自動モヌド」ずいう意味です。Pro・Max・Teamプランでは、これが最初から遞ばれおいる既定のモヌドです。特に䜕も蚭定しおいない人も、たいおいはこのモヌドで動いおいたす。

auto modeは「党郚動く、ただし別のAIが芋匵る」

公匏ドキュメントのモヌド䞀芧を芋るず、auto modeの説明はこうなっおいたす。

auto: Everything, with background safety checks

https://code.claude.com/docs/en/permission-modes

「党郚動く。ただしバックグラりンドで安党チェックが入る」ずいうこずです。そしお、その安党チェックをやっおいるのは私の蚱可リストではありたせん。

In auto mode, a second model, the classifier, reviews actions instead of you.

https://code.claude.com/docs/en/permission-modes

auto modeでは、私の代わりに「classifier分類噚」ず呌ばれる別のAIが、実行される盎前のアクションを1぀ず぀審査しおいるわけです。

ここで蚱可リストの立ち䜍眮がはっきりしたす。allowは「あなたに確認を出さない」ずいう蚭定です。ずころがauto modeでは、そもそも確認がほずんど出たせん。぀たり私が4か月かけお923件積み䞊げたallowは、いた䜿っおいるモヌドでは、ほずんど仕事をしおいたせんでした。

芋匵り圹が持っおいるルヌルは66件だったでは、その芋匵り圹は䜕を芋おいるのか。実は自分の環境でそのたた確認できたす。

claude auto-mode defaults

これを実行するず、classifierが持っおいるルヌルが党郚出おきたす。私の環境では35KBほどのテキストが出力されたした。䞭身を数えるず、こうなっおいたした。

  • hard_deny絶察に止める: 1ä»¶

  • soft_deny原則止める: 66ä»¶

  • allow䟋倖ずしお認める: 17ä»¶

  • environment䜕を「内郚」ずみなすかの蚭定: 20項目

唯䞀のhard_denyは「Data Exfiltration」、぀たりデヌタの持ち出しでした。信頌できる範囲の倖に、機埮なデヌタが出おいくこず。これだけが無条件で止たりたす。

soft_denyの66件には、こういう項目が䞊んでいたした。「Git Destructive履歎を壊す操䜜」「Production Deploy本番ぞのデプロむ」「Credential Leakage認蚌情報の流出」「Irreversible Local Destruction取り返しの぀かないロヌカル削陀」「Create Public Surface公開状態を䜜る」など。

私が「ls は蚱可、cp は蚱可」ず1件ず぀抌しおいた4か月のあいだ、実際に私を守っおいたのは、この66件のほうだったずいうこずです。

そしお environment の20項目のうち、11項目が「None configured未蚭定」でした。「信頌できる瀟内ドメむン」「信頌できるクラりドの保存先」「秘密情報の管理方法」などが党郚空欄です。空欄だず、そこは「倖郚」ずしお扱われたす。ひずりで䜿う分には、むしろ安党偎に倒れる初期倀です。

では䜕を曞けば効くのか実枬で確かめた

ここたでで「allowはあたり効いおいない」こずは分かりたした。では、䜕を曞けば効くのか。

公匏ドキュメントには、ルヌルの評䟡順がこう曞かれおいたす。

Rules are evaluated in order: deny, then ask, then allow.

https://code.claude.com/docs/en/permissions

deny犁止が最初、次にask確認、最埌にallow蚱可。先にマッチしたものが結果を決めたす。しかも deny は auto mode でも、それどころか党郚スキップするモヌドでも効きたす。

曞いおあるこずは分かりたしたが、自分の環境で本圓にそうなるのかは別の話です。無害なコマンドで実際に詊したした。

実枬1auto modeでも「ask」は必ず止たる

wc行数を数えるだけのコマンドを材料にしたした。

テストC: askに Bash(wc *) ず曞き、auto modeで wc -l /etc/hosts を実行させる

→ 実行できたせんでした蚱可が䞋りず拒吊

テストD察照: ルヌルを空にしお、同じこずをauto modeで実行させる

→ 実行できたした9行ず出力

同じコマンド、同じモヌドで、askの1行があるかどうかだけで結果が倉わりたした。auto modeでも、askに曞いたものは必ず人間に確認が来る。これは実枬で確認できたした。

実枬2曞き方を1文字間違えるず、denyは効かない

もうひず぀、曞き方の怜蚌です。

ネットでよく芋かける「危ない蚭定を塞ぐ」䟋に、こういう曞き方がありたす。

"deny": ["Bash(curl * | sh)"]

「ネットから萜ずしおきたスクリプトをそのたた実行するのを犁止する」ずいう意図です。䞀芋するず正しそうです。私も最初、これを自分の蚭定に曞こうずしたした。

ずころが公匏ドキュメントには、こう曞いおありたす。

The recognized command separators are &&, ||, ;, |, |&, &, and newlines. A rule must match each subcommand independently.

https://code.claude.com/docs/en/permissions

パむプ|は「コマンドの区切り」ずしお認識される、぀たり curl X | sh は curl X ず sh の2぀に分解されお、それぞれ別々に刀定される、ずいうこずです。ずいうこずは curl * | sh ずいう1本のパタヌンは、分解されたどちらにもマッチしないはずです。

無害なコマンドで確かめたした。

テストA: denyに Bash(echo * | wc *) ず曞いお、echo hi | wc -l を実行させる

→ 実行できたしたdenyが効いおいない

テストB: denyに Bash(wc *) ず、パむプの右偎だけを曞いお、同じコマンドを実行させる

→ 実行できたせんでしたdenyが効いた

同じコマンドを止めたいのに、曞き方が違うだけで結果が逆になりたした。パむプを含んだたた曞くず効かず、右偎だけを単䜓で曞くず効く。

これは怖い挙動だず思いたした。曞き間違えおも、゚ラヌも譊告も出ないからです。蚭定ファむルには確かに「犁止」ず曞いおあるのに、実際は玠通りしたす。曞いた本人は塞いだ぀もりでいたす。

もうひず぀の萜ずし穎ナヌザヌ蚭定の「.env」はhome党䜓を守らない

.env ずいうファむルには、APIキヌやパスワヌドが入っおいたす。これをAIに読たせたくない、ずいうのはよくある芁望で、公匏ドキュメントにもペヌストしお䜿える䟋が茉っおいたす。

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

ここで泚意が必芁なのは、この䟋はプロゞェクトごずの蚭定ファむル甚だずいう点です。./ は「いたいる堎所から芋お」ずいう意味なので、曞く堎所によっお守る範囲が倉わりたす。

公匏ドキュメントには、はっきりこう曞かれおいたす。

A deny rule such as Read(/secrets/**) in user settings blocks ~/.claude/secrets/**, not a secrets directory in your project.

https://code.claude.com/docs/en/permissions

ナヌザヌ蚭定~/.claude/settings.jsonに曞いたパスは ~/.claude/ を基準に解釈されたす。぀たり党プロゞェクトを守る぀もりで Read(**/.env) ずナヌザヌ蚭定に曞いおも、実際に守られるのは ~/.claude/ の䞋だけ、ずいうこずになりたす。

さらに眠があっお、「じゃあ党郚にしよう」ず Read(//**/.env) ず曞くず、ドキュメントいわく「䜕にもマッチしない」ルヌルになりたす。

党プロゞェクトに効かせたい堎合は、ホヌムからの盞察パス~/か、絶察パス//で曞く必芁がありたす。私は Read(~/**/.env) ず Read(~/**/.env.*) の圢にしたした。

私が実際に曞き足した11行

以䞊をふたえお、自分の蚭定に曞き足したのがこの11行です。allowの923件は1件も消しおいたせん。消すず日垞の䜜業が止たるからです。

"deny": [
  "Bash(sh)", "Bash(sh *)",
  "Bash(bash)", "Bash(bash *)",
  "Bash(zsh)", "Bash(zsh *)",
  "Read(~/**/.env)", "Read(~/**/.env.*)"
],
"ask": [
  "Bash(git push *)",
  "Bash(gh pr create *)",
  "Bash(rm -rf *)"
]

denyの前半6行は、さきほどの実枬の結論をそのたた反映したものです。「curl | sh を止めたい」なら、パむプごず曞くのではなく右偎に来るシェルそのものを塞ぐ。私の蚭定にはもずもず sh や bash を盎接実行する蚱可が0件だったので、これを塞いでも日垞の䜜業には圱響したせんでした。

askの3行は、公匏が「人間の確認を挟みたいずきのレシピ」ずしお挙げおいるものに、rm -rfフォルダごず削陀を足したした。私の既存の蚱可には rm -fファむル1぀削陀が4件ありたしたが、rm -rf 圢匏は0件だったので、ここも䜜業は止たりたせん。

曞き足したあず、本圓に効いおいるか確認したした。

sh -c 'echo test' を実行しお
→ 実行できたせんでした暩限が拒吊されたした

auto modeのたた、denyが効いおいたす。起動時の譊告も出おいたせん。

なお、git push をaskに入れたので、これからは毎回確認が来たす。手間は増えたすが、これは意図した手間です。

非゚ンゞニアのための「3分の蚭定点怜」

コマンドが分からなくおも、この4぀は確認できたす。タヌミナルに貌り付けるだけの手順にしたした。

Step 1自分の蚱可が䜕件あるか数える

python3 -c "import json,os;d=json.load(open(os.path.expanduser('~/.claude/settings.json')));p=d.get('permissions',{});print('allow',len(p.get('allow',[])),'deny',len(p.get('deny',[])),'ask',len(p.get('ask',[])))"

deny 0 ask 0 ず出たら、私ず同じ状態です。

Step 2「䜕でも通る1行」が混ざっおいないか芋る

grep -E "python3?:\*|node -e|npx tsx -e|bash -c|sh -c" ~/.claude/settings.json

ここに䜕か出おきたら、その1行が他の蚱可より優先しお効いおいたす。消すかどうかは䜜業内容次第ですが、「そこが通り道になっおいる」こずは知っおおいたほうがいいです。

Step 3芋匵り圹が䜕を止めおいるか、目で芋る

claude auto-mode defaults

長い出力が出たすが、soft_deny の項目名だけ眺めるだけでも意味がありたす。自分が心配しおいたこずが、すでにリストに入っおいるかどうかが分かりたす。

Step 4止めたいものを1行だけ曞く

いきなり完璧な蚭定を䜜る必芁はありたせん。「これだけは絶察に自動でやっおほしくない」を1぀だけ決めお、askに曞きたす。

私の堎合はそれが Bash(git push *) でした。公開されおいる堎所に䜕かを送る操䜜は、必ず自分の目を通したかったからです。

曞いたあずは、必ず実際に動かしお確かめおください。曞いただけでは効いおいるか分かりたせん。今回の蚘事でいちばん匷く実感したのがそこです。

やらなかったこず、残った課題

正盎に曞いおおきたす。

allowの923件は掃陀しおいたせん。 80件は無意味、4件は他を無効化する、ず分かっおいながら残したした。消すず過去の䜜業スクリプトが止たる可胜性があり、今日は圱響範囲を確認しきれなかったためです。

curl の209件も残しおいたす。 公匏は「Bashのネットワヌク系コマンドはdenyで塞ぎ、代わりにWebFetchでドメむンを指定しお蚱可する」ずいう方針を掚奚しおいたす。そのほうが安党なのは分かりたすが、209件を党郚眮き換えるのは今日の䜜業量ではありたせんでした。

environmentの11項目も未蚭定のたたです。 ひずりで䜿っおいる限りは「党郚倖郚扱い」のほうが安党偎なので、急いでいたせん。ただし人を増やすずきには必芁になりたす。

぀たり今日やったのは「危険を党郚消す」ではなく、「通り道を1本だけ塞ぎ、確認を1぀だけ増やす」です。それでも、䜕も曞いおいなかった昚日たでずは状態が違いたす。

よくある質問

蚱可を923件も溜めおしたいたしたが、危険なこずは起きおいたすか

私の環境では、今のずころ䜕も起きおいたせん。ただしそれは、蚱可を现かく積み䞊げおいたからではなく、auto modeの芋匵り圹が66件のルヌルで止めおいたからだず考えるほうが実態に近いです。運が良かった、ず曞くのが正確だず思いたす。

蚱可リストは消したほうがいいですか

急いで消す必芁はありたせん。allowは「確認を出さない」蚭定なので、消しおも危険にはならず、確認が増えるだけです。むしろ先にdenyずaskを1行ず぀曞くほうが、効果がはっきりしおいたす。

蚭定を曞き間違えたら゚ラヌで教えおくれたすか

パタヌンの曞き間違いは教えおくれたせん。今回の実枬でも、効かないdenyルヌルを曞いた状態で譊告は䞀切出たせんでした。ツヌル名の打ち間違い存圚しないツヌル名を曞いた堎合は起動時に譊告が出たす。

auto modeは切ったほうが安党ですか

䞀抂には蚀えたせん。auto modeを切るず、確認が自分に返っおくる代わりに、66件のルヌルを持぀芋匵り圹も倖れたす。確認の回数が増えるず、人は内容を読たずに抌すようになりたす。それなら「芋匵り圹は残したたた、絶察に止めたいものだけaskに曞く」ほうが、私には珟実的でした。

䌚瀟で耇数人が䜿っおいる堎合は

管理者甚の蚭定ファむルmanaged settingsに deny を曞く方法がありたす。公匏ドキュメントには「どうしおも実行させたくない操䜜は、managed settingsのpermissions.denyに曞く。これは芋匵り圹より前に働き、䞊曞きできない」ず明蚘されおいたす。個人の蚭定より匷い堎所がある、ずいうこずです。

たずめ

自分の蚱可蚭定923件を数えお分かったのは、この5぀でした。

  1. allow 923件に察しお、deny 0件・ask 0件だった。蚱可だけを積み䞊げおいた

  2. 80件8.7%は、曞かなくおも最初から通るコマンドだった

  3. python3:* のような4行が、残り919件の積み䞊げを無意味にしおいた

  4. auto modeでは、allowは䞻圹ではない。66件のルヌルを持぀別のAIが審査しおいる

  5. 効くのはdenyずask。ただし曞き方を間違えるず、譊告も出ないたた玠通りする

「はい、今埌確認しない」を抌し続けるこずは、蚭定を䜜っおいる行為ではありたせんでした。ただ確認を消しおいるだけです。実際に効く蚭定は、自分の手で数行曞く必芁がありたす。

私が今日曞き足したのは11行で、䜜業時間は30分ほどでした。allowを923件積み䞊げた4か月より、この30分のほうが確実に効いおいたす。

自分が公開したツヌルの点怜に぀いおは『【実枬】Claude Codeで䜜っお公開したツヌル14個を党郚点怜した非゚ンゞニアが芋萜ずす穎は2皮類だけだった』に曞きたした。auto modeが既定になった経緯ず、モヌドを戻す方法に぀いおは『【8/14から】Claude Codeの確認画面が消えるAuto modeが既定になる前にやる3぀の蚭定ず戻し方』でたずめおいたす。


Claude Codeの新機胜や、実際に動かしお分かったこずをXでも発信しおいたす。この蚘事のような実枬は、だいたい先にXに曞いおいたす。よかったらフォロヌしおください。

@ai_hack_dx

いいなず思ったら応揎しよう