Aklman · Library

07 / 第七章

代码执行 · 沙箱、文件系统与安全边界.

让 Agent 写代码容易,让它安全地运行代码才是真正的工程挑战。


研究助手抓到数据后,得跑分析代码才能算趋势、出图 —— 这就是它的第三个工具 run_python。让模型写代码很容易,难的是让它安全地跑:模型写的代码是不可信输入,在你的 host 上直接跑,blast radius 就是你整台机器。这一章讲沙箱、文件系统隔离和那条安全边界,把「会写代码」变成「能放心跑」。

I

跑模型写的代码 = 跑不可信代码.

模型写的代码,和用户上传的代码没区别 —— 都是不可信输入。在 host 上直接跑,赌的是你整台机器。 危险不在模型「恶意」,在它会犯错、会被 prompt injection 操纵、会跑出你没预期的命令 —— rm 掉不该删的、把数据外发、读走你的密钥。所以「让它写代码」和「让它跑代码」之间,隔着整个安全工程。 所以第一条线很硬:默认不给网络、不给真文件系统、不给长生命周期。能力按需一项一项放开,而不是默认全开 —— 这就是最小授权的反射,第九章会系统地讲。

II

沙箱是分层的,按信任选强度.

沙箱不是一个开关,是一条从弱到强的谱:进程权限限制 < 容器 < gVisor / microVM < 托管沙箱。匹配信任度,别过度也别不足。 进程级限权很轻,但和你共享内核,逃逸面大,只够半信任的代码。容器(Docker)是好默认:命名空间隔离、只读文件系统、无网络、资源上限。要跑真正不可信的代码,再往上加一层 ——gVisor 的用户态内核,2注 2gVisor(google/gvisor)—— 用户态内核沙箱,在容器之上加一层隔离,用于运行不可信代码;隔离强度谱里「比容器强」的一档。或 Firecracker 这类 microVM 的 VM 级隔离。3注 3Firecracker(firecracker-microvm)—— 轻量 microVM,提供 VM 级隔离运行不可信工作负载;隔离谱里最强的一档之一。
resp = client.messages.create(
    model="claude-opus-4-8", max_tokens=2048,
    tools=[{"type": "code_execution_20260120", "name": "code_execution"}],
    messages=[{"role": "user", "content": "分析这个 CSV 的月度趋势"}],
)   # 代码在 Anthropic 的沙箱容器里跑,你不碰执行
# 模型写的代码丢进一次性容器:无网络、只有 /workspace 可写、用完即弃
docker run --rm --network none \
  --read-only --tmpfs /workspace:rw \
  -v "$PWD/code.py:/workspace/code.py:ro" \
  python:3.13-slim python /workspace/code.py

run_python 的两种沙箱:托管 vs 自托管容器

强度是有成本的 —— 延迟和运维都涨。1注 1Anthropic 文档 · Code execution tool —— 在受隔离的沙箱容器里跑 Python / bash;工具版本 code_execution_20260120(Opus 4.8 等支持)。把执行外包给托管沙箱的一种选择。截至 2026-05。读公开数据做点计算,容器就够;跑任意模型生成的代码还要联网,才上 microVM 或托管沙箱。别用 host 直跑去换那点方便。

III

文件系统与网络是最该先关的两扇门.

沙箱里最先要锁的两样:它能写哪、它能连哪。这两扇门关好,大部分事故就不会发生。 文件系统:只给一个 workspace 目录可写,其余只读 —— 别让它碰 ~/.ssh~/.aws、密钥和配置(呼应第三章的 applyPatch.workspaceOnly)。网络:默认 deny,要联网就显式白名单,只放它真需要的域。任意代码加全网,是数据外带的高速路。生命周期:用完即弃,别复用 —— 复用的沙箱会积累上一次的状态和污染。 这三样 —— 写哪、连哪、活多久 —— 才是沙箱的真正配置,不是「装了 Docker 就安全」。Docker 默认是有网的、容器跑挂了还可能留下卷:默认值要你主动收紧。 动手 · 把代码执行关进一个真沙箱:

让它写代码是模型的事, 让它安全地跑是你的事。.

Writing the code is the model's job; running it safely is yours..

Aklman Library

讨论

讨论.

评论区初始化中…