安全第一:沙盒、隔離與 URL 保密
CatDesk 給 ChatGPT Web 的能力是「讀檔、寫檔、在你電腦上跑 shell 指令」。上游文件寫得非常直白:這個工具非常強大,可能清空你的整顆硬碟或產生非預期結果。 這一課講的是怎麼在享受能力的同時,把爆炸半徑 (Blast Radius) 壓到最小。
上游免責聲明
先原文照錄重點:
- CatDesk 是獨立開源專案,與 OpenAI 無關、也未獲 OpenAI 背書。
- 部分功能仍有 bug,可能造成非預期行為,風險自負。
- 上游強烈建議在 VM 或容器 (Container) 內執行。Quickstart 也再次提醒:把它當成 OpenClaw 對待,保持容器化與隔離。
這不是客套話。一個能跑任意 shell 指令的代理加上一個會幻覺的模型,最壞情況就是磁碟被清掉。隔離不是選配。
ngrok MCP Server URL:你的電腦大門
CAUTION:絕對不要把 MCP Server URL 分享給任何人。拿到這個 URL 的任何人都能存取你的電腦。
URL 由三段組成:
| 部分 | 範例 | 意義 |
|---|---|---|
| 公開網址 | https://xxxx.ngrok-free.dev |
你的 ngrok 靜態網域 (Static Domain) |
| 隨機路徑 | /Ab3kL9xQ2pTm7VhC |
首次啟動時生成的隨機路徑 |
| MCP 端點 | /mcp |
實際的 MCP 端點 |
完整 URL 長這樣:
https://xxxx.ngrok-free.dev/Ab3kL9xQ2pTm7VhC/mcp
兩個實務要點:
- URL 是持久的。靜態網域與隨機路徑都保存在
~/.catdesk/config.toml,每次啟動都一樣,所以連接器只需設定一次。副作用是:洩漏一次就等於長期洩漏。 - 保密等於存取控制。連接器的 Authentication 設為 None,這個隨機路徑就是唯一的門鎖。別把它貼進截圖、貼文、issue 或任何對話。
工作區 (Workspace):檔案工具的第一道邊界
工作區是 CatDesk 被允許工作的根目錄:
- 預設值:你啟動 CatDesk 時的當前工作目錄。
- 覆寫:設定
WORKSPACE_ROOT環境變數。 - 強制邊界:所有檔案工具以工作區為基準路徑,工作區外的路徑一律拒絕。
把 WORKSPACE_ROOT 指向一個乾淨的專案目錄,是最便宜也最有效的一道圍籬。
Linux 沙盒:bubblewrap(v0.6.0 起)
在 Linux 上,CatDesk 用沙盒限制 shell 執行。這個機制經歷過一次換血:
- v0.4.0 起:最初採用核心級的 Landlock——
run_command與背景工作被限制在工作區,外加每條指令專屬的暫存目錄 (Scratch Dir)。即使模型下了越界指令,檔案系統層面就會被擋下。 - v0.6.0 起:Landlock 換成 bubblewrap,把沙盒支援延伸到舊版 Linux kernel;Linux build 同時改用 musl 靜態連結、HTTP 改 rustls,降低對目標主機的相依。
- v0.7.0:沙盒內 SSH 認證與簽署改為轉發 SSH agent,私有金鑰留在沙盒外。
- v0.9.0:Git metadata 位於 workspace 外(linked worktrees、submodules、
repocheckout)也能沙盒化,且驗證僅讓 workspace 對應的 Git 路徑可寫。 - v0.9.3:沙盒新增持久化 TUI 開關,停用前需額外確認(預設仍為開啟);以 NVM 安裝的
npm/npx可在沙盒內運作,Node 版本的 library tree 維持唯讀。
沙盒的價值在於它不是「請模型乖一點」的提示詞約束,而是核心/核心外強制的檔案存取規則。從 Landlock 換到 bubblewrap 的取捨是:核心原生機制零依賴但 kernel 門檻高,使用者空間的 bubblewrap 則幾乎任何 kernel 都能跑——對要部署在各種主機的本地工具,涵蓋範圍比純度重要。
read-only 模式與權限選擇
第三道防線在工具面與權限面:
- read-only 工具模式:只暴露 3 個讀取類工具,模型連寫入的能力都沒有。適合低風險場景,例如只讓 ChatGPT 分析程式碼。
- 連接器權限二選一:
| 權限選項 | 意義 |
|---|---|
| Allow read actions(預設) | 只允許讀取動作 |
| Allow all actions | 允許所有動作,等同 Codex 的 --yolo,需謹慎使用 |
上游雖然標注「推薦 Allow all actions」,但務實的順序應該是:先以 read-only 起步,建立信任後再升級。信任的依據是你在 read-only 模式下觀察到的行為,而不是模型的自我保證。
連接器本身失效時的行為也在 v0.9.4 更新:connector 失敗不再默默回退到 ChatGPT 內建沙盒,而是直接回報原始 connector 錯誤。這讓你看到的是真正的失敗原因,而不是「以為 CatDesk 在跑、其實換了執行環境」的無聲落差。
實用隔離清單
把前面的機制整理成開工前的檢查清單:
- DevContainer / VM 優先:上游明文建議。能用容器就不要裸機跑。
- 每個工作階段 (Session) 前先
git commit:讓任何破壞性修改都有還原點。 - 每台機器用獨立的 ngrok 網域:URL 持久且即門鎖,一台機器一把鎖,別混用。
- 設定
WORKSPACE_ROOT:把邊界收斂到單一專案目錄,不要用家目錄當工作區。 - MCP Server URL 視為密碼:不截圖、不貼文、不進版控。
- 先 read-only,後 multi-tools:低風險場景就用 3 工具模式。
- 權限從 Allow read actions 開始:信任建立後才考慮 Allow all actions。
這份清單做到前三項,就已經擋掉絕大多數最壞情況。剩下的項目成本極低,沒有理由跳過。