gVisor 深度解析:把 Linux 内核搬进用户态,为什么成了 Agent 沙箱的默认候选

一个八年的项目,一个全新的舞台

gVisor 是 Google 在 2018 年开源的沙箱运行时,做的事情一句话可以说清:在应用与宿主 Linux 内核之间插入一个用 Go 写的「应用内核」,拦截并重新实现系统调用,让不可信代码永远不直接触碰宿主内核。截至 2026-10-09,它在 GitHub 上有 19,613 颗 star、347 名贡献者,最新版本 20261005.0 于 10 月 8 日发布,保持着约每周一个版本的节奏。

为什么现在值得重新认识它?三件事同时发生了。第一,2026 年 9 月 28 日 CNCF 接受 gVisor 捐赠、进入 Sandbox 级别,Google 承诺数月内推进到 Incubation,仓库将迁出 google 组织、转向多组织维护者治理。第二,AI Agent 让「大规模运行不可信代码」从安全行业的边缘需求变成基建刚需——官方捐赠博客列名的用户包括 Google、蚂蚁集团、OpenAI、Anthropic、Modal、Tines,明确写到的内部用途是代码片段执行与强化学习。第三,腾讯在官方博客披露,其 Agentic-RL 训练的生产环境每天要拉起数百万个 gVisor 沙箱。

本文的事实与数字全部锚定在 2026-10-09 抓取的官方文档、安全档案、release notes 与上述一手博客,来源见文末。

三进程模型:Sentry、Gofer 与被围住的应用

一个 gVisor 沙箱里住着三类进程。应用本体是未经修改的 Linux 二进制,以普通 OCI 镜像方式运行,这是它对用户最重要的承诺:不改代码、不改镜像。真正的主角是 Sentry——官方文档的定义是「一个运行容器、拦截并响应应用系统调用的内核」。Sentry 用内存安全的 Go 写成、跑在用户态,系统调用、信号投递、缺页处理、线程模型全部由它自己实现,而不是透传给宿主内核。官方把它形容为「合并了 guest 内核与 VMM 的东西」,或者「增强版的 seccomp」。

flowchart LR
    APP["应用进程(未修改的 Linux 二进制)"] -->|"系统调用被拦截"| SEN["Sentry:用户态应用内核"]
    SEN -->|"LISAFS 文件协议"| GOF["Gofer:文件系统代理"]
    SEN -->|"受限的 seccomp 允许列表"| HOST["宿主 Linux 内核"]
    GOF -->|"普通文件读写"| HOST

第二类进程是 Gofer,每个容器一个,专职文件系统:Sentry 对文件的任何访问都要经 LISAFS 协议问过 Gofer,再由 Gofer 以普通进程身份向宿主发起真实的文件调用。拆开之后,Sentry 自身被锁在一个受限的 seccomp 容器里,连直接打开文件的能力都没有——系统调用面与文件面变成了两道互相独立的关卡,攻破任何一道都还撞不上宿主内核。

这套设计把应用与宿主之间的一层边界变成了多层边界,代价是每次越界交互都要付一次代理成本。成本花在哪、能优化到什么程度,后面两节细说。

系统调用怎么被拦下:ptrace、KVM 与 systrap

拦截是 gVisor 的技术核心,也是它演进最剧烈的部分。三代平台的思路差异很值得看清:

ptrace 平台是最早的实现,靠 PTRACE_SYSEMU 让用户代码正常执行、但系统调用在发出前被截住。可移植性最好,代价是每次拦截都要完整的上下文切换。官方文档现在对它的表述是「不再支持,预计最终彻底移除」——这条路线已经走进历史。

KVM 平台让 Sentry 同时扮演 guest 内核与 VMM,借助硬件虚拟化完成地址空间切换。裸金属上性能最好,还多吃一层硬件隔离;但在嵌套虚拟化的云主机里反而常常不如 systrap,这是它至今没有成为默认的原因之一。

systrap 是 2023 年中起默认的平台。思路是不再依赖 ptrace:给应用挂上 seccomp 过滤器,任何系统调用都触发 SECCOMP_RET_TRAP,内核向该线程投递 SIGSYS 信号,请求经共享内存交给 Sentry 处理。x86_64 上还有一步精细优化:初始化时扫描应用的 syscall 指令模式(7 字节定长),原地改写成跳转指令直接跳进处理代码,省掉信号栈的大部分开销。官方文档明确写着 systrap 在 2023 年中取代 ptrace 成为默认平台。

有一个常被转述的数字需要澄清:「systrap 比 ptrace 快约 2 倍」——官方 2023 年的发布博客正文只有定性表述和 benchmark 图表(getpid、构建、ffmpeg、TensorFlow、Redis 等负载),没有给出任何倍数。稳妥的结论是:官方基准显示各类负载显著改善,幅度因负载而异。

