沙箱(Sandbox)
文章目录
一、介绍
隔离的受控执行环境,把不可信 / 高风险的代码、命令、工具关在一个 “虚拟盒子” 里运行,和宿主机彻底隔离,防止破坏系统、泄露数据或横向扩散。
实现方式:通过虚拟化或容器化技术,将代码的运行环境与主系统严格隔离。
二、沙箱Scope(粒度范围)
由 agents.defaults.sandbox.scope 控制:
agent(默认):每个 Agent 一个独立容器(隔离最好)
session:每个会话一个容器(中等隔离)
shared:所有 Agent / 会话共享一个容器(性能最好,隔离最弱)
三、沙箱生命周期(从创建到销毁)
Agent 启动 / 会话创建 → 触发沙箱初始化
容器创建:拉取 openclaw/runtime 镜像,启动容器
挂载目录:把宿主机工作区映射到容器 /workspace
工具执行:exec/read/write 等在容器内运行
结果返回:工具输出传回 Gateway,容器保持(复用)
销毁(可选):会话结束 / 超时 → 容器删除,数据清零
四、五大隔离维度(核心安全能力)
- 文件系统隔离(最关键)
虚拟根目录:沙箱内看到的 / 是容器独立文件系统,看不到宿主机真实目录
只读 + 按需挂载:默认只读;仅显式挂载路径(如 /workspace)可读写
自动清理:容器销毁时,所有写入数据一键删除,不留痕迹 - 进程隔离
沙箱内进程有独立 PID 命名空间,看不到宿主机进程
无法 kill 宿主机进程、无法注入代码到宿主机程序 - 网络隔离(默认无外网)
默认 none 网络:容器内无法访问外网,防止恶意 C2 通信、数据外泄
白名单放行:仅允许指定域名 / 端口(如 GitHub、内部 API) - 资源限制(防耗尽)
CPU:限制核心数 / 使用率(如 1 核、50%)
内存:最大内存(如 2GB),超限 OOM 杀死
磁盘:读写配额,防止塞满硬盘 - 权限隔离(最小权限原则)
五、优缺点总结
✅ 优点
大幅降风险:模型失控也碰不到宿主机
默认安全:开箱即用,无需复杂配置
灵活可控:粒度 / 模式 / 权限可按需调
性能够用:容器启动快(秒级),资源占用低
开源透明:Docker 镜像开源,可审计、可自建
❌ 缺点
不是绝对安全:容器逃逸理论上可能(需高权限 + 漏洞)
有性能开销:比直接宿主机慢 5%~20%
网络限制麻烦:需要外网时要手动加白名单
Windows 隔离较弱:Windows 上依赖目录限制,不如 Linux Namespace 强
六、沙箱的核心种类(按隔离技术划分)
- 容器型沙箱(最主流,OpenClaw 用的就是这类)
原理:基于 Linux Namespace + Cgroups,用 Docker/containerd 等创建独立文件系统、进程、网络、资源限制。
特点:轻量、启动快(秒级)、隔离强、生态成熟。
代表:Docker、Podman、K8s、OpenClaw 内置沙箱、Kuasar、gVisor。 - 微虚拟机(MicroVM)沙箱(隔离最强)
原理:轻量 Hypervisor + 极简 Guest OS,硬件级虚拟化隔离,防逃逸能力最强。
特点:安全最高、启动较慢(秒~10 秒)、资源开销中等。
代表:Kata Containers、Firecracker、QEMU(精简版)、OpenClaw 可选 MicroVM。 - 用户态 / 进程级沙箱(轻量,开发常用)
原理:系统调用拦截、文件 / 目录权限限制,无独立内核。
特点:极快(毫秒)、开销小、隔离较弱(防误操作,难防逃逸)。
代表:Firejail、AppArmor、Seccomp、Linux Namespace(无容器)、Claude Code 内置沙箱。 - Wasm 沙箱(新兴,AI 轻量执行)
原理:代码编译为 WebAssembly,在独立 Wasm 运行时执行,内存安全、无系统调用权限。
特点:启动毫秒级、资源极低、跨平台、隔离极强;但生态有限、不支持系统级操作。
代表:Wasmtime、WasmEdge、Pyodide、Modal(部分场景)。 - 云沙箱服务(托管,免运维)
原理:第三方提供云端隔离环境,通过 API 调用执行代码 / 命令。
特点:零运维、弹性扩缩、天然隔离;成本高、数据过外网、延迟不确定。
代表:Modal、Replit、AWS Lambda、Google Cloud Functions、Azure Functions、GitHub Codespaces。 - 安全分析沙箱(恶意软件 / 文件检测)
原理:全系统模拟 / VM,动态分析样本行为(病毒、木马、恶意文档)。
特点:隔离极强、深度行为分析、慢;用于安全厂商 / 企业威胁检测。
代表:Cuckoo Sandbox、FireEye、奇安信、深信服、启明星辰。 - 浏览器沙箱(网页隔离)
原理:浏览器内核内隔离标签页 / 插件,限制脚本权限。
代表:Chrome Sandbox、Firefox Sandbox、Edge Sandbox。
七、openswe项目沙箱 - 详情
该项目采用可插拔的云沙箱架构,为 AI 编码智能体提供隔离的执行环境。
支持的沙箱提供商(5种)
| 提供商 | 状态 | 实现文件 | 优点 | 缺点 |
|---|---|---|---|---|
| LangSmith(默认) | 26.03上线 | agent/integrations/langsmith.py | 功能全面、健康检查机制 | |
| Modal | 2022生产 | agent/integrations/modal.py | 轻量简洁 | |
| Daytona | 2025-03 | agent/integrations/daytona.py | ||
| Runloop | 2024-05 | agent/integrations/runloop.py | ||
| Local (本地) | 开发用 | agent/integrations/local.py | 无成本、延迟低,适合本地开发调试,数据安全性高 | 自己运维 |
关键特性:
- 线程级隔离 - 每个线程维护独立的沙箱,跨消息复用
- 自动重建 - 沙箱不可达时自动重新创建
- GitHub 代理认证 - 通过 LangSmith proxy-config API 配置
- 并行执行 - 多任务并行运行,各自在独立沙箱中
- 路径解析 - 自动解析沙箱内的可写工作目录
八、openswe项目沙箱 - 代码
沙箱完整生命周期
1、沙箱类型选择
项目支持多种沙箱提供商,通过 SANDBOX_TYPE 环境变量选择:
# agent/utils/sandbox.py
SANDBOX_FACTORIES = {
"langsmith": create_langsmith_sandbox, # 默认,云端
"daytona": create_daytona_sandbox, # 云端
"modal": create_modal_sandbox, # 云端
"runloop": create_runloop_sandbox, # 云端
"local": create_local_sandbox, # 本地
}
2、沙箱创建流程
入口点 : get_agent() 函数 ( server.py:190-257 )


