結論:rmの安全性は確認画面だけで決まらない

Claude Code 2.1.288は、bypassPermissionsやshell allow ruleの下で、rootやhome directoryを対象にする危険なrmが確認を迂回し得る問題を修正しました。アップデート後も、破壊的操作を無条件に許可しないこと、compound commandやwildcardの範囲を読むこと、検証用repositoryで拒否を確認することが必要です。

Anthropic公式のClaude Code changelogは2.1.288で、bash -cやsh -cの中の危険なrmがbypassPermissionsまたはshell allow ruleでpromptなしに実行される問題の修正を記載しています。permissions公式リファレンスはallow・denyの構文、Bash wildcard、compound commandの扱いを説明しています。既存の秘密情報を見せない設定とは対象を分け、今回は破壊的ファイル操作の境界に限定します。

危険なrmを4つの層で見る

同じ文字列でも、実行経路によって評価が変わります。Claude Codeのtool権限、shellの展開、OSのファイル権限、sandboxの設定を一つにまとめず、各層で何が止められるかを確認します。

層見る項目失敗例
permissionallow・deny、prompt、mode広いBash(rm *)で範囲が広がる
shellbash -c、展開、redirect表面のコマンドだけ見て内部を見ない
filesystemroot、home、repo外、symlink対象パスを確認せず実行する
運用backup、rollback、担当者失敗後に戻せる前提がない

公式permissions資料は、Bashルールの*が空白を含む任意の文字列に一致し、subcommandの前に置いたwildcardが広い範囲を許可することを警告しています。したがって、便利なallow ruleを先に増やすのではなく、read-only操作と破壊的操作の承認を分離します。権限の基本はpermissionsガイド、workspace trustの判断はworkspace trustの記事も参照してください。

8手順で危険操作の拒否を検証する

  1. Claude Codeのversion、実行mode、OS、repositoryの場所を記録します。
  2. 本番・home directory・共有mountを外し、ダミーrepositoryとダミーファイルだけを用意します。
  3. 現在のallow・deny、managed settings、sandbox設定を読み、設定の出所を記録します。
  4. 単純なrm、rm -r、wildcard、変数展開をread-onlyの確認から試します。
  5. bash -cやsh -cに埋めたケース、redirectやcompound commandを別テストにします。
  6. root、home、repo外、symlink、空白を含むパスが拒否されることを確認します。
  7. bypassPermissionsを検証する場合も、破壊的操作が人間確認・deny・sandboxで止まるかを記録します。
  8. ログ、拒否理由、設定差分を保存し、実データを使わずにrollbackと再試験を行います。

テストでは、実際に削除して確認するのではなく、権限promptと拒否結果を観察できる安全なwrapperやダミー対象を使います。shellの挙動を確かめる時も、外側のコマンドと内側で評価される文字列を分けて保存します。テストの合格は「rmが動いた」ではなく、想定した対象以外へ到達しないことです。

allow・deny・sandboxの比較

方法役割限界
allow反復する安全なコマンドをpromptなしにする広いwildcardやshell wrapperで拡大し得る
deny危険なtool・対象・パターンを拒否する設定のscopeと優先順位を確認する必要
sandboxOS・filesystemの到達範囲を狭める全てのshellや権限問題の代替ではない
人間確認高リスク操作の意図と対象を確認する無人実行ではprompt待ちになる

allowとdenyのどちらか一つに依存せず、破壊的操作は実行させない設計を標準にします。どうしても自動化が必要な削除は、専用のサービスアカウント、対象directory、dry-run、backup、期限、監査ログを分けたwrapperで行い、Claude Codeにrootやhomeの削除権限を直接渡さない方が説明しやすくなります。

公開前チェックリスト

  • 2.1.288以上へ更新し、更新日と配布経路を記録した
  • allow・deny・managed settings・sandboxのscopeが分かる
  • Bash(rm *)など広いwildcardを採用していない
  • bash -c、sh -c、redirect、compound commandを検証した
  • root、home、repo外、symlink、共有mountを拒否した
  • 実データを削除せず、dummy repositoryで試験した
  • backup、rollback、停止担当、再承認日がある

企業の標準設定にする場合は、検証結果だけでなく、例外申請の条件も公開します。開発者が「テストを進めるため」にbypassPermissionsを有効化し、戻し忘れるケースを想定し、起動時の表示、定期監査、CIの設定チェックを組み合わせます。権限の安全性はツールの名称ではなく、到達可能なデータと実行主体で評価します。

FAQ

2.1.288へ更新すれば追加設定は不要ですか?
公式修正は重要ですが、既存のallow・deny・mode・sandboxが適切とは限りません。変更前後の設定とダミー検証を記録します。
rmをallow ruleに入れてもよいですか?
広い対象のrmは許可しません。必要な自動化は対象directory、入力検証、dry-run、backup、rollbackを持つ専用wrapperへ分けます。
権限設計を無料診断できますか?
できます。実行mode、設定ファイル、対象データ、sandbox、無人実行の有無、停止条件を無料診断(60秒)へまとめてください。

インシデント対応では、削除されたファイルだけでなく、どのsessionが、どの設定で、どのshell経路を通ったかを保存します。Claude Codeのログ、OSの監査、Gitの状態、backupの復元結果を同じ時刻軸で照合します。秘密情報を含むログを共有する時は、prompt、環境変数、path、tokenをマスキングし、原本へのアクセスを限定します。

権限ルールの変更は、開発者一人の便利さを基準にせず、失敗時の復旧時間とデータ分類で決めます。read-onlyのGitや検索は自動化できても、削除・外部送信・本番変更は別の承認ラインへ置きます。Claude Codeの更新ごとに危険ケースを再試験し、修正が入ったから安全になったという短絡を避けることが、運用の再現性につながります。