2026:在 ProxyMac Mac mini 上以 OpenClaw MCP 檔案系統白名單、POSIX 沙箱根目錄與爆炸半徑控制
OpenClaw 智慧代理人在 香港、日本、韓國、新加坡或美國 租用的 Mac mini M4 上編排建置時,常會啟用上遊 MCP 檔案系統 服務,讓模型比對儲存庫差異或蒐集日誌。一旦伺服器的 argv 根目錄包含整個主目錄,這種便利就會演變成災難——因為 MCP 繼承的是執行閘道行程之 Unix 使用者的 POSIX 權限,而不是你政策備忘錄裡的理想狀態。本手冊提供:(1)對檔案系統工具直截了當的威脅模型;(2)分離讀、寫與暫存卷的三層目錄契約;(3)將自動化帳戶映射到目錄的權限矩陣;(4)可執行的七步強化流程;(5)當有人在午夜展示誤執行 chmod -R 777 時的處置步驟。執行時監控應包含每分鐘 open(2) 失敗計數:持續的 ENFILE 或 EMFILE 尖峰往往表示智慧代理人在被拒絕的樹裡空轉而非優雅退出。請把基礎原則與 MCP 服務搭建、金鑰與鑰匙圈、macOS TCC 權限 結合,使防禦分層而非流於表演。
建議每季在預演環境做一次桌面演練:工程師故意放寬 argv 根、觀察 JSONL 告警,再在 30 分鐘內收緊範圍——肌肉記憶勝過生產事故時的臨場發揮。演練應記錄誰核准了暫時放寬、誰驗證了回滾指令稿校驗和、誰在工單系統裡關閉了環。把「允許清單 diff」當作與防火牆規則同等級的變更,能顯著降低「展示後忘記收緊」的機率。
為何在 macOS 閘道上,檔案系統 MCP 的風險遠高於瀏覽器自動化
與無頭 Chromium 的邊界不同,檔案系統 MCP 可以遍歷守護行程 UID 可讀的任意路徑——若人員誤配主目錄,甚至包括 ~/.ssh 裡的私鑰。提示注入未必需要遠端程式碼執行;禮貌地請求模型執行 cat ~/.aws/credentials 即可。因此防禦者應以與 IAM 角色相同的嚴格度劃定目錄:預設拒絕、為每次納入附工單編號,並假設提示可能每週失控一次。
- 數量直覺:記錄 MCP JSONL 的團隊常觀察到,長時間工作階段中每工作階段約 120–400 次檔案系統操作——每次都可能僅透過路徑名洩露詮釋資料。
- Apple Silicon 視角:APFS 複製意味著「複製儲存庫」捷徑可能意外在環境間共享 inode 快照——不要依賴 Finder 的複製語意做隔離。
- 稽核掛鉤:將雜湊路徑送往 JSONL 診斷,讓安全營運在無需儲存原始客戶檔案名的情況下回放尖峰。
另一個常被低估的向量是符號連結與相對路徑:即使 argv 根看似安全,若暫存區內存在指向敏感目錄的符號連結且 ACL 繼承漂移,仍可能發生越界讀取。應在每次大版本升級後執行明確 chmod -h 稽核,並把結果附在變更單上。
三層白名單模型:唯讀語料、寫入語料與暫存根
| 層級 | 用途 | 典型 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 小時的暫存目錄。
若團隊使用 monorepo,請為每個子套件分配獨立暫存前綴,避免不同流水線在同一 scratch 樹下互踩檔名;前綴規則應寫進 CI 範本而非口耳相傳。
POSIX 矩陣:將 LaunchDaemon 使用者映射到檔案系統範圍
| Unix 帳戶 | 主群組 | umask | 擁有的目錄 |
|---|---|---|---|
automation | staff | 027 | 僅 /srv/oc-mcp/* |
builder(互動) | developer | 022 | Homebrew 樹,非 MCP 根 |
root | wheel | 不適用 | 切勿執行 MCP 伺服器——exec 前降權 |
sudo chown -R automation:staff /srv/oc-mcp,隨後在 LaunchAgent 中禁止使用 sudo——維運透過帶校驗和標籤的應急指令稿提權。
矩陣應納入新員工到職清單:說明為何不能用個人登入工作階段跑 MCP、為何不能把桌面資料夾拖進白名單。把「禁止項」寫成三條以內的硬規則,比二十頁政策更易執行。
在生產啟用檔案系統 MCP 之前的七步強化
- 凍結清單:在組態管理中記錄每個 MCP argv 根——禁止在「下載項目」下藏影子副本。
- 建立 APFS 卷或資料夾並酌情使用 sticky bit;依作業 ID 用日期前綴分離暫存。
- 精簡環境:在可行時讓 LaunchAgent 設定
HOME=/srv/oc-mcp svc,避免波浪線展開亂跑。 - 金鑰防火牆:將權杖放在可讀根之外,或依 金鑰指南 使用每使用者鑰匙圈條目。
- 提示清洗:用閘道中間件鉤子阻止引用白名單外絕對路徑的指令。
- 金絲雀工作:在預發環境嘗試讀取
../../etc/passwd——應得到確定性拒絕並記錄日誌。 - 季複審:將
find /srv/oc-mcp -perm +020輸出與政策基線 diff——任何變寬都觸發回滾。
第七步之後還應做一次容量與 inode基線快照:智慧代理人大量列舉大目錄時,即使權限正確也可能把磁碟 I/O 打滿;把 ulimit 與 LaunchAgent 的 ThrottleInterval 一併納入審查。
智慧代理人讀取超出契約時的緊急應變
若 JSONL 出現意外路徑前綴或檔案描述元突然飆升,先依入侵假設處理。即時手冊:(1)對 MCP plist 執行 launchctl bootout;(2)若 Time Machine 涵蓋該卷,用 tmutil compare 做 APFS 快照比對;(3)輪換任何曾靠近可讀目錄的雲端 PAT;(4)若輸出碰觸受監管資料則通知客戶;(5)在中間件落地前用護欄正則表達式暫時修補提示。時間戳請精確到正負 5 分鐘——財務團隊需要與計費週期重疊的事故橋接相關聯。
遏制後召開無責複盤,至少回答五個問題:哪些 argv 根寬於政策、哪位工程師核准了擴大、哪條自動化測試本應告警、JSONL 保留證據多久、以及 環境隔離 是否能限制爆炸半徑。把答案與合併請求連結寫進合規臺帳。
對外溝通範本應預先寫好:包含影響時間窗、已輪換的憑證類型、客戶需採取的動作(若有)。慌亂時複製貼上比即興寫郵件更少出錯。
常見問題
macOS 沙箱描述檔有幫助嗎?僅當你包裝 MCP 二進位時如此——多數團隊依賴目錄白名單,因為上游伺服器常未簽章。
能否掛載遠端 NFS?對延遲敏感的智慧代理人應盡量避免;若不可避免,將掛載根視為唯讀並監控 TCP 停滯。
大小寫不敏感的 APFS 版面呢?僅大小寫不同的重複路徑可能混淆 diff 工具——暴露給 MCP 前應正規化。
如何測試符號連結逃逸?在暫存內故意建立 ln -s ../../etc/hosts,斷言 MCP 回報權限錯誤且 JSONL 記錄嘗試——每次 Node.js 小版本升級後重複,因為模組解析可能改變 realpath 行為。
為何嚴格限定 MCP 時仍適合 ProxyMac Mac mini
單租 Mac mini M4 主機提供確定性路徑——沒有鄰居容器悄悄把你的 /srv 樹 bind-mount 進來——而 Apple Silicon 在智慧代理人大量讀取框架時仍能保持可預測的吞吐量。透過 定價頁 比較方案,透過 說明中心 落實遠端工作流,並在需要肉眼確認某人聲稱「只是暫時」的 chmod 漂移時查閱 VNC 說明。