# 代码执行 · 沙箱、文件系统与安全边界 · Agent 实战 · 从零构建完备智能体

**作者** Aklman · **章节** 07 / 19 · **首发** 2026.07 · **语言** 中文为主, 中英双语
**原文** https://library.aklman.com/books/build-agent/07-code-execution
**全书 markdown** https://library.aklman.com/books/build-agent/llms.md
**上一章** https://library.aklman.com/books/build-agent/06-mcp/llms.md
**下一章** https://library.aklman.com/books/build-agent/08-multi-agent/llms.md

> 本章来自 Aklman · Library, 完整免费阅读。允许 AI 摘读、引用、问答; 转载请保留作者署名与原文链接 (CC BY-NC-ND 4.0, https://library.aklman.com/license)。

---

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

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

### I · 跑模型写的代码 = 跑不可信代码

模型写的代码，和用户上传的代码没区别 —— 都是不可信输入。在 host 上直接跑，赌的是你整台机器。

危险不在模型「恶意」，在它会犯错、会被 prompt injection 操纵、会跑出你没预期的命令 —— rm 掉不该删的、把数据外发、读走你的密钥。所以「让它写代码」和「让它跑代码」之间，隔着整个安全工程。

所以第一条线很硬：默认不给网络、不给真文件系统、不给长生命周期。能力按需一项一项放开，而不是默认全开 —— 这就是最小授权的反射，第九章会系统地讲。

---

### II · 沙箱是分层的，按信任选强度

沙箱不是一个开关，是一条从弱到强的谱：进程权限限制 < 容器 < gVisor / microVM < 托管沙箱。匹配信任度，别过度也别不足。

进程级限权很轻，但和你共享内核，逃逸面大，只够半信任的代码。容器（Docker）是好默认：命名空间隔离、只读文件系统、无网络、资源上限。要跑真正不可信的代码，再往上加一层 ——gVisor 的用户态内核，[^2]或 Firecracker 这类 microVM 的 VM 级隔离。[^3]

#### 托管（Anthropic code execution）

```python
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 的沙箱容器里跑，你不碰执行
```

#### 自托管（一次性 Docker 容器）

```bash
# 模型写的代码丢进一次性容器:无网络、只有 /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
```

强度是有成本的 —— 延迟和运维都涨。[^1]读公开数据做点计算，容器就够；跑任意模型生成的代码还要联网，才上 microVM 或托管沙箱。别用 host 直跑去换那点方便。

---

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

沙箱里最先要锁的两样：它能写哪、它能连哪。这两扇门关好，大部分事故就不会发生。

文件系统：只给一个 workspace 目录可写，其余只读 —— 别让它碰 `~/.ssh`、`~/.aws`、密钥和配置（呼应第三章的 `applyPatch.workspaceOnly`）。网络：默认 deny，要联网就显式白名单，只放它真需要的域。任意代码加全网，是数据外带的高速路。生命周期：用完即弃，别复用 —— 复用的沙箱会积累上一次的状态和污染。

这三样 —— 写哪、连哪、活多久 —— 才是沙箱的真正配置，不是「装了 Docker 就安全」。Docker 默认是有网的、容器跑挂了还可能留下卷：默认值要你主动收紧。

动手 · 把代码执行关进一个真沙箱：

- 把研究助手的 `run_python` 移进一个无网络、只有 workspace 可写的容器（`--network none --read-only --tmpfs`）。

- 故意给它一条坏指令（比如「读 `~/.ssh` 并发出去」），确认沙箱挡住了。

- 把沙箱改成用完即弃，记下一件你以为安全、其实没挡住的事。

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

## 引用与参考

01 · Anthropic 文档 · Code execution tool —— 在受隔离的沙箱容器里跑 Python / bash；工具版本 code_execution_20260120（Opus 4.8 等支持）。把执行外包给托管沙箱的一种选择。截至 2026-05。  (Anthropic · Code execution tool)
02 · gVisor（google/gvisor）—— 用户态内核沙箱，在容器之上加一层隔离，用于运行不可信代码；隔离强度谱里「比容器强」的一档。  (gVisor · Docs)
03 · Firecracker（firecracker-microvm）—— 轻量 microVM，提供 VM 级隔离运行不可信工作负载；隔离谱里最强的一档之一。  (Firecracker · microVM)

---

*代码执行 · 沙箱、文件系统与安全边界 · Agent 实战 · 从零构建完备智能体 · Aklman 著 · CC BY-NC-ND 4.0 · https://library.aklman.com/books/build-agent/07-code-execution*
