Windows 沙箱
Windows 沙箱
設定 Windows 上的原生 Codex 沙箱並排查其問題
通過原生 ChatGPT 桌面應用、 CLI 或 IDE 擴充套件,在 Windows 上使用 Codex。
Windows 版 ChatGPT 桌面應用支援並行聊天、 工作樹、計劃任務、Git 功能、內建瀏覽器、檔案預覽、 外掛和技能等核心工作流程。
該應用可以使用 Windows 沙箱在 PowerShell 中原生執行, 無需 WSL 或虛擬機器。這樣既能讓 Codex 融入 Windows 原生 工作流程,又能對檔案系統和網路存取實施權限限制。
有關企業安裝,請參閱 Windows 部署指南。
Codex 支援三種 Windows 沙箱實現:
mxc:相容的 Windows 裝置上推薦使用的沙箱。採用原生程序隔離,無需管理員核准的設定、額外的 Windows 帳戶或本機防火牆規則。elevated:MXC 不可用或已停用時首選的舊版回退方案。設定需要管理員核准。沙箱中的命令以非管理員權限執行。unelevated:無法執行提權設定且組織策略允許時使用的舊版回退方案。其網路隔離弱於elevated,且不支援禁止讀取指定路徑。
設定 Windows 沙箱
Windows 沙箱會對命令及其子程序強制執行當前生效的檔案系統和網路權限。權限設定決定哪些路徑可讀或可寫,以及是否允許網路存取。審批策略則單獨控制 Codex 何時請求以更高權限執行命令。請參閱沙箱和審批。
啟用 MXC
對於個人帳戶,只要裝置支援,桌面應用就會自動優先使用 MXC。對於企業部署或獨立使用 CLI 的場景,可以通過以下設定啟用相同行為。
在 config.toml 中:
[features]
prefer_mxc = true設定 prefer_mxc = true 後,只要裝置和策略支援,Codex 就會使用 MXC 執行 Windows 命令。
否則,它會沿用現有的舊版沙箱選擇和設定流程。
對於裝置支援情況或策略各不相同的企業,請將 windows.sandbox 保持為組織允許的舊版實現,即 elevated 或 unelevated,作為回退方案。
管理員可以將此設定作為預設值分發,也可以通過 requirements.toml 強制設定 features.prefer_mxc = true。兩種方式都允許回退到舊版實現。有關預設值與強制要求的區別,請參閱受管理的設定。
保持 MXC 停用
要阻止組織內使用 MXC,請將以下內容新增到託管的
requirements.toml:
[windows]
allow_mxc = false這會阻止自動選擇 MXC,也會阻止顯式設定 windows.sandbox = "mxc"。現有的舊版沙箱設定和要求仍然適用。
MXC 相容性
主機必須已具備所需的 Microsoft Execution Containers (MXC) 功能,Microsoft 正在向 Windows 11 裝置逐步推出這些功能。Microsoft 在 Windows 11 24H2 (build 26100.9278) 和 25H2 (build 26200.9278) 中引入了 MXC 程序隔離。請使用以下命令驗證你的裝置是否支援 MXC。
在 Codex CLI 0.162.0 及更高版本中,你可以針對單條命令測試 MXC,而不更改已儲存的沙箱選擇。在專案目錄中執行:
codex -c windows.sandbox=mxc sandbox --include-managed-config --permission-profile :workspace -- cmd.exe /d /c echo MXC_OK
$LASTEXITCODE預期輸出為 MXC_OK,退出碼為 0。這會檢查命令能否在工作區權限設定和受管理的要求下啟動。
如果所需的原生功能不可用,或策略禁止使用 MXC,顯式選擇 windows.sandbox = "mxc" 會失敗。
請注意以下相容性限制:
- 受管網路要求
allow_local_binding = true實際生效。MXC 允許與主機迴環地址上的服務進行雙向連線。代理域名規則仍適用於經代理轉發的流量,但代理對專用網路目標的額外檢查會被移除。 - 前臺命令退出時,剩餘子程序會停止。請測試依賴脫離前臺執行的開發伺服器的工作流程。
- 與 Linux 和 WSL 一樣,禁止讀取的 glob 模式會使用每個沙箱程序啟動時匹配的檔案。之後建立的匹配檔案,如果該執行中程序的其他權限允許存取,仍可被它讀取。長時間執行的 shell、指令碼、監視程式和開發伺服器會在各自的整個生命週期內保留這份快照,而非在整個 Codex 會話期間保留。請參閱禁止讀取的 glob 模式的匹配時機。
設定舊版回退方案
在 config.toml 中選擇回退實現:
[windows]
sandbox = "elevated" # or "unelevated"elevated 是首選的舊版回退方案。它使用專用的低權限沙箱使用者、檔案系統權限邊界、防火牆規則,以及沙箱內命令執行所需的本機策略更改。
與 MXC 一樣,elevated 會在每個沙箱程序啟動時列舉禁止讀取的 glob 模式所匹配的檔案。之後建立的匹配檔案,如果該執行中程序的其他權限允許存取,仍可被它讀取。有關這對長時間執行的程序的影響,請參閱禁止讀取的 glob 模式的匹配時機。
unelevated 是一種舊版回退方案。它使用從當前使用者派生的受限 Windows 令牌執行命令,應用基於 ACL 的檔案系統邊界,並使用環境級離線控制來代替專用的離線使用者防火牆規則。其網路隔離弱於 elevated,且不支援禁止讀取指定路徑,但當本機或企業策略阻止需要管理員核准的設定時,它仍然有用。
裝置和策略支援時,請使用 MXC。否則,請優先使用 elevated,並將 unelevated 作為次選回退方案。
企業管理員可以限制 Codex 能使用的舊版沙箱實現,
具體可通過 requirements.toml 設定:
[windows]
allowed_sandbox_implementations = ["elevated"]此範例允許 elevated,並阻止回退到 unelevated。當 MXC 可用時,它不會限制 mxc。其他受管理的權限和網路要求仍然適用。要允許使用任一舊版實現,請同時包含這兩個值;未選擇模式時,Codex 會優先使用 elevated。
有關支援的值,請參閱 requirements.toml 參考。要同時禁止 MXC,請使用單獨的 windows.allow_mxc 要求。
預設情況下,兩種舊版沙箱模式還會使用私有桌面,以提供更強的 UI 隔離。
由 IT 設定舊版 elevated 沙箱
對於沒有本機管理員權限的員工,IT 可以在員工啟動 Codex 前安裝 CLI 並設定 elevated 沙箱。在具有管理員權限的 部署程序中執行:
codex sandbox setup --elevated --user 'DOMAIN\alice' --codex-home 'C:\Users\alice\.codex'將身份和路徑替換為員工的 Windows 身份和 CODEX_HOME。該命令會讀取該使用者的設定,設定沙箱,並儲存 windows.sandbox = "elevated"。隨後,員工即可從普通終端執行 Codex。
沙箱權限
Windows 版本矩陣
| Windows 版本 | 支援級別 | 說明 |
|---|---|---|
| Windows 11 | 推薦 | Windows 上執行 Codex 的最佳基準。如果要標準化企業部署,請使用此版本。 |
| 近期且已完全更新的 Windows 10 | 盡力支援 | 可以執行,但可靠性低於 Windows 11。在 Windows 10 上,Codex 依賴包括 ConPTY 在內的現代控制台支援。實際需要 Windows 10 版本 1809 或更高版本。 |
| 較舊的 Windows 10 版本 | 不推薦 | 更可能缺少 ConPTY 等必需的控制台元件,也更可能在企業環境中失敗。 |
其他環境前提:
winget應當可用。如果缺失,請更新 Windows 或安裝 Windows 程式包管理器,然後再設定 Codex。- 舊版
elevated沙箱依賴經管理員核准的設定流程。 - 即使作業系統版本本身符合要求,某些由企業管理的裝置仍會阻止 必需的設定步驟。
- MXC 還需要 MXC 相容性中所述的原生功能;此矩陣不能確定 MXC 在特定裝置上是否可用。
檢查沙箱讀取權限
當命令無法讀取目錄時,請檢查當前生效的權限設定檔、
託管要求和 Windows 檔案權限。在 CLI 中,使用 /status
和 /debug-config 檢查當前會話和設定。請讓
管理員審查託管限制,而不是停用沙箱。
預設使用原生 Windows 沙箱。選擇 WSL 的情況包括: 你需要 Linux 原生工具、工作流程已在 WSL2 中執行,或 現有的原生 Windows 實現無法滿足你的需求。
故障排除和常見問題
如果你正在排查受管 Windows 電腦的問題,請先檢查原生 沙箱模式、Windows 版本以及 Codex 顯示的策略錯誤。對於 MXC, 請檢查相容性和實際生效的網路策略。 舊版沙箱的問題可能源於設定過程、登入權限或檔案系統權限。
舊版沙箱設定失敗
如果 Codex 無法完成 elevated 沙箱設定,最常見的原因
包括:
- Windows UAC 或管理員提示被拒絕,
- 電腦不允許建立本機使用者或組,
- 電腦不允許更改防火牆規則,
- 電腦阻止沙箱使用者所需的登入權限,
- 或其他企業策略阻止了部分設定流程。
可嘗試以下操作:
- 再次嘗試設定
elevated沙箱,並在環境允許的情況下 核准管理員權限提示。 - 如果公司筆記型電腦阻止此操作,請向 IT 團隊確認這臺電腦 是否允許經管理員核准後建立本機使用者和使用者組、設定防火牆, 以及授予沙箱使用者所需的登入權限。
- 如果設定仍然失敗,且受管策略允許,請在
排查問題期間使用
unelevated。
Codex 將我切換到了非提升權限沙箱
unelevated 實現可能是在設定中選定的,也可能是在
無法完成 elevated 設定時使用的回退方案。
- Codex 仍可在沙箱模式下執行。
- 它仍會應用基於 ACL 的檔案系統邊界,但不會使用
elevated的獨立沙箱使用者邊界,網路 隔離也較弱。 - 這是一個實用的備用方案,但不是首選的長期企業 設定。
對於受管企業筆記型電腦,請先檢查 MXC 相容性。
如果 MXC 不可用或已停用,請讓 IT 團隊設定
elevated。
我看到了 Windows 錯誤 1385
如果沙箱命令因錯誤 1385 而失敗,說明 Windows 拒絕了沙箱使用者
啟動命令所需的登入類型。
實際上,這通常意味著 Codex 已成功建立沙箱使用者, 但 Windows 策略仍阻止這些使用者啟動沙箱 命令。
處理方法:
- 詢問 IT 團隊,裝置策略是否向 Codex 建立的沙箱使用者 授予了所需的登入權限。
- 如果問題僅影響部分電腦或團隊,請比較組策略或 OU 差異。
- 如果需要立即繼續工作,請在調查策略問題期間
使用
unelevated沙箱。 - 傳送
CODEX_HOME/.sandbox/sandbox.log,並附上你的 Windows 版本和 簡短的故障說明。
Codex 警告某些資料夾可由 Everyone 寫入
Codex 可能會警告某些資料夾可由 Everyone 寫入。
如果看到此警告,則這些資料夾的 Windows 權限過於寬泛, 沙箱無法對其提供完整保護。
處理方法:
- 檢查 Codex 在警告中列出的資料夾。
- 如果適合你的環境,請移除這些資料夾的
Everyone寫入 權限。 - 修正這些權限後,重啟 Codex 或重新執行沙箱設定。
如果不確定如何更改這些權限,請向 IT 團隊尋求幫助。
沙箱命令無法存取網路
根據所用權限模式,某些 Codex 聊天會被有意設定為 無法存取出站網路。
如果任務因無法存取網路而失敗:
- 檢查該任務是否本應在停用網路的情況下執行。
- 如果你原本需要網路存取,請重啟 Codex 並重試。
- 如果問題持續出現,請收集沙箱日誌,以便團隊檢查 電腦是否處於不完整或損壞的沙箱狀態。
沙箱之前可以正常工作,後來停止了
以下情況可能導致此問題:
- 移動儲存庫或工作區,
- 更改電腦權限,
- 更改 Windows 策略,
- 或更改其他系統設定。
可嘗試以下操作:
- 重啟 Codex。
- 對於 MXC,重新執行相容性探測並檢查
實際生效的網路策略。對於舊版
elevated實現,請嘗試 重新設定沙箱。 - 如果需要舊版沙箱且受管策略允許,請使用
unelevated作為臨時回退方案。 - 收集沙箱日誌以供審查。
我需要向 OpenAI 傳送診斷資訊
如果問題仍然存在,請傳送:
CODEX_HOME/.sandbox/sandbox.log
同時附上以下資訊也會有所幫助:
- 簡要描述你當時嘗試執行的操作,
- 所選實現:
mxc、elevated或unelevated, - 應用中顯示的錯誤訊息,
- 是否出現了
1385或其他 Windows 或 PowerShell 錯誤, - Windows 內部版本號,
- 以及你使用的是 Windows 11 還是 Windows 10。
請勿傳送:
CODEX_HOME/.sandbox-secrets/的內容
IDE 擴充套件已安裝但無響應
你的系統可能缺少某些原生依賴項所需的 C++ 開發工具:
- Visual Studio Build Tools(C++ 工作負載)
- Microsoft Visual C++ Redistributable (x64)
- 使用
winget時,執行winget install --id Microsoft.VisualStudio.2022.BuildTools -e
安裝後,請完全重啟 VS Code。