跳到正文

沙箱执行环境:给代码一块合适的工作空间 ​

返回机制目录 · 审批与隔离 · 外部动作与恢复

你让助手修复一个 CSV 转换脚本。它需要读取样例、写入结果、运行测试。可以给它一个专门的执行环境,只放这次任务需要的文件,设置运行时间和资源限制。这个环境通常叫作沙箱。

这样安排以后,私人目录、工作账号和生产密钥可以留在任务之外。具体限制要由运行环境和配置落实。

运行设置、隔离执行、结果记录与远端操作

查看原尺寸 SVG(可缩放)

图的文字版

图中实线是示例流程,外圈虚线标出执行环境,橙色虚线表示任务获得许可后访问网络的路径。

先列出任务需要的资源 ​

对 CSV 任务,可以先写一张短清单:输入目录只读,输出目录可写;运行测试有时限;不放真实密钥;默认不访问外网。这是本书的示例设置,实际平台的默认值需要另行检查。

主要安排五项:

  • 文件。 指定输入、输出和临时目录,检查哪些文件可以读写。工作目录用于解析相对路径,访问限制另由权限处理。
  • 网络。 指定是否联网,以及允许的服务。下载依赖与上传数据都会产生网络请求。
  • 进程和资源。 指定运行用户、时间、CPU 和内存限制,安排超时后的终止方式。
  • 密钥。 只提供任务需要的凭据,限制使用范围和有效期,避免写入日志。
  • 浏览器身份。 使用浏览器时,确认有没有加载个人登录状态。

E2B 文档说明沙箱默认允许出网;Daytona 的网络限制还受组织配置影响。实际使用时,检查创建参数和账户设置。E2B 网络配置 · Daytona 网络限制

浏览器认证文件可能包含可用于登录的 cookies 和 headers,需要保护,避免提交到仓库。Playwright 认证说明

从创建到结束,把结果带出来 ​

运行 CSV 任务的程序,可以按以下顺序安排:

  1. 选择环境,设置资源,记下环境 ID。
  2. 放入需要的样例和代码。
  3. 运行脚本,保存退出状态、日志和输出。
  4. 在环境外按任务要求检查 CSV 内容。
  5. 保存需要的产物,再按计划停止或删除环境。

这是一种应用编排示例。检查输出时,也把返回文件当作待检查材料处理,避免直接在宿主执行陌生脚本。

环境结束后的保留方式要单独看。Daytona 的停止操作保留文件系统、清除内存;Linux VM 和 Windows 环境另外支持保留内存的暂停,容器不支持这种暂停。E2B 暂停可以保存文件和内存,也能选择只保存文件、恢复时重新启动;kill 是终止操作。

Daytona 停止与暂停 · E2B 持久化

保存执行环境之后,模型下次需要哪些消息和资料,仍由 Agent 的运行程序安排。会话与记忆讨论了这部分。

常见执行环境怎样区分 ​

这些技术工作在不同层次,可以配合使用。

选择主要作用使用时关注
本地进程策略用操作系统机制限制文件、进程或网络访问限制是否作用于实际进程及其子进程
Linux 容器划分资源视图,管理资源使用文件挂载、权限和宿主内核
gVisor用应用内核处理工作负载的系统调用隔离方式和程序兼容性
Firecracker microVM用轻量虚拟机运行独立客体环境虚拟机管理进程的权限和网络配置
E2B、Daytona 等平台用服务 API 创建和管理执行环境账户权限、数据位置和生命周期

容器:划分资源视图,限制用量 ​

Linux 的 namespaces 让进程看到各自的资源视图;cgroups 管理资源用量和限制。这两项机制还需要配合挂载和权限设置。

例如只挂入样例目录,比挂入整个个人目录更符合 CSV 任务。Docker 控制接口也要谨慎开放:能控制 daemon 的程序可能创建强大的挂载,影响宿主文件系统。

Docker 安全说明 · 系统调用过滤 · daemon 的权限风险

gVisor:在系统调用之间增加一层处理 ​