3、沙箱的完整流程遵循以下核心原则:
- 按需创建 :只有当线程需要时才会创建沙箱
- 缓存复用 :同一线程复用同一个沙箱实例
- 健康检查 :使用前进行全面检查,确保资源充足
- 自动重建 :检测到不健康时自动创建新沙箱
- 安全认证 :通过代理机制安全地处理 GitHub 认证
- 灵活切换 :通过环境变量支持多种云端和本地沙箱
4、ModalSandbox类的属性和方法:
核心属性:
| 属性 | 类型 | 说明 |
|---|---|---|
| id | str | 沙箱唯一标识符 |
| sandbox | modal.Sandbox | 底层 Modal 沙箱实例 |
核心方法
根据 SandboxBackendProtocol 接口定义, ModalSandbox 提供以下方法:
shell命令执行、文件操作、目录操作
| 方法 | 用途 | 示例 |
|---|---|---|
| execute(command) | 执行 shell 命令 | sandbox.execute(“git clone ”) |
| read_file(file_path, offset=0, limit=100) | 读取文件内容 | sandbox.read_file(“/app/main.py”) |
| write_file(file_path, content) | 写入文件 | sandbox.write_file(“/app/main.py”, “code”) |
| edit_file(file_path, old_string, new_string) | 编辑文件 | sandbox.edit_file(“/app/main.py”, “old”, “new”) |
| ls(path) | 列出目录内容 | sandbox.ls(“/app”) |
| glob(pattern) | 查找匹配文件 | sandbox.glob(“**/*.py”) |
5、代码提交流程
是一个 自动化的一站式过程 :
- Agent 调用 commit_and_open_pr 工具
- 工具通过 sandbox_backend.execute 在沙箱内执行 git 命令
- GitHub 认证通过沙箱代理自动处理
- 最后通过 GitHub API 创建 Pull Request
整个过程无需人工干预,完全由 Agent 自动完成。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)