AIをもっと安全に使いたい!書き込み権限を制限するCLI cageについて 🪢
先日、X にてこの投稿を見かけました。
経緯はこちらで言及されていて、Web Frontendのフレームワーク?が ~
を含むディレクトリを作成することに起因しているらしいです。 つまり solid-ui
などのそういった挙動をするライブラリやフレームワークを使っているひとはこの問題に遭遇する危険性があるということです。
この問題に対して、Claude Codeの設定で禁止することで対処している記事もあります。
AIの暴走を防ぐ!Claude Codeで危険なコマンド rm -rf を禁止する安全設定 🛡️
一方で、僕は別のアプローチでこれを防ぐツールを作ってみました。 Warashi/cage で公開しています。
このツールは、オプションで指定したディレクトリ以外の書き込みを禁止した状態で別のコマンドを起動するCLIツールです。 つまり、例えばコマンドを実行した時のカレントディレクトリ以外への書き込みを禁止することができます。 これを使えばこの記事冒頭で触れたようなホームディレクトリに対する rm -rf
などは書き込み権限がないため実行に失敗するようになります。
このCLIはどうやって実現しているかというと、OSに備わっているサンドボックス機構を利用しています。 macOSではApple Seatbeltという仕組みを使い、LinuxではLandlockという仕組みを使っています。 これらを使うと指定した権限を逸脱する行動ができないようにすることができます。 例えばファイルの読み書きであったり、ネットワーク通信だったりに制限をかけることができます。
Apple Seatbelt については syumai さんの「macOSのApple Seatbelt (sandbox-exec) について調べた」という記事 に詳しく記載されているので、是非そちらを読んでみてください。
このツールは Claude Code に限らず使えます。 例えば Gemini CLI でも勿論使えますし、AIに限らずちょっと信用できないコードを実行するときにも使えます。
注意点として、 Claude Code や Gemini CLI が起動する MCP Server などもこの制限の影響を受けます。 たとえば npx
コマンドで MCP Server を起動する場合、 $HOME/.npm/
への書き込みを許可しないと npx
コマンドがうまく動かず、MCP Server を起動できなかったりします。 そういった点でちょっと注意が必要だったりはしますが、ぜひ一度試してみてほしいです。
もし何か意図しない挙動があったり質問があったりしたら、この Zenn の記事のコメントでも GitHub の Issue でもいいので連絡を貰えれば改善できるかもしれないので、ぜひ一度連絡を下さい。
Discussion