2026:ProxyMac Mac mini 上の OpenClaw MCP ファイルシステム許可リスト、POSIX サンドボックスルート、ブラスト半径の制御
OpenClaw エージェントが 香港・日本・韓国・シンガポール・米国 にあるレンタル Mac mini M4 でビルドをオーケストレーションするとき、上流の MCP filesystem サーバーを有効にしてモデルにリポジトリの差分やログ収集をさせることが多い。サーバーの argv ルートがホームディレクトリ全体を含むと、その便利さは災害になる——MCP はポリシーメモの理想ではなく、ゲートウェイを動かす Unix ユーザーの POSIX 権限を継承するからだ。本プレイブックは (1) ファイルシステムツールへの率直な脅威モデル、(2) 読み取り・書き込み・スクラッチボリュームを分ける三層ディレクトリ契約、(3) 自動化アカウントをディレクトリにマッピングする権限マトリクス、(4) 七段階ハードニングランブック、(5) 深夜デモで誰かが chmod -R 777 を誤って付与したあとの手順を届ける。ランタイム監視には毎分の open(2) 失敗回数を含めるべきだ——ENFILE や EMFILE の持続的スパイクは、エージェントが拒否されたツリーを優雅に止めずに叩いている兆候になりがちだ。基礎は MCP サーバー構築、シークレットと Keychain、macOS TCC 権限 と重ね、防御を演劇ではなく層にする。
四半期ごとにステージングでテーブルトップ演習を組み込み、エンジニアが argv ルートを意図的に広げ、JSONL アラートを観察してから 30 分以内にスコープを再締めする——本番エスカレーション時の即席対応より筋肉記憶の方が強い。
macOS ゲートウェイで filesystem MCP がブラウザ自動化より危険な理由
ヘッドレス Chromium の境界とは違い、filesystem MCP はデーモン UID が読める任意のパスを辿れる——ホームディレクトリを誤設定すると ~/.ssh の秘密鍵も含まれる。プロンプト注入はリモートコード実行を要しない;モデルに丁寧に cat ~/.aws/credentials を頼むだけでよい。したがってディレクトリは IAM ロールと同じ厳格さでスコープする:デフォルト拒否、各包含にチケット ID、プロンプトは週に一度は暴走すると仮定する。
- 数の感覚:MCP JSONL をログするチームは、長時間エージェントセッションでセッションあたり 120–400 回のファイル操作をよく見る——それぞれがパス名だけでメタデータを漏らすチャンスになる。
- Apple Silicon の角度:APFS クローンは「リポジトリ複製」ショートカットが環境間で inode スナップショットを共有してしまうことがある——Finder コピー意味論に隔離を任せない。
- 監査フック:ハッシュ化したパスを JSONL 診断 に送り、生の顧客ファイル名を保存せずに SOC がスパイクを再生できるようにする。
三層許可リスト:読み取りルート、書き込みルート、スクラッチルート
| 層 | 目的 | 典型的な APFS パス | 許可される MCP 動詞 |
|---|---|---|---|
| 読み取り専用コーパス | ベンダ SDK、承認済みドキュメント | /srv/oc-mcp/read/sdk-cache | リストとバイト読み取り |
| 書き込みコーパス | 生成物、ビルド成果物 | /srv/oc-mcp/write/build-out | サブツリー内での作成/追記 |
| スクラッチ | 一時的な diff チャンク | /srv/oc-mcp/scratch/$JOB_ID | シンボリックリンク脱出を除き制御下 |
スクラッチを書き込みルートへシンボリックリンクしない——ACL 継承がずれても macOS はトラバーサルを許すことがある。アップグレード後は明示的な chmod -h 監査を行う。
外付け SSD からのバインドマウントは別途精査する——タスク途中でドライブを抜くと MCP キャッシュ内に古い inode ハンドルが残ることがある——ハードウェア交換後はゲートウェイを再起動し、24 時間未満のスクラッチフォルダを自動で無効化する。
POSIX マトリクス:LaunchDaemon ユーザーをファイルシステムスコープにマッピング
| Unix アカウント | プライマリグループ | umask | 所有ディレクトリ |
|---|---|---|---|
automation | staff | 027 | /srv/oc-mcp/* のみ |
builder(対話) | developer | 022 | Homebrew ツリー、MCP ルートではない |
root | wheel | n/a | MCP サーバーを動かさない——exec 前に権限を落とす |
sudo chown -R automation:staff /srv/oc-mcp を実行し、その後 LaunchAgent 内では sudo を禁止する——オペレーターはチェックサムタグ付きのブレイクグラススクリプトで昇格する。
本番で filesystem MCP を有効にする前の七段階ランブック
- インベントリを凍結:構成管理に各 MCP argv ルートを文書化——Downloads 下の影コピーはない。
- 必要に応じて sticky bit 付き APFS ボリュームまたはフォルダを作成;ジョブ ID ごとに日付プレフィックスでスクラッチを分離する。
- 環境を削る:可能なら LaunchAgent で
HOME=/srv/oc-mcp svcを設定しチルダ展開の迷走を防ぐ。 - シークレットの防火壁:トークンを読み取り可能ルートの外に置くか、シークレットガイド に沿ってユーザーごとの Keychain エントリに頼る。
- プロンプトのリント:許可リスト外の絶対パスを参照する指示をゲートウェイミドルウェアフックでブロックする。
- カナリアタスク:ステージングで
../../etc/passwd読み取りを試み、決定的な拒否がログに残ることを期待する。 - 四半期レビュー:
find /srv/oc-mcp -perm +020の出力をポリシーベースラインと diff する——広がればロールバックを起動する。
エージェントが契約を超えて読んだあとのインシデント対応
JSONL に予期しないパス接頭辞やファイルディスクリプタの急増があれば侵害を仮定する。即時プレイブック:(1) MCP plist に launchctl bootout、(2) Time Machine がボリュームを覆うなら tmutil compare で APFS をスナップショット比較、(3) 読み取り可能ディレクトリ近傍にあったクラウド PAT をすべてローテーション、(4) 出力が規制データに触れたら顧客へ通知、(5) ミドルウェアが出るまでガードレール正規表現でプロンプトをパッチする。タイムスタンプは±5 分の精度で——財務チームはインシデントブリッジが請求サイクルと重なる相関を欲しがる。
封じ込め後、argv ルートがポリシーより広かった理由、拡大を承認したエンジニア、それを検知すべきだった自動テスト、JSONL が証拠を保持した期間、そして 環境分離 がブラスト半径を抑えられたかという五つの質問でブレームレスレビューを行い、回答をプルリクエストにリンクしてコンプライアンスが追跡できるようにする。
FAQ
macOS サンドボックスプロファイルは役に立つか?MCP バイナリをラップするときに限る——多くのチームは上流サーバーが未署名であるためディレクトリ許可リストに頼る。
リモート NFS をマウントできるか?レイテンシ敏感なエージェントでは避けるべき;避けられないならマウントルートを読み取り専用にし TCP 停滞を監視する。
大文字小文字を区別しない APFS レイアウトは?大文字小文字だけが異なる重複パスが diff ツールを混乱させる——MCP に渡す前に正規化する。
シンボリックリンク脱出をどうテストするか?スクラッチ内に意図的に ln -s ../../etc/hosts を作り、MCP が権限エラーを返し JSONL が試行を記録することを検証する——Node.js のマイナーアップグレードのたびに繰り返す。モジュール解決は realpath の挙動を変えうる。
厳しくスコープした MCP でも ProxyMac Mac mini が合う理由
シングルテナントの Mac mini M4 は決定的なパスを与え——隣のコンテナが静かにあなたの /srv ツリーをバインドマウントすることはない——一方 Apple Silicon はエージェントがフレームワークを一括読みするときもスループットを予測可能に保つ。料金ページ でフットプリントを比較し、ヘルプセンター でリモートワークフローを運用し、誰かが「一時的だった」と約束した chmod のずれを視覚的に確認するときは VNC ガイド を手元に置く。
本番 IAM のように MCP ルートをスコープする
OpenClaw · Apple Silicon M4 · HK / JP / KR / SG / US