执行环境的隔离与沙盒
为什么 venv 不是沙盒?
- 常见误区: 把 Python 虚拟环境(venv)当作沙盒;
- 事实: venv 只隔离包依赖,对文件系统、网络和进程没有任何安全约束;
- 后果: 在 venv 中运行的代码照样可以删除任意文件、访问任意网络;
- 前提: 通用执行工具(如 Python 解释器、Shell 终端)本质上允许 Agent 执行任意代码,需要特别的安全考虑;
隔离强度有哪些层级?
| 层级 | 机制与边界 |
|---|---|
| 进程级隔离 | 直接在本地执行,Agent 生成的代码与本地用户拥有相同权限;Codex 的 workspace-write 模式、Claude Code 的只读起始权限与文件系统/网络沙盒会把默认可写范围限制在工作区内,越界访问或高风险操作需额外审批 |
| 容器隔离 | Docker 等容器提供独立的文件系统和网络栈,隔离更完整,但与宿主机共享内核,内核漏洞仍可能被用来逃逸 |
| microVM/虚拟机 | Firecracker 等 microVM 提供带独立内核的硬件级隔离,是运行完全不可信代码的最强层级 |
- 澄清: 实际权限取决于宿主的沙盒与审批策略,而非“本地执行”这一事实本身;
- 参照: 执行工具的第一层防护(输入验证、权限控制)见 执行工具的安全分层;
隔离环境还需要哪些资源限制?
- 设置上限: 容器和 microVM/虚拟机隔离环境还应设置 CPU、内存、磁盘、网络的使用上限;
- 目的: 防止恶意或失控的代码耗尽所有资源;
如何选择隔离层级?
- 本地开发且输入可信: 进程级机制加上宿主的工作区沙盒与审批通常够用;
- 输入不可信、凭证敏感或操作不可逆: 即使是本地开发也应升级到容器乃至 microVM 级别的隔离;
- 生产环境: 需要更严格的隔离层级;