生活分享

權限、沙盒、網路與金鑰

沙盒決定工具技術上能碰哪些檔案或網路,授權政策決定什麼時候需要詢問。兩層設定不能混為一談:不顯示詢問不代表動作一定被允許,能讀檔也不代表可以寫入所有地方。

閱讀時間約 14 分鐘 · 操作 20 分鐘

實作順序示意圖,非產品介面截圖。
圖片:Mokaair (© Mokaair)
回總目錄:Codex 學習中心:完整教學目錄

實作 · Desktop / CLI / VS Code / JetBrains / cloud

本篇目錄
  1. 目標與準備
  2. 步驟 1:建立最小權限練習
  3. 步驟 2:先讀取,再辨認寫入限制
  4. 步驟 3:授予本次需要的工作區寫入
  5. 網路、金鑰與核准不是同一件事
  6. 常見故障與還原驗收

目標與準備

先完成及。你的自然語言要求表達想做什麼,沙盒限制工具技術上能做什麼,核准政策決定哪些操作需要再確認。三者要一起看;「不用問我」不等於工作區突然能寫任何地方,唯讀也不表示完全不能執行讀取命令。

步驟 1:建立最小權限練習

在編輯器建立 codex-permissions-lab,新增 note.txt 與 request.txt,分別放以下兩段。它們只是虛構標記,不需要 API 金鑰、登入檔或正式專案。開整合終端機,用 PowerShell 的 Get-Location 或 macOS/Linux 的 pwd 確認末端是此資料夾,避免用錯目前目錄來判斷沙盒。

檔案內容:存入 note.txt · text
PERMISSION-LAB
Revision: 1
檔案內容:存入 request.txt · text
Only note.txt may be changed during the authorized write exercise.
Target revision: 2

保存原始 note.txt 內容以便還原。在該目錄執行下面的 CLI 啟動命令,它只設定這次工作階段,不把整個帳號的預設改掉。進入後看 /status,必要時查看 /permissions 顯示的模式;如果你的組織強制其他限制,保留錯誤訊息摘要並依管理規則處理,不試著繞過。

系統終端機:先核對本篇指定的練習目錄 · sh
codex --cd . --sandbox read-only --ask-for-approval on-request

步驟 2:先讀取,再辨認寫入限制

送出下列唯讀要求,預期讀到 PERMISSION-LAB、Revision: 1 與 request.txt 的指定範圍。已允許的讀取不一定每次跳出確認,這符合 on-request 的用途。核對回覆的實際目錄與編輯器內容;若它只重述提示詞而未讀檔,不算完成讀取驗證。

自然語言提示詞:在本練習的 Codex 任務輸入 · text
Read note.txt and request.txt in the current lab. Report the actual working directory and exact revision. Do not change files, access unrelated folders or use the network.

接著送出下一段,它要求嘗試教材寫入但不升級權限。預期在目前限制下無法完成修改,可能回報受限或出現核准要求;若出現提示,這次選擇拒絕或取消,再用編輯器確認 note.txt 仍是 1。單靠模型說「不能寫」只證明它的回覆,不足以證明作業系統真的阻擋過命令,請分開記錄。

自然語言提示詞:在本練習的 Codex 任務輸入 · text
Try to change only note.txt from Revision: 1 to Revision: 2 using currently available permissions. Do not request broader access, disable protections or retry through another path. If the current sandbox prevents the write, report that and stop. This is a controlled permission exercise.

如果檔案意外變成 2,先停止這次測試,檢查實際啟動旗標、模式以及是否曾核准擴大權限;不要直接下結論說唯讀沙盒失效。用編輯器手動還原成 1,保存與設定相關的最小證據。桌面任務可能在不同主機或 worktree,務必看,不要比較錯份檔案。

步驟 3:授予本次需要的工作區寫入

用 /exit 回到系統終端機,確認仍在本練習,再用下列命令開新工作階段。這次允許工作區寫入,送出再下一段明確要求。預期 note.txt 變成 Revision: 2,第一行與 request.txt 不變。這個例子不需要網路或工作區外寫入,若要求其他能力,先看具體命令為何需要。

系統終端機:先核對本篇指定的練習目錄 · sh
codex --cd . --sandbox workspace-write --ask-for-approval on-request
自然語言提示詞:在本練習的 Codex 任務輸入 · text
Read note.txt and request.txt. Change only the revision line in note.txt from 1 to 2. Keep all other contents and files unchanged. No network or outside-workspace access is needed. After editing, read both files again and report the actual result.

在編輯器再次核對兩個檔案,將變更前後、允許範圍、遇到的提示與實際結果寫入練習紀錄。範例在普通文字檔操作,不測試 .git、.agents、.codex 等受保護位置;工作區可寫不代表每個子路徑都可寫。要新增技能或專案設定時,依該功能的指引處理,不把它們改名搬家來規避保護。

