隔离级别对比
定义
隔离级别描述的是:工作负载与宿主之间,以及工作负载彼此之间,由哪一层机制隔开。本百科区分三种常见级别。
- 共享内核容器:隔离来自 namespace 与 cgroup,内核只有一份。
- 完整虚拟机:客户机拥有独立内核与较完整的虚拟硬件,由 hypervisor 调度。
- MicroVM:仍然是虚拟机,但设备模型与用户空间被大幅裁剪,以换取接近容器的启动时间。
Box 把前一种称为 Sandbox(须显式请求),把第三种作为省略
--isolation 时的默认路径。完整通用虚拟机(例如桌面 QEMU
虚拟机)不是 Box 的产品对象。
问题背景
「把程序装进盒子」这一句话,没有说明盒子的壁有多厚。若威胁模型是「自己的无害工具」,共享内核通常足够,且开销最低。若威胁模型包含不可信代码、多租户或内核漏洞,则必须把边界上移到硬件虚拟化,并接受额外的内存与启动成本。Box 的产品立场是:这两种选择必须由调用方显式做出,且一经记录不得在恢复时被重新解释。
机制说明
对照
| 维度 | 共享内核容器 / Box Sandbox | 完整虚拟机 | Box 默认 MicroVM |
|---|---|---|---|
| 内核 | 与宿主共用 | 每实例一份客户机内核 | 每实例一份精简客户机内核 |
| 主边界 | namespace、cgroup、可选 seccomp / LSM | 硬件虚拟化 + 设备模拟 | 硬件虚拟化 + 精简 virtio 设备 |
| 典型启动 | 毫秒级 | 数秒到数十秒 | 约百毫秒量级(视镜像与预热而定) |
| 内存开销 | 接近进程本身 | 完整客户机用户空间 + 设备 | 低于完整虚拟机,高于普通容器 |
| 主要风险 | 内核逃逸、错误挂载、特权配置 | 虚拟化实现缺陷、错误的设备透传 | 与完整虚拟机同类,但攻击面更小 |
| 最适合 | 受信或半受信工具、基准、自动化 | 强隔离且可接受慢启动 | 不可信工作负载的本地默认路径 |
为何不能静默切换
从调用方角度看,run
的参数可以完全相同;从安全角度看,两条路径不等价。若实现在 MicroVM
资格不足时自动改走共享内核,调用方会得到一个「命令成功、边界已被削弱」的结果。Box
因此规定:
- 省略
--isolation只表示 MicroVM; --isolation sandbox只表示共享内核;- 显式
--isolation microvm被拒绝,以免脚本把后端名称写成可互换模式; - 选择写入
BoxRecord后,生命周期、恢复与清理不得再查阅当前环境变量来改道。
详见 ExecutionManager、Backend 与 Router 与 代际与 fail-closed。
威胁模型中的一句话
共享内核 Sandbox
不能防御:可工作的宿主内核漏洞利用、敌对宿主管理员、硬件侧信道,以及通过
bind mount 故意暴露的数据。当这些风险不可接受时,应使用默认
MicroVM。该陈述来自 Box README 与
docs/host-sandbox-backend-design.md。
在 Box 中的位置
- 枚举
ExecutionIsolation::{Microvm, Sandbox}定义于src/core/src/config.rs。 - 设计文档:
docs/host-sandbox-backend-design.md。 - 平台资格:Linux/KVM、Apple Silicon/HVF、Windows x86_64/WHPX 用于 MicroVM;经认证的 Linux x86_64 / aarch64 用于 Sandbox GA。
验证命令
a3s-box run --rm alpine:3.20 -- uname -r |
第一条应报告客户机内核;第二条应与宿主相同。若第二条因主机未准备 OCI Runtime 而失败,这是预检失败,不是自动改走第一条路径。
相关与易混
- 相关:MicroVM、Sandbox(共享内核)、TEE 与远程证明
- 易混:启动更快并不等于隔离更弱或更强。速度是设备模型与预热的结果;隔离级别由是否共享内核、是否使用硬件虚拟化决定。