OpenAI 官方文件把 Codex 的沙盒、審批與網路存取分成不同控制面;這個三層切分本身就說明,能啟動 CLI 不代表多倉庫環境已經安全。官方沙盒與審批說明 可作為驗收起點。你的本週建議動作是:不要讓 Codex CLI 直接跑在共享高權限帳戶,先用獨立系統帳戶、每個倉庫獨立工作區、最小沙盒與審批策略完成五類測試;只要有一項無法證明隔離有效,就退回單倉庫臨時節點或雙軌執行。
這篇文章適合三類人:
- 專業開發者:需要在遠端 Mac 讓 Codex CLI 修改、建置或測試多個倉庫,但不確定工作區邊界是否可靠。
- DevOps 工程師:負責長期在線的 Mac 節點、帳戶權限、任務清理與重啟恢復。
- 安全與平台負責人:需要審核 Agent 對原始碼、網路、Keychain、簽署資產與 Xcode 工具鏈的實際存取範圍。
先用准入條件區分可上線與只能試跑
「Codex CLI 遠端 Mac 多倉庫安全」不是單一的安全或不安全判斷。你要驗證的是:Agent 能看見哪些檔案、能執行哪些命令、能連去哪裡、能否取得憑證,以及中斷後是否留下可被下一個任務利用的狀態。
上線前的最低門檻
在 T0 建立測試節點時,先固定以下邊界:
- 使用獨立系統帳戶,不與管理員日常帳戶共用家目錄。
- 每個倉庫使用獨立工作區,禁止把多個倉庫直接放在同一個可寫根目錄。
- 先採用最小沙盒與需要審批的策略,再依任務逐項放行。
- 使用測試用、唯讀或短期憑證,不把生產簽署私鑰直接放入預設 Agent 工作階段。
- 以非生產倉庫測試,並記錄檔案差異、程序、網路請求、登入狀態與重啟結果。
官方權限文件說明了 Codex 的審批與沙盒設定;實際設定欄位與行為必須以目前版本的官方權限文件及設定原始碼為準,不要照抄舊文章中的鍵名。
注意: 提示詞只能約束 Agent 的意圖,不能取代系統帳戶、檔案權限、Keychain 授權或沙盒。若你只能對 Agent 說「不要讀取其他倉庫」,卻沒有作業系統層的拒絕證據,這一項應判定為未通過。
第一個指標:文件邊界是否真的只留在目前倉庫
這一項回答的是「如何限制 Codex CLI 只能修改目前程式碼倉庫」。不要只檢查 Git 分支是否正確,還要檢查工作目錄以外的讀取與寫入。
核查對象
在每個測試工作區記錄:
- 工作目錄與可寫入根目錄。
.git、子模組、忽略檔與專案設定文件。- 暫存目錄、建置輸出、DerivedData 與快取位置。
- 同一遠端 Mac 上其他倉庫的檔名、內容與 Git 歷史。
- 工作區外的腳本、符號連結與可執行檔。
測試方法與證據
在倉庫 A 內提交一個明確的任務,要求 Codex CLI 修改指定檔案;同時把倉庫 B 放在另一個工作區,建立不可混淆的測試標記。接著測試三種動作:
- 讀取倉庫 B 的指定檔案。
- 寫入倉庫 B 或工作區外的測試檔。
- 透過符號連結、子模組或暫存路徑繞出倉庫 A。
保留 Agent 工作階段紀錄、拒絕訊息、檔案差異與系統稽核紀錄。通過條件是:非必要讀取被拒絕、非目前倉庫的寫入被拒絕,而且任務結束後沒有跨倉庫殘留檔案。若倉庫 B 能被讀取或修改,先停止多倉庫模式;不要用更嚴格的提示詞掩蓋權限缺口。
第二個指標:網路、外部工具與 MCP 必須分開驗收
遠端 Mac 上的 Codex CLI 可能同時涉及模型通訊、依賴下載、Git 操作、API 呼叫與外部工具執行。這些不是同一條網路權限,也不能把「關閉審批」理解成「已經開啟網路」。
逐項建立放行證據
在 T1 網路驗收中,先使用預設拒絕或最小放行設定,分別測試:
- 模型請求是否能正常完成。
- 套件來源、Git 遠端與指定 API 是否能連線。
- 未列入允許範圍的網域是否被拒絕。
- 外部工具或 MCP 執行器是否能自行建立另一條網路路徑。
- 被拒絕的請求是否留下時間、目的地與工作階段紀錄。
Codex 官方倉庫中的網路設定說明可用來對照目前行為。驗收證據應包含放行前後的請求紀錄與設定快照,而不是只截取一次成功的建置結果。
社群 Issue 可以提供邊界案例,但不能當成普遍漏洞證據。例如相關社群報告只能標為「待復核風險」:你要在自己的 macOS 帳戶、Codex CLI 版本與工具鏈上重現,才能決定是否阻擋上線。
第三個指標:帳戶、SSH Agent 與 Keychain 的可見範圍
「遠端 Mac 上的 Codex CLI 能否存取 SSH 金鑰和 macOS Keychain」不能用一句「有沙盒所以不能」回答。沙盒、系統帳戶、SSH Agent、登入鑰匙圈與 Xcode 簽署身份是不同層次,必須逐一測試。
三組憑證測試
在 T2 建立三組互不混用的測試:
- 無憑證組:不啟動 SSH Agent,不提供 API Token,也不解鎖額外 Keychain。
- 唯讀憑證組:只允許讀取測試倉庫,禁止推送、發佈與簽署。
- 短期憑證組:使用可撤銷、具時效且僅限測試用途的憑證,完成後立即撤銷。
要記錄的證據包括執行程序所屬帳戶、環境變數、SSH Agent Socket、可列出的鑰匙圈項目、Xcode 簽署身份與實際上傳結果。Apple 的Keychain 存取授權說明可協助你確認授權提示與鑰匙圈分區,不要把「檔案不存在」當成「密碼永遠不可用」。
通過條件是:無憑證組無法讀取秘密;唯讀組無法推送或簽署;短期憑證組只完成明確測試動作。任何預設 Agent 工作階段都不應取得生產簽署私鑰、發佈憑證或長期 SSH 私鑰。
第四個指標:Xcode 執行成功,不等於流水線可重現
在 T3 執行驗收中,使用可回收的測試專案檢查 xcodebuild、模擬器、腳本、快取與派生資料。命令中的專案名稱、Scheme、路徑、Team ID 與帳戶全部使用佔位符,例如 <PROJECT_PATH>、<SCHEME_NAME>、<TEAM_ID>,不要在文件中展示真實識別資料。
你要區分兩件事:
- Codex CLI 是否有能力執行某個命令。
- 同一命令在乾淨工作區、指定 Xcode 環境與限定憑證下,是否能重複產生相同結果。
多倉庫並行時,特別檢查四個串擾面:工作區、DerivedData、模擬器狀態與本機連接埠。若倉庫 A 的建置可以讀到倉庫 B 的快取或產物,或兩個任務會互相覆寫測試資料,應改為單倉庫輪換、獨立節點分池,或只讓 Agent 做程式碼審查。
第五個指標:中斷、清理與重啟後能否恢復
「Codex CLI 多倉庫任務如何清理工作區和殘留程序」的答案,必須來自故障演練,而不是一段理想化的結束腳本。
在 T4 依序模擬:
- SSH 連線中斷。
- Codex CLI 非正常退出。
- 任務在建置或檔案修改中途被停止。
- Mac 重啟。
- 從倉庫 A 切換至倉庫 B。
- 使用新帳戶重新啟動任務。
每次都要核對程序、暫存檔、工作區差異、登入狀態、憑證、日誌與鎖定檔。通過條件是:舊任務程序可辨識並終止,暫存資料可清除,倉庫切換後沒有沿用前一任務的環境變數或憑證,重啟後也不會自動恢復未審核的高權限工作。
用條件分支決定四種處置,而不是只標記安全
完成五類指標後,按以下條件作決定:
- 若獨立帳戶、工作區拒絕、網路放行紀錄、憑證分層、Xcode 串擾測試與重啟恢復全部通過,則可在限定倉庫範圍內上線,並保留持續稽核。
- 若文件隔離通過,但網路、Keychain 或 Xcode 簽署仍需人工介入,則限用於非生產倉庫與單倉庫輪換。
- 若多倉庫只在共享管理員帳戶中可行,或任何倉庫能跨界寫入,則重建節點,改用獨立帳戶與獨立工作區。
- 若無法保留任務紀錄、無法清理殘留程序,或重啟後權限狀態不明,則暫緩上線,先採用雙軌 CI 或短期隔離試跑。
以下三張表可在 T0 至 T4 的里程碑中直接使用。它們是驗收欄位,不是對任何遠端 Mac 節點已完成測試的宣稱;真實結果必須填入你的設定快照與日誌。
| 驗收指標 | 核查對象 | 必留證據 | 通過條件 | 停止條件 |
|---|---|---|---|---|
| 文件 | 工作區、.git、暫存與快取 |
差異檔、拒絕紀錄、權限快照 | 只能修改目前倉庫 | 可讀寫其他倉庫 |
| 網路 | 模型、Git、套件、API、外部工具 | 放行清單、請求紀錄 | 未授權目的地被拒絕 | 工具可繞過限制 |
| 憑證 | SSH Agent、環境變數、Keychain、簽署身份 | 帳戶與程序紀錄 | 無憑證或唯讀狀態符合預期 | 生產私鑰可見 |
| Xcode | 建置、模擬器、腳本、DerivedData | 建置日誌、產物差異 | 工作區與快取不串擾 | 任務互相覆寫 |
| 恢復 | 中斷、退出、重啟、切換倉庫 | 清理紀錄、重啟後快照 | 無殘留程序與秘密 | 狀態無法重建 |
| 測試階段 | 建議輸入 | 你要觀察的結果 | 後續動作 |
|---|---|---|---|
| T0 帳戶與工作區 | 非生產倉庫、獨立帳戶 | 根目錄與寫入範圍 | 不符即停止多倉庫 |
| T1 網路與工具 | 預設拒絕、指定網域 | 請求是否逐項留下紀錄 | 只保留必要放行 |
| T2 憑證 | 無、唯讀、短期三組 | 讀取、推送、簽署是否分層 | 撤銷測試憑證 |
| T3 Xcode | 可回收測試專案 | 建置與並行是否串擾 | 單倉庫或分池 |
| T4 恢復 | 中斷、退出、重啟 | 程序、檔案與權限是否清乾淨 | 決定上線或暫緩 |
| 結果 | 適合的使用方式 | 不應允許的事情 | 建議處置 |
|---|---|---|---|
| 可上線 | 限定多倉庫、自動化任務 | 生產秘密無限制暴露 | 保留稽核與定期復核 |
| 限用 | 單倉庫、非生產建置、程式碼審查 | 任意跨倉庫修改 | 使用短期節點 |
| 重建節點 | 權限或清理測試失敗 | 共享管理員帳戶 | 重做帳戶與工作區設計 |
| 暫緩 | 無法取得完整證據 | 長期在線高權限任務 | 改雙軌 CI 或人工審批 |
如果你需要的是短期隔離試跑,先查看 VMSPIN 的遠端 Mac 方案入口,並在非生產倉庫完成上述復測;需要比較週期與方案成本時,可再參考遠端 Mac 租賃價格頁。不要因為節點能透過 SSH 連線,就跳過 Keychain、簽署身份與重啟恢復驗收。
對需要長期運行多倉庫 Agent 的團隊而言,共享 Mac 的主要缺點通常不是啟動速度,而是帳戶邊界難以證明、工作區與快取容易殘留,以及生產憑證可能跟著長期在線工作階段存在。相較之下,直接把任務放在現有 Windows 或 Linux 伺服器上,又會缺少 Xcode 與 macOS 工具鏈;自行購買 Mac mini 則要自行處理硬體、維護、斷線與節點回收。若你的需求是隔離試跑、短期建置或尚未確定的多倉庫流程,租用 VMSPIN 的遠端 Mac 會比先承擔一台長期閒置的實體 Mac 更容易按驗收結果調整;但長期固定重負載、必須接實體裝置或需要完全掌控硬體時,自購 Mac 仍可能更合適。
把「安全」改寫成可重現的指標,才是 Codex CLI 遠端 Mac 多倉庫上線的門檻。先完成 T0 至 T4,再依證據選擇上線、限用、重建節點或暫緩;下一次 Codex CLI 權限模型、MCP 執行方式、macOS 或 Xcode 版本變更時,重新核對官方文件,平時至少每季復核一次。