結論:修正内容と自社の許可境界は別に確認する
Claude Code 2.1.289は、managed machine上でuser-installed modの承認が、compound shell commandの内側にあるdeny・ask ruleを正しく維持しない問題を修正しました。同じchangelogには、環境変数のprefixの後ろにあるBash commandでdeny・askが抜けるケースや、symlink経由のRead denyに関する修正も記載されています。
これは「更新すれば全ての危険操作が止まる」という意味ではありません。Anthropic公式のClaude Code changelogで修正対象のversionを確認し、permissions公式資料でdeny・ask・allowの優先順位とBashのpatternを読み、settings公式資料で設定scopeを特定する必要があります。従来のrm安全対策は破壊的削除が主題でしたが、本稿は2.1.289の許可判定の再現試験に限定します。
2.1.289で何が変わったか
| 確認対象 | 公式更新の要点 | 現場の確認 |
|---|---|---|
| compound shell command | 内側のdeny・askがmodの承認で失われない修正 | 外側と内側のcommandを別々に記録 |
| 環境変数prefix | 展開後に実行されるBash commandの判定抜けを修正 | NAME=value command形式を試験 |
| symlink | IDEで選択・変更・@mentionしたファイルのRead denyを修正 | 実体pathとlink pathを分ける |
| 設定scope | managed、project、userなどの出所が結果を左右 | /statusと設定ファイルを証跡化 |
公式資料にない「脆弱性が完全に解消した」「誤実行がゼロになる」といった保証は置きません。専用の追加料金や新しい利用上限を示す更新ではないため、料金を安全性の根拠にしないことも重要です。契約・provider・実行modeが別管理なら、今回のテスト記録へそれぞれの条件を併記します。
8手順で権限境界を再現する
claude --versionの結果、2.1.289以上か、配布経路、更新日時を保存します。- 本番・home・共有mountを外し、ダミーrepositoryとテストファイルを作ります。
- managed settings、user、project、localの設定scopeと、実際に適用された値を記録します。
- 単純なread、write、Bash commandを実行し、deny・ask・allowの期待値を表にします。
- 環境変数を前置きしたcommandを同じ対象へ行い、表示文字列と実行されたcommandを分けて保存します。
;、&&、pipe、bash -cを含むcompound commandを一つずつ試します。- mod、plugin、IDEのsymlink、@mentionを組み合わせず、経路ごとに一条件だけ変えます。
- 期待と異なる時は実行を続けず、設定出所・version・ログ・再現手順を保全して管理者へ上げます。
試験の成功はcommandが通ることではなく、危険な内側の操作が想定したdeny・askで止まり、許可した操作の範囲が説明できることです。実データを削除したり外部へ送ったりして確認しません。
deny・ask・allowの設計を比較する
| ルール | 向く用途 | 企業運用の注意 |
|---|---|---|
| deny | 機密path、破壊的操作、外部送信の停止 | 広いdenyは例外を作れず、対象を分類して記録 |
| ask | 人間が意図と対象を確認する操作 | 無人jobでは停止または失敗になる |
| allow | 低リスクで反復するread-only処理 | shell wrapperやwildcardで範囲が広がらないか確認 |
Permissions公式資料の順序はdeny、ask、allowです。より具体的なallowを書いても、広いdenyの例外にはなりません。また、promptで承認した事実と、組織として恒久的に許可する判断は別です。開発者のlocal設定だけで安全境界を作らず、managed settings、監査、更新後の再試験を一つの運用にします。
公開前チェックリスト
- 2.1.289以上のversionと更新方法を記録した
- managed・user・project・localの設定scopeを特定した
- 単純commandとcompound commandを別テストにした
- 環境変数prefix、pipe、redirect、shell wrapperを確認した
- mod・plugin・IDE・symlinkを経路ごとに分離した
- 実データを使わず、拒否理由とログを保存した
- 期待外の判定時の停止担当と再承認条件がある
公開運用では、修正versionを全端末へ配布するだけでなく、設定が古い端末をどう隔離するかを決めます。特に、無人CIと対話型の開発端末で同じ設定を共有すると、askが待ち続けるか、allowが広がるかのどちらかに偏りやすくなります。実行主体、対象データ、復旧方法を別欄にした台帳を作ると、変更審査が容易になります。
FAQ
- 2.1.289の修正だけで追加のdenyは必要ですか?
- 必要性は環境によります。公式修正は判定の欠陥を直しますが、自社の機密pathや無人実行の停止条件までは決めません。期待値を作って再現試験します。
- allow ruleを削除すれば安全ですか?
- それだけでは不十分です。managed settings、permission mode、shell展開、symlink、実行主体を確認し、危険操作はdenyまたは人間確認へ置きます。
- 権限設計を無料診断できますか?
- できます。version、設定scope、対象データ、CIの実行mode、ログ、停止条件を無料診断(60秒)へまとめてください。
更新直後の確認では、修正された事象と自社の追加リスクを混ぜないことが大切です。changelogの行、設定ファイルのhash、端末version、テスト結果を同じ変更記録へ紐付け、次回更新時に同じケースを再実行します。判断できない場合は自動実行を止め、管理者が影響範囲を確認してから再開します。設定の基礎はClaude Code権限設定ガイド、開発環境の境界はworkspace trustの確認手順にも分けて記録します。
Claude Codeの権限は、モデルへの指示だけでなく、実行環境のルールとして設計します。2.1.289への更新を入口に、compound command、環境変数、mod、symlinkという境界条件を自社のチェック項目へ落とすことが、日々の運用で再現できる安全対策になります。更新後の差分が小さく見えても、承認経路と対象データの組み合わせを省略せず、四半期ごとに同じダミー試験を行います。
試験結果は端末単位で残し、未更新端末を本番作業から外す判断にも使います。