gVisor 用用户态的应用内核 Sentry 处理工作负载的系统调用,再通过受限接口与宿主交互。这里的系统调用,是程序请求操作系统提供文件、进程等服务的接口。

增加这一层也会带来兼容性取舍。准备使用前,测试任务所需的程序和依赖。

架构说明 · 兼容性说明

Firecracker:用轻量虚拟机执行 ​

Firecracker 是 microVM 的虚拟机管理器,利用 Linux KVM 运行客体环境。官方设计建议在生产中用 jailer 降低管理进程权限。

出网过滤由宿主集成来安排,Firecracker 本身不做网络流量过滤。固定版本设计文档

OpenShell:把资源策略接入运行环境 ​

NVIDIA OpenShell 的资料介绍了文件、进程、出网和推理路由等控制。文件与进程策略在创建时锁定,网络与推理配置可以运行时更新。

它适合用来理解“执行环境怎样接上资源策略”,而内核隔离方式需要结合其实际运行环境查看。官方项目 · 配置建议

远端操作需要另外检查 ​

如果任务允许登录后台并发布内容,发布发生在远端服务。结束本地执行环境以后,仍需查询发布状态。遇到返回消息丢失时,先查原操作,再考虑重试。

回执丢失小实验可以帮助理解这一过程,它使用模拟服务,不测试真实沙箱的隔离能力。

可选深入:用假数据检查配置 ​

在专门的测试环境放入假数据,检查范围外文件能否读取、子进程是否受到限制、超时后进程是否结束、输出能否取回。若需要测试网络或密钥访问,使用专门的测试凭据,避免接入个人账号和生产数据。

本章依据官方文档解释机制,没有安装这些运行时,也没有测试隔离逃逸。选择方案时还需要结合自己的任务验证兼容性和配置,不据此对安全强度或速度排名。

图的文字说明 · sandbox-execution ​

助手要修复一个 CSV 转换脚本,需要读取样例、写出结果并运行测试。宿主,也就是负责安排执行的运行程序,可以为这次任务准备一块专用工作空间,只提供需要的文件和权限。图中的实线跟着这次工作往下走。

  1. 先列资源清单。 “运行设置”写明这次任务能用什么:输入文件、输出位置、运行时限和最小权限。真正执行前,宿主确认动作在用户允许的范围内。
  2. 在选定环境里运行工具。 文件、网络、进程和资源限制要由具体机制落实。凭据与浏览器登录状态也单独限制,只提供任务需要的部分。
  3. 把运行记录收回来。 包括退出状态、日志、产物和错误。宿主收集这些信息,交给下一步检查。
  4. 在环境外检查结果。 按任务的完成标准核对产物和依据,再决定通过、返工或停止。例如检查输出 CSV 的内容,而不只看程序是否正常退出。图中返工仍按原权限处理,没有自动增加权限的路径。
  5. 按原安排结束环境。 图在清理箭头旁注明“取回产物后”,先保存需要的结果,再选择停止、保留或销毁本地状态。环境外的检查可以随后进行。

如果任务允许发布内容、发送消息或写入远端服务,这些变化发生在图中的“远端业务状态”。结束本地环境以后,仍需到服务端查询结果;返回消息丢失时,先核对原操作再决定是否重试。

外圈虚线标出执行环境,橙色虚线表示获准出网时的条件路径。清理本地工作空间处理的是本地状态,远端发布、发送和写入需要另外处理。

图中的执行环境可以由本地进程策略、容器、用户态应用内核、microVM(轻量虚拟机)或托管环境组合实现。它们怎样限制访问、暂停或停止后保留哪些状态,都要按具体实现查看。

这是一张教学流程图。具体产品的安全能力需要单独检查和测试,官方资料及产品层次见机制正文与研究台账。


在线预览稿:书稿仍在校稿,系统篇以文内固定源码版本为准;静态阅读不等于运行验收。发现错误或有改进建议?按本章填写邮件,或查看反馈说明。

书稿提交:33f7dcdf7ac3。