MODULE 05 · STEP 14 · 可練習
權限、隔離與驗收
Pi 不只是一個聊天視窗。它可以讀寫檔案、執行命令,擴充功能(Extension)還可以擴充更多能力。這正是它能完成真實任務的原因,也是你必須認真劃定邊界的原因。內建工具、擴充功能與普通本地程序一樣,以啟動 Pi 的程序權限執行;Pi 沒有內建沙箱或逐次權限彈窗。
文字限制不是安全沙箱
在任務中寫“不要存取其他目錄”很有必要,因為它說明了工作範圍。但這句話不會從作業系統層面取消權限。如果 Pi 以你的使用者身份執行,它所呼叫的命令和擴充功能通常也擁有該使用者的權限。
處理不可信的倉庫、指令碼或資料時,需要容器、虛擬機器或專用帳戶等真正的隔離邊界。專案信賴(Project Trust)只決定是否載入專案級設定和資源,不是執行時沙箱。不要對來路不明的專案一路確認。
專案信賴還有明確例外:AGENTS.override.md、AGENTS.md 和 CLAUDE.md 預設仍會作為上下文檔案載入。拒絕信賴不是“什麼專案文字都不讀取”;對陌生倉庫應先在隔離環境審查,或用 --no-context-files 關閉這類上下文載入,並繼續遵守最小權限原則。
倉庫文件、註釋和構建輸出都可能包含 Prompt Injection。專案信賴無法可靠識別或阻止這些內容影響 Agent;不可信輸入仍要按不可信程式碼和資料處理。
容器也要看掛載邊界:把宿主工作目錄以可寫方式掛進容器,容器裡的寫入仍會改動宿主檔案;無意掛載 ~/.pi/agent 還會暴露認證與工作階段。使用宿主 Pi 再把部分工具路由到隔離環境時,其他擴充功能也可能繼續在宿主執行。真正隔離前必須看清程序、檔案、憑據和網路分別在哪裡。
開始前的四問
在讓 Pi 執行任何陌生專案之前,先回答:
- 材料來源是否可信,是否可能包含誘導 Agent 執行操作的文字?
- 目錄中是否有金鑰、客戶資料或與任務無關的私人檔案?
- 任務是否會執行未知指令碼、安裝依賴或存取網路?
- 任務是否會覆蓋、移動、刪除檔案,或向外部傳送內容?
任一項答不清時,先停止執行。可以在隔離副本中做只讀檢查,或請有經驗的人複核;不要把“我在提示詞裡寫了禁止”當成權限控制。
三層防線
第一層是縮小範圍
使用獨立練習目錄,只放進完成任務需要的材料。不要把密碼、API Key、客戶資料和與任務無關的私人檔案放在同一目錄。
第二層是保留恢復點
對程式碼專案使用 Git,對文件和素材保留備份。高風險操作前先讓 Pi 列出目標、數量和影響,再執行。刪除時優先使用可恢復的方式。
第三層是獨立驗收
不使用 Agent 最後一段總結作為唯一證據。根據任務型別檢查實際產物:
- 檔案整理:核對檔案數、原文指紋和內容欄位。
- 程式碼修改:檢視變更差異,執行構建和測試,再人工操作關鍵介面。
- 網站釋出:開啟正式網域,檢查桌面端和手機端,確認部署對應最新提交。
- 對外傳送:在最後一步保留人工確認,檢查收件人、範圍和附件。
出問題時保留現場
如果你發現路徑錯了、不該修改的檔案變了,先停止新操作。不要立刻讓 Agent “全部清理乾淨”,否則可能同時清掉調查線索。先記錄發生了什麼、哪些檔案受影響,再從 Git 或備份恢復。
安全不是某一個開關。它是一套可重複的工作習慣:縮小範圍,保留恢復點,觀察真實動作,獨立驗收結果。
無破壞的恢復演練
本練習不刪除檔案。假設你發現 Agent 可能寫錯了目錄,立即停止繼續傳送任務,並在普通終端機記錄:
pwd
date
find . -maxdepth 3 -type f -print
git status --short 2>/dev/null || true把實際執行過的命令、看到的錯誤和疑似受影響路徑寫進一份臨時事故記錄。接下來只檢視差異或備份,不直接執行批次清理。若專案使用 Git,可以檢視狀態和差異;是否恢復、恢復哪些檔案,要在目標已經明確後單獨決定。
這套順序的重點是保留證據:停止新操作 → 記錄位置與現象 → 查明影響 → 確認恢復目標 → 執行恢復 → 再次驗收。它比一句“全部清理乾淨”更可控。
全書完成檢查
- 練習目錄與真實工作資料分開,不含金鑰和私人檔案。
- 你能區分普通終端機、Pi 編輯區、專案資源和系統隔離邊界。
- 重要任務有輸入、輸出、工作階段名稱、檢查點與恢復路徑。
- 技能(Skill)或擴充功能的來源可讀、載入範圍明確,並能停用。
- 任務結果由檔案、差異、測試或真實介面驗收,不只看 Agent 總結。
- 對外傳送、付費、釋出和不可恢復操作仍保留人工確認。
如果這些專案還不能穩定做到,先回到對應課程或實作案例,不要急著把工作擴大到陌生倉庫、長期無人值守任務或高權限環境。
本章依據
安全與專案信賴邊界核驗於 2026-09-09。