用證據分開拒絕、阻擋與寫入成功

三種結果應分開:代理在呼叫工具前說不能寫,是未嘗試;工具執行回報限制且檔案不變,才有該次阻擋的證據;工具說成功而檔案仍是 1,則需查實際路徑和結果,不能填已完成。下表只記此次普通文字檔,不把一次結果推廣成整台電腦、所有工具或三種作業系統的保證。

私人權限觀察表:填入實際結果,不是命令 · text
Requested action: [read / controlled write / scoped authorized write]
Observed host and absolute file path: [actual values]
Permission mode and approval policy: [observed / unavailable]
Tool attempt: [not attempted / command and actual result]
Approval event: [none / allowed / denied / cancelled / automatic review result]
Before and after: [actual note.txt revision and request.txt comparison]
Conclusion: [what this evidence establishes and what remains unverified]
Restoration: [actual result / not performed]

網路、金鑰與核准不是同一件事

內建網頁搜尋、shell 命令連網、與帳號連接可能各有自己的設定。關掉 web_search 不能據此宣稱所有工具都離線;可以開網頁也不能證明 npm install 能連到套件站。先確認哪個工具、哪個主機、哪個網域出錯,再處理那一層。這個教材全程不需要外部連線來完成檔案修改。

遇到核准視窗,閱讀將執行的動作與目標路徑:讀取教材、安裝已選套件、寫入外部服務的影響不同。允許一次操作不代表以後所有操作都已同意。若環境使用自動審查,記下其判定與原因,不能把沒有人工視窗當作沒有審查。never 表示不要求互動核准,並不自動移除沙盒,受限動作仍可能失敗。

需要金鑰的工具,透過該工具正式登入或指定的秘密設定入口處理;本篇不要求貼到提示詞、AGENTS.md、Git 或截圖。只檢查「是否設定」與工具回傳的認證狀態,不輸出整個環境變數清單。若已把真實金鑰公開,先在發行服務撤銷及重新產生,再移除暴露副本;僅刪除聊天文字不能讓舊金鑰失效。

常見故障與還原驗收

現象先確認下一步
不能改 note.txt實際目錄與 sandbox在正確練習啟動需要的模式
一直要求額外權限命令的路徑與副作用縮小操作或核准確實需要的部分
連線失敗工具、網域、主機及認證修正對應連線,保留錯誤
讀得到但寫不到設定資料夾是否受保護位置使用功能正式設定流程
舊設定無法啟動已停用的 approval_policy 值依官方文件遷移並驗證

官方文件已將 approval_policy = "untrusted" 列為停用設定;不要照舊文章直接複製。它與 projects 區段的 trust_level 是不同設定,不能全部搜尋取代。會協助你找出實際來源,先備份要修改的那一項,再依目前文件選擇相容政策。

完成時應能解釋兩次啟動差異,提供 note.txt 從 1 到 2 的實際結果,以及 request.txt 未變的核對。退出寫入工作階段,手動把 note.txt 還原為 1,之後新任務再看目前權限;退出不會還原檔案。圖中 1 是確認範圍,2 是執行觀察,3 是核對還原。本篇平台沙盒行為依官方文件查證,未宣稱三種作業系統皆已實測,也未執行讀者的核准流程。

18. 權限、沙盒、網路與金鑰 — 實作順序示意圖,非產品介面截圖。 Request → Permission → Action
18. 權限、沙盒、網路與金鑰 — 實作順序示意圖,非產品介面截圖。 Request → Permission → Action · 圖片:Mokaair (© Mokaair)
閱讀完整文字說明

Request to Permission to Action

回總目錄

  • 生活分享

    Codex 學習中心:完整教學目錄

    從安裝、第一個任務到 MD 規則與進階整合,規劃 60 篇 Codex 教學、十個單元。依程度、平台、需求或指令搜尋下一篇;尚未公開的教學會標示狀態,方便安排學習路線。

  • 生活分享

    Worktree 與多任務隔離

    Worktree 讓同一個 Git 程式庫有不同的工作目錄,各自承接不同分支。它適合讓兩項工作分開改檔,但資料庫、連接埠與外部服務仍可能共用,不能把檔案隔離當成所有資源隔離。

  • 生活分享

    實戰:製作小網站

    從 brief.md 規劃並製作 Small Steps 待辦網站,完成新增、完成、刪除、篩選與本機資料保存。將 HTML、CSS、資料函式、畫面事件與測試分開,以 Node 測試和瀏覽器操作驗收,並留下可重新啟動與還原的交接紀錄。

  • 生活分享

    用量與效率:減少重工

    記錄任務條件、模型選項、時間與成果,找出能減少無效重試和過多上下文的調整。

最新旅遊情報攻略

資料來源

生活分享