# 💡 Summary
[[多租户]]
一段 AI 生成的 Python 代码运行时:
[[Namespace]] → 看不见宿主机进程,看不见其他沙箱的文件
[[cgroup]] → 最多用 2 核 CPU 和 4GB 内存,超了就被杀
[[seccomp]] → 不能调 ptrace/mount/kexec 等危险系统调用
这是典型的「**一个技术名词到底是哪家在提供/托管**」问题的变体。
**E2B 云端沙箱不是阿里云的产品**,而是 **E2B(e2b.dev / e2b-dev)这家公司/开源项目**提供的“云端隔离执行环境(sandbox)”服务与基础设施。官方主页与文档都把它描述为:在云里启动隔离沙箱来运行 AI 生成代码,并通过它们的 SDK/控制台来管理。([E2B](https://e2b.dev/?utm_source=chatgpt.com "E2B | The Enterprise AI Agent Cloud"))
从公开信息看,E2B 公司总部在旧金山一带、规模 11–50 人。([LinkedIn](https://www.linkedin.com/company/e2b-dev?utm_source=chatgpt.com "E2B"))
另外,它并不是只能跑在“E2B 自己的云”:
- **BYOC(Bring Your Own Cloud)**:官方文档写的是 _把 E2B 部署进你自己的云和 VPC_,但**当前只支持 AWS**(并表示在做 GCP/Azure),文档里**没有**写阿里云。([E2B](https://e2b.dev/docs/byoc?utm_source=chatgpt.com "BYOC (Bring Your Own Cloud)"))
- **自托管/开源**:E2B 也强调自己是开源基础设施,你可以自己部署(是否上阿里云取决于你自建/适配能力,而不是“官方托管就是阿里云”)。([GitHub](https://github.com/e2b-dev/E2B?utm_source=chatgpt.com "e2b-dev/E2B: Open-source, secure environment with real- ..."))
如果你说一下你在哪个产品/框架里看到 “E2B”(比如某个 agent 模板、LangChain 集成、Docker MCP 之类),我可以更精确告诉你:你用到的是 **E2B 官方托管**,还是 **BYOC/自建** 的那一种路径。
# 🧩 Cues
# 🪞Notes
这是个很好的问题,"沙箱"在这里其实是**多层嵌套**的概念,不同层用了不同的隔离机制:
---
## 第一层:整个 AIO Sandbox = **一个 Docker 容器**
这是最外层的隔离边界。AIO Sandbox 通过 Docker 镜像集成所有能力,提供统一的文件系统和认证。
所以你运行:
```bash
docker run --security-opt seccomp=unconfined -p 8080:8080 ghcr.io/agent-infra/sandbox:latest
```
此时整个环境(浏览器、终端、文件、代码执行、VSCode)全在**这一个容器**里跑。注意 `--security-opt seccomp=unconfined` 这个参数——它主动**关闭了** seccomp 系统调用过滤,因为内层还有更细的隔离机制需要用到某些特权系统调用。
---
## 第二层:代码执行 = **Sandbox Fusion(进程级隔离)**
这是最关键的内层隔离。代码执行部分使用了字节跳动开源的 **Sandbox Fusion** 的 Python 3.10/3.11/3.12 和 Node.js 22 运行时,提供集成的安全隔离环境。
Sandbox Fusion 是字节跳动专门为代码执行安全设计的隔离方案,底层利用 Linux 的 **namespace + cgroup + seccomp** 实现进程级沙箱——相当于在 Docker 容器内部再套一层进程隔离。这就是为什么外层 Docker 必须 `seccomp=unconfined`:把 seccomp 控制权让给内层的 Sandbox Fusion 来管。
---
## 第三层:Shell 终端 = **tmux session 隔离**
Shell 模块使用了 OpenHands 的 CmdRunAction 作为执行引擎,结合 tmux 实现多会话执行能力。
这层不是强安全隔离,而是**会话隔离**——不同的 Agent 任务跑在不同的 tmux session 里,互不干扰,但本质上还是同一个 Linux 进程空间。
---
## 第四层:浏览器 = **Chromium 进程 + X11**
浏览器跑的是容器内的 Chromium 进程,通过 X11 显示服务提供 GUI,再用 noVNC 把画面串流到 Web 端。Chromium 本身也有自己的沙箱机制(renderer 进程隔离),但在这里主要是靠容器边界保护。
---
## 整体隔离架构图
```
┌──────────────────────────────────────────────────────┐
│ 宿主机 Host OS │
│ ┌────────────────────────────────────────────────┐ │
│ │ Docker 容器(第一层隔离) │ │
│ │ ┌─────────────────┐ ┌────────────────────┐ │ │
│ │ │ Chromium+X11 │ │ tmux sessions │ │ │
│ │ │ (浏览器进程) │ │ (Shell 会话隔离) │ │ │
│ │ └─────────────────┘ └────────────────────┘ │ │
│ │ ┌──────────────────────────────────────────┐ │ │
│ │ │ Sandbox Fusion(第二层,进程级隔离) │ │ │
│ │ │ namespace + cgroup + seccomp │ │ │
│ │ │ Python 3.10/3.11/3.12 / Node.js 22 │ │ │
│ │ └──────────────────────────────────────────┘ │ │
│ └────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────┘
```
---
## 一句话总结
AIO Sandbox 的"沙箱"是**双层结构**:外层用 **Docker** 隔离整个运行环境,内层用字节跳动的 **Sandbox Fusion**(基于 Linux namespace/cgroup/seccomp)对代码执行做进程级安全隔离。Shell 只是 tmux 会话隔离,并非强安全边界。所以它不是独立 OS,不是独立文件夹,而是**容器 + 进程沙箱的组合**。