讓 Agent 安全地執行程式碼:沙箱的三層防護
允許模型執行程式碼是能力躍升,也是風險躍升。這是可實作的三層防護。
程式碼執行能讓 Agent 從「會講」變成「會做」,但它同時把提示注入的後果從錯誤答案升級為系統入侵。防護必須在執行環境本身,不能只靠提示。
第一層:隔離的執行環境
- 獨立容器,不掛載主機檔案系統。
- 唯讀根檔案系統,只有
/tmp之類的暫存目錄可寫。 - 非 root 使用者執行。
- 每次任務用完即銷毀,不重複使用容器。
第二層:資源與網路限制
docker run --rm \
--network=none \
--memory=512m --cpus=1 \
--pids-limit=64 \
--read-only --tmpfs /tmp:size=64m \
-u 1000:1000 \
sandbox-python:latest python /tmp/task.py--network=none 是最有價值的一條。多數需要執行程式碼的任務(資料處理、計算、格式轉換)不需要網路,關掉它就擋掉了資料外洩與對外攻擊。
第三層:逾時與輸出限制
proc = subprocess.run(cmd, capture_output=True, timeout=20)
out = proc.stdout.decode('utf-8', 'replace')[:8000]不要做的事
- 不要用
eval或exec在主程序裡跑模型產出的程式碼。 - 不要把真實憑證以環境變數注入沙箱。
- 不要因為「只是內部工具」就省略隔離——提示注入不分內外網。
沙箱逃逸是真實存在的風險。把沙箱當成降低風險的手段,而不是絕對保證;敏感系統仍要有稽核與最小權限設計。