結論: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の設定を一つにまとめず、各層で何が止められるかを確認します。
| 層 | 見る項目 | 失敗例 |
|---|---|---|
| permission | allow・deny、prompt、mode | 広いBash(rm *)で範囲が広がる |
| shell | bash -c、展開、redirect | 表面のコマンドだけ見て内部を見ない |
| filesystem | root、home、repo外、symlink | 対象パスを確認せず実行する |
| 運用 | backup、rollback、担当者 | 失敗後に戻せる前提がない |
公式permissions資料は、Bashルールの*が空白を含む任意の文字列に一致し、subcommandの前に置いたwildcardが広い範囲を許可することを警告しています。したがって、便利なallow ruleを先に増やすのではなく、read-only操作と破壊的操作の承認を分離します。権限の基本はpermissionsガイド、workspace trustの判断はworkspace trustの記事も参照してください。
8手順で危険操作の拒否を検証する
- Claude Codeのversion、実行mode、OS、repositoryの場所を記録します。
- 本番・home directory・共有mountを外し、ダミーrepositoryとダミーファイルだけを用意します。
- 現在のallow・deny、managed settings、sandbox設定を読み、設定の出所を記録します。
- 単純な
rm、rm -r、wildcard、変数展開をread-onlyの確認から試します。 bash -cやsh -cに埋めたケース、redirectやcompound commandを別テストにします。- root、home、repo外、symlink、空白を含むパスが拒否されることを確認します。
- bypassPermissionsを検証する場合も、破壊的操作が人間確認・deny・sandboxで止まるかを記録します。
- ログ、拒否理由、設定差分を保存し、実データを使わずにrollbackと再試験を行います。
テストでは、実際に削除して確認するのではなく、権限promptと拒否結果を観察できる安全なwrapperやダミー対象を使います。shellの挙動を確かめる時も、外側のコマンドと内側で評価される文字列を分けて保存します。テストの合格は「rmが動いた」ではなく、想定した対象以外へ到達しないことです。
allow・deny・sandboxの比較
| 方法 | 役割 | 限界 |
|---|---|---|
| allow | 反復する安全なコマンドをpromptなしにする | 広いwildcardやshell wrapperで拡大し得る |
| deny | 危険なtool・対象・パターンを拒否する | 設定のscopeと優先順位を確認する必要 |
| sandbox | OS・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の更新ごとに危険ケースを再試験し、修正が入ったから安全になったという短絡を避けることが、運用の再現性につながります。
