【實戰】把 AI 龍蝦關進籠子裡:macOS 本機部署 Openclaw + Gemini 的資安防禦指南
我一直在尋找那個能真正「觸碰到本機資源」的 AI 代理。原先考慮過在 VPS 或 AWS 上開一台機器來跑,但如果 AI 龍蝦(Openclaw)無法存取我的本機檔案與工具,那它就只是一個比較貴的聊天機器人,失去了它身為「操作系統代理」的靈魂QQ
然而,把一個擁有高權限、能執行指令的 AI 放在自己的 Mac Mini 裡,就像是在家裡養了一隻會開鎖的酷斯拉。為了不讓這隻龍蝦哪天心情不好就把我的 Documents 刪光,我設計了一套基於 「New macOS user + Discord + Gemini」 的隔離架構。
這是一篇寫給「既想要 AI 強大,又怕被 AI 拆家」的工程師與進階玩家的參考。因為我也還不確定 Best Practice 方式解為何,只能盡可能參考 Openclaw 的官方 Security[1]文件進行設計。
目錄
- 為什麼選擇本機部署?權衡與代價
- 第一階段:基礎建設——安裝龍蝦與 Discord 機器人
- 第二階段:賦予靈魂——串接 Gemini API (Antigravity OAuth)
- 核心防禦:macOS 檔案系統的深層隔離
- 進階鎖定:Gateway 與檔案權限收緊
- 資安壓力測試:你的龍蝦會背叛你嗎?
- Reference
1. 為什麼選擇本機部署?權衡與代價
在開始動手前,我們先聊聊為什麼要這麼麻煩。
分析與洞察
工程師最容易犯的錯誤就是「為了方便而犧牲安全」。Openclaw 的強大在於它能讀取你的檔案、執行 Shell 指令。如果部署在雲端,它與你本地資料的延遲與權限打通會讓你抓狂;但部署在本機,它就擁有了「物理存取權」。
作者在官方文件中明確提到:「沒有完美的安全設定」。因此,我們的目標不是追求 0 風險(那叫拔掉插頭),而是**「最小權限原則 (Principle of Least Privilege)」**。
[CAUTION]
注意事項: 此部署方法涉及許多 macOS 底層權限與系統設定(如 dscl、ACL 等)。如果你對終端機指令不熟悉或是新手玩家,建議在操作前務必做好系統備份,並謹慎執行每一條指令。
準備工作:建立隔離區
在開始動手前,我們必須先在 macOS 層級建立一道防禦工事。我們不能讓龍蝦直接跑在你的 Mac 主帳號下,因為那等於把你的主帳號所有地端資訊、iCloud 鑰匙圈、信用卡號、私密相簿全部攤在 AI 面前。
- 建立新使用者:在系統設定中增加一個名為
clawd的一般使用者(不要給 admin 權限),用於與你的主帳號 (Main User) 徹底區隔。 - 拒絕登入 Apple ID:在設定新使用者時,絕對不要登入 Apple ID。這能確保 AI 即使逃出沙盒,也完全碰不到你的雲端檔案或 iMessage。
2. 第一階段:基礎建設——安裝龍蝦與 Discord 機器人
[IMPORTANT]
切換身分: 請先使用 macOS 的「快速切換使用者」進入剛剛建立的clawd帳號。接下來 2.1 到 2.3 的所有安裝與設定,都必須在clawd使用者環境下執行。
2.1 一鍵安裝龍蝦 (Openclaw)
打開你的終端機,輸入這行指令。這會下載並安裝 Openclaw 的核心組件:
curl -fsSL https://clawd.bot/install.sh | bash
2.2 設定 Discord 機器人入口
我們需要一個介面來跟龍蝦溝通,Discord 是目前成熟的 bot 選擇。
- 到 Discord Developer Portal 點擊 New Application,取個帥氣的名字(例如:
Commander)。 - 在左側 Bot 選項中:
- 點擊 Add Bot。
- 重要: 開啟
Presence Intent、Server Members Intent、Message Content Intent。沒開這些,你的機器人會變成聾子。 - 點擊 Reset Token 並複製,這是你的機器人護照,請妥善保管。
- 在 OAuth2 → URL Generator 中:
- Scopes 勾選
bot。 - Permissions 勾選
Read Messages、Send Messages、Read Message History。
- Scopes 勾選
- 用產生的連結把機器人拉進你專屬的伺服器。
2.3 初始化設定
在終端機輸入:
openclaw configure
- Gateway 運行位置: 選擇
Local (this machine)。 - 配置區塊: 勾選
Channels後按Continue。 - 頻道設定: 選
Configure/link-> 勾選Discord (Bot API)。 - 權限控制: 當問到
Discord channels access時,請務必選擇Allowlist (recommended),並在接下來的提示中按 Enter(稍後我們會在設定檔中精確鎖定 ID)。 - 重啟生效: openclaw
daemon restart。
最後,在 Discord 私訊機器人 hi,拿到 Pairing code 後,在終端機執行:
openclaw pairing approve discord [你的代碼]
在模型大腦的選擇上,我選擇串接 Google Gemini (透過 Antigravity 優化通道)。這不僅是為了消耗一下剩餘的 Token 快感,更是因為 Gemini 在處理長上下文與程式碼邏輯上的 CP 值極高。
[!TIP]
透過 Antigravity 的優化通道,我們可以實現極簡化的 OAuth 授權,省去手動管理 API Key 的麻煩,同時在後端享受優化後的傳送速度與穩定性。
[!TIP]
由於 Openclaw 在執行任務(如掃描專案目錄)時會消耗驚人的 Token,未來我也會教大家如何串接本地模型(Local LLM)。但在初始部署階段,建議先使用穩定的 Gemini API。另外請注意,某些模型(如 Claude)對第三方 OAuth 串接審查較嚴,使用時請務必留意帳號風險。
3. 第二階段:賦予靈魂——串接 Gemini API
龍蝦只是軀殼,大腦我們選擇 CP 值極高且速度飛快的 Google Gemini。
3.1 取得 API Key
請至 Google AI Studio 申請一組 API Key。
3.2 一鍵 onboard
使用以下指令進行引導式設定:
openclaw onboard --auth-choice gemini-api-key
bash
這會自動幫你設定預設模型(例如 google/gemini-2.5-flash)。完成後,輸入 openclaw status 確認 Channels 顯示 Discord ON OK。3.2 互動式設定步驟
在終端機輸入:
openclaw configure
接著依照提示選擇路徑:
- Model: 選擇進入模型設定。
- Provider: 選擇
google。 - Google auth method: 選擇 Enter Gemini API key。
- 授權連結: 此時終輸入 key。
- 完成連接: 授權完成後回到終端機,確認已成功儲存。
最後,輸入 openclaw status 確認 Channels 顯示 Discord ON OK 且 Model 已就緒。
4. 核心防禦:macOS 檔案系統的深層隔離
如果在第一步我們只是「分家」,那這一步就是要「鎖門」。我們要確保 「我能進去看龍蝦,但龍蝦絕對不能看我」。
在 macOS 中,預設所有一般使用者都隸屬於 staff 群組,這有時會讓不同使用者間能讀取一些共用目錄。為了追求極致安全,我們要手動修改作業系統的目錄權限與使用者群組。
請回到你的 主帳號 (Admin) 啟動終端機,執行以下「外科手術式」指令:
第一步:隔離群組——將 clawd 從 staff 剔除
我們建立一個專屬的 openclaw 群組,讓龍蝦成為這個群組的唯一成員,徹底切斷它與其他 staff 成員(即你的主帳號)的血緣關係。
# 建立專屬群組
sudo dscl . -create /Groups/openclaw
sudo dscl . -create /Groups/openclaw PrimaryGroupID 999
sudo dscl . -create /Groups/openclaw RealName "Clawdbot Isolated Group"
# 把 clawd 加入新群組並從 staff 移除
sudo dscl . -append /Groups/openclaw GroupMembership clawd
sudo dscl . -change /Users/clawd PrimaryGroupID 20 999
sudo dseditgroup -o edit -d clawd -t user staff
第二步:設定目錄權限(禁止龍蝦越獄)
# 讓主目錄只有自己能進
chmod 700 /Users/[你的主帳號]
# 雙重保險:ACL 顯式拒絕 clawd 存取
sudo chmod +a "user:clawd:deny read,write,execute" /Users/[你的主帳號]
# 給予主帳號對龍蝦目錄的完全控制權
sudo chmod +a "user:[你的主帳號]:allow read,write,execute,delete,chown,file_inherit,directory_inherit" /Users/clawd
階段小結:軟體沙盒化 (Sandbox) 的誕生
透過這種「單向 ACL」設定,我們在 macOS 層級建立了一個透明的觀察室。此時的效果已經是真正的沙盒 (Sandbox) 了,並且是一個基於本機的 macOS 大型沙盒:我們徹底限制了 clawd 使用者的存取權限,最糟的情況下,我們也只需要移除這個使用者帳號,而不會傷及主系統的根本。
此外,clawd user 此時也無法進行最高權限 sudo 等指令。
這種架構的好處顯而易見:
- 資源共享:我們依然能有條件地動用本機底層資源。
- 極速體驗:在 macOS 的「快速切換使用者」功能下,切換身分修改設定或查看 Log 的體驗相當流暢,沒有虛擬機的沉重感。
5. 進階鎖定:Gateway 與檔案權限收緊
除了作業系統層級的隔離,Openclaw 本身的網路與設定也要鎖死。
5.1 Gateway 網路安全
確保 openclaw.json 中的 Gateway 設定如下:
gateway.mode = localgateway.bind = 127.0.0.1(僅限本機回環,不對公網開放)gateway.auth.mode = token(即使是本地連線也要帶 Token)
5.2 Discord 入口縮限與群組應用
我們可以透過 openclaw.json 進一步定義 Discord 的入口。入口開得越少、越窄,系統自然越安全。
我的最終目標是讓龍蝦在特定的 Discord 群組中工作,並且只有在我本人 @mention 它時,它才被允許回應(這對於未來管理多位「AI 員工」非常重要)。你可以參考以下配置:
"channels": {
"discord": {
"enabled": true,
"groupPolicy": "allowlist",
"actions": { "roles": false, "moderation": false },
"dm": {
"enabled": true,
"policy": "allowlist",
"allowFrom": ["你的_DISCORD_USER_ID"]
},
"guilds": {
"你的_DISCORD_SERVER_ID": {
"requireMention": true,
"users": [],
"channels": {
"你的_特定頻道名稱": { "allow": true }
}
}
}
}
}
透過 allowlist 與群組權限設定,此時只有你自己具備私訊 Bot 的權限,且 Bot 只能被你加入特定的群組,且在群組中必須被點名才會動作。
5.3 限制工具權限 (Tools Restriction)
除了身分與網路,我們還能透過 tools 配置進一步縮限 AI 的行為能力。我建議新手可以先封印掉危險的執行權限(如刪除檔案或執行 Bash),並透過 workspace 嚴格限制 AI 的活動目錄。
"tools": {
"profile": "messaging",
"workspace": "/Users/clawd/ai-workspace",
"allow": [
],
"deny": [
]
}
透過將 bash 或 write 放入 deny 名單,即使用戶(或駭客)試圖誘導 AI 刪除系統檔案,龍蝦也會因為核心權限被鎖死而無法執行。