文件系统:为什么要多一个中间人

让所有文件访问都过一道 Gofer,是 gVisor 安全模型里容易被低估的一环:文件系统的攻击面(挂载解析、符号链接、特殊文件类型)被整块移出了 Sentry 的能力范围,官方文档直言这「增加了安全性,但有性能代价」。协议本身也在换代——2022 年中起 LISAFS 成为默认协议取代 9P(对应 PR #7673),随后 9P 代码被整体删除。

真正把性能扳回来的是 2023 年 6 月的 directfs:Gofer 通过 SCM_RIGHTS 把文件描述符直接「捐」给沙箱侧,Sentry 改用 openat 这类相对描述符的系统调用直达文件,省掉了逐次 RPC 往返,同时用 O_NOFOLLOW、禁 procfs、空挂载命名空间等约束保住安全边界。官方给出的数字是:stat 微基准快 2 倍以上,bind mount 真实负载绝对耗时下降 12%,Ruby 加载时间缩短 17%。这是 gVisor 文件栈上少数有硬数字的官方优化。

安全模型与八年成绩单

官方对设计目标的原话是:通过多层防御把 System API 攻击面压到最小,同时保留进程模型。落地是两层:第一层,应用的系统调用由 Sentry 全权代答,宿主内核根本看不到应用发出的调用;第二层,Sentry 自己也被 seccomp 允许列表锁死——不能新建 socket、不能随手打开文件,与外界的通道只剩与 Gofer 的既有连接、一小撮必需调用和对虚拟网卡的读写。官方把第二层称为「针对容器逃逸的第二道防线」。

这份设计有一份公开的成绩单。官方 security track record 页面维护着 2016 年以来的对抗记录:约 110 个 Linux 内核高危漏洞中,约 96% 被沙箱直接防御,3 个需要打补丁(且都在沙箱边界之外:runc 与 NVIDIA 容器工具包),1 个(Retbleed)属于侧信道、需外部缓解,0 个被标记为 Vulnerable。防御名单包括 Dirty COW、Dirty Pipe、2026 年的 GhostLock,以及 CVE-2026-53359(Januscape)——一个 KVM guest 到宿主的逃逸漏洞,gVisor 挡住了。另外,GitHub GHSA 数据库中以 gVisor 为受影响组件的公告至今为 0。

边界同样要如实说:官方明确声明不防护硬件侧信道,并提醒「沙箱不是安全架构的替代品」。那些兼容性缺口(下一节)很多正是安全设计的代价,不是缺陷。

性能账本:哪里免费,哪里付费

gVisor 的性能画像非常不对称,官方性能文档写得很坦诚:

  • CPU 密集型负载免费:应用指令原生执行,计算本身没有任何运行时开销;Sentry 的内存开销小且基本固定。
  • 系统调用密集型负载付费:每一次 syscall 都要走拦截与应答路径,Redis 这类高频小调用的服务开销最明显;大粒度操作相对开销更小。
  • 网络走自研 netstack 用户态栈:出于安全考虑 Sentry 不能直接开宿主 socket,只用一个 AF_PACKET 描述符收发原始包,iperf 与轻量 HTTP 场景的 CPU 效率可见下降;换 --network=host 可以拿回原生性能,但等于交出网络隔离。
  • 文件栈持续补课:directfs 之外,2024 年的 seccomp 过滤器优化在 secbench 基准上移除了约 29% 的过滤开销。

直白结论:长计算、少系统调用的负载(典型如 AI 推理的 GPU 计算段、构建任务)与 gVisor 合拍;高频小系统调用的服务要么接受开销,要么换路线。

兼容性:226 个系统调用与 AI 工具链实况

兼容性决定沙箱能不能真的用于生产。按官方兼容表逐项统计,amd64 上有 226 个系统调用标注支持(arm64 为 191 个),官方口径是「绝大多数负载开箱即用」。实测兼容清单里 AI 相关的条目相当有说服力:Claude Code 2.1.220、Ollama 0.31.1、多个社区 Agent 工具均兼容;PostgreSQL 18.4、MySQL 9.7.1、Redis 8.8.0、NGINX 这类服务端软件也兼容。明显的缺口是 Docker-in-Docker 与 Podman,官方标注仅部分可用;systemd 需要 --in-sandbox-cgroup=v2 配合(官方 2026 年 9 月还有专文讲 systemd 支持)。此外不支持特权容器、原始块卷、hostPath、设置内核 sysctl 与 SELinux 标签。

对 Agent 场景这是个好消息:Agent 的典型工作内容——跑测试、起本地服务、调命令行工具——大多落在兼容区;需要嵌套容器编排的场景则要掂量。

Agent 基建里的位次:谁在生产用它

把散落的事实拼起来,gVisor 在 Agent 沙箱版图里的位置比大多数人的印象更中心:

  • CNCF 捐赠本身是一份行业背书。捐赠博客坦承动机:性能优化补丁曾因 Google 独家所有权被上游社区拒收;「容器 vs 虚拟机」的二元认知阻碍了推广;而 AI 浪潮下「对廉价且安全沙箱的需求从未如此清晰」。
  • 腾讯的 Agentic-RL 规模数据是目前最硬的生产案例:生产环境每天数百万沙箱;74,379 组 runc/runsc 对照测试中,修复兼容性问题后 runsc 通过率 86.91%,与原生 runc 的 86.78% 基本持平;选型理由包括攻击面小、复用 Docker/K8s 生态、以及关键一条——microVM 通常必须跑在裸金属上,gVisor 可以跑在普通云主机 VM 内,成本更低、启动更快。GPU 场景也更友好。
  • GKE Sandbox 现在同时支持两种沙箱技术:gVisor 与基于 Kata Containers 加 Cloud Hypervisor 的 microVM。官方把「处理任意输入或执行代码的 AI 推理、AI Agent、浏览器自动化」列为 gVisor 适用场景;GPU/TPU 只有 gVisor 沙箱支持;而「产生大量低开销系统调用的工作负载」官方建议用 microVM。
  • 两处常见误传值得一一更正。其一,Cloud Run 的第一代执行环境基于 gVisor,第二代是 microVM——不少二手资料把二代写成 gVisor,方向恰好相反。其二,Kubernetes 官方的 agent-sandbox 项目(SIG Apps 旗下,4,203 star)把自己定位为「沙箱编排器」,隔离委托给集群的 RuntimeClass,README 原文是「like gVisor or Kata Containers」;gVisor 是官方文档重点演示的选项,但快速上手模板里 runtimeClassName: gvisor 是一行注释、核心安装清单并不包含它。本专题此前文章如果按「默认 gVisor」理解,应当更正。
  • 官方博客也给了清醒剂:MAGI 多智能体隔离实践那篇的结论是「gVisor is necessary, but not sufficient」——策略引擎与凭证应当放在沙箱之外,沙箱只解决围栏本身。

gVisor 还是 microVM:一张选型表

两条路线的官方数字摆在一起(microVM 一侧以 Firecracker 官网数据为代表):

维度 gVisor microVM(Firecracker / Kata)
隔离机制 用户态应用内核,多层防御 KVM 硬件虚拟化
启动 毫秒级,预热池可近零 125 ms 以内,单机每秒 150 个
内存开销 小且基本固定 每 VM 约 5 MiB 起
系统调用密集负载 开销明显 接近原生
完整 Linux 兼容 部分场景缺口 接近完整
GPU 支持(nvproxy) GKE 语境下不支持
宿主要求 普通云主机 VM 即可 通常需要裸金属 KVM
接入成本 换 RuntimeClass 即插即用 需要额外 VMM/设备层或专用工具链

本文的选型判断(标注为作者观点):不可信代码执行、Agent 运行时、浏览器自动化这类以「围住任意代码」为第一目标的场景,gVisor 是当前工程成熟度与接入成本的最优解;syscall 密集型服务、需要嵌套容器或完整 Linux 语义的场景走 microVM;预算约束在普通云主机上时,gVisor 几乎是唯一的高密度选项。两者叠加(沙箱进程再进一层 microVM)在多租户场景是官方认可的加强姿势。

结语:每周发版的「老」项目,正对着最新的需求

2026 年的 gVisor 依旧每周发版,方向却明显在向 Agent 基建倾斜:checkpoint/restore 持续强化(statefile 哈希校验、文件系统快照拆分恢复),GPU 侧 nvproxy 跟进 580 系驱动,网络侧新增 nftables 支持,还有面向 Agent 场景的 SandboxExec 工具链(Python wheel、Go 绑定、兼容 bwrap 的别名)。最新版 20261005.0 还加入了对 /dev/net/tun 的快照恢复支持。

沙箱从来不是安全的终点——gVisor 官方自己反复强调这一点。但作为「第一道墙」,它用八年攒出了 96% 的防御率、每天数百万次的生产验证和一张几乎零改造成本的接入路径。Agent 时代的基础设施要求快速启动、高密度、塞进现有 Kubernetes——这恰好是 gVisor 的形状。CNCF 捐赠解决的是它最后的非技术短板:不再是一家公司的项目。

参考资料

← 返回资讯列表

读者留言

COMMENTS 暂无
仅本站原创文章开放留言 · 请勿留下手机号、邮箱等个人信息

还没有留言,来说第一句?