通用技术 Agent 天天挂在嘴边的沙箱,到底是个啥?

狂师 · October 08, 2026 · 242 hits

不知道你们有没有这种感觉。

不管是翻 Claude Code 的文档,还是用 Codex、WorkBuddy,总有一个词在你眼前晃,沙箱。

Claude Code 专门拿出一整节文档,来讲沙箱。

https://code.claude.com/docs/en/sandboxing

Codex 默认就在沙箱里跑,想联网得单独申请。WorkBuddy 装完第一件事,就是让你勾选它能碰哪些文件夹,没勾到的地方,一步都进不去。

要是你刚接触这个词,八成会拿它往熟悉的概念上套。沙箱?说的是虚拟机吗?还是 Docker 那种容器?再不然,Python 的 venv 算不算?

我把这几个产品的实现翻了一遍,答案是,都不对,而且这几个词压根不在一个层面上。

今天这篇,咱就把沙箱一次扒明白。

沙箱到底是个啥?

先说它是个啥。

简单来说,沙箱就是给代码执行划的一块活动范围。它能看到哪些文件、能起哪些进程、能不能联网,这些全都在外面提前设好了。它想干范围之外的事,系统直接拦下来,命令报错,执行不了。

为啥要这么干? 因为放进沙箱的代码,不一定可信。万一它带毒、被人做了手脚,或者纯粹写崩了,有沙箱圈着,文件偷不走,网连不上,系统也改不动。最坏的结果,就是沙箱里那点东西完蛋,你的电脑和资料安然无恙。

比如,同事找你借手机打个电话,你把手机打开进入到打电话界面递过去就行,没人会把锁屏密码也告诉他,很多安全问题的根源就出在这,为了完成一个很小的任务,我们给了他过大的权限。

家里有娃的都见过,孩子还不会走路的那阵,家长通常会在家里客厅给他围一个栏,玩具扔进去,人放进去,他就在里面随便玩,怎么爬都爬不出去。

沙箱就是给代码围的这个栏,代码在里面照常跑,但怎么折腾都出不了圈,外面的文件、系统、网络,它一律够不着。程序该跑照样跑,沙箱管住的,只是它能影响的范围。

沙箱这个词也不是什么新东西,最早主要在安全行业里用,到今天已经用了几十年。只不过这两年 Agent 火了,这个词才跟着被越来越多人提起。

你其实早就装了一堆沙箱

别觉得陌生,其实你天天都在用。

特别是苹果手机的用户,iOS 给每个 App 划了一块自己的地盘,只能在自己目录里读写文件。微信看不到淘宝的缓存,淘宝也翻不着微信的聊天记录,系统级的强制隔离。

App Store 敢让几百万陌生开发者往你手机里塞东西,靠的就是这套机制在底下兜着。

Android 一个路子,每个 App 发一个独立的 Linux 用户 ID,内核按用户权限把大家隔开。

比如,你在浏览器中打开一个陌生网站,页面里的 JavaScript 想读你的本地文件、想开个 shell?门都没有。因为 Chrome 这类浏览器,把网页渲染塞进了一个被剥夺了系统权限的进程。它要干任何超出页面的事,只能给浏览器主进程发消息申请。

再比如,当你在使用LeetCode 这类刷题平台时,为什么平台后端敢直接跑你提交的任意代码,凭啥?因为判题机是跑在独立的沙箱环境里。

把这几个例子摆到一块,套路就一个。手机里的 App,浏览器里的网页,刷题平台里你提交的代码,处理办法全是同一套,先圈起来,再让它跑,即便出了事,也只会搞坏圈里那一小块。

沙箱和虚拟机,到底啥区别

这是被问得最多、也是新手最容易搞混淆的,Sandbox 与 Docker 和虚拟机到底是什么关系?

特别是现在很多云厂商老是喜欢把它们摆一块。真论起来,这几个压根就不在一个层面上。

虚拟机是一种具体的技术。虚拟出来的是一整套设备,里面装一个完整的操作系统,自带内核。虚拟机解决的是资源问题,一台机器当多台用。

Docker 容器也是一种具体的技术。它不虚拟硬件,所有容器共享宿主机的内核,靠 Namespace 把每个容器能看到的进程、网络、文件系统隔开,容器解决的是环境问题,一次构建,到哪都能跑。

沙箱跟前两个都不太一样,它指的是一个安全目标。要把一段程序能碰的东西摁在一个圈里,文件、进程、网络,圈外的一律够不着。至于用什么实现,没有限定,容器可以,虚拟机可以,操作系统自带的权限机制也可以。沙箱解决的是安全问题,控制程序代码执行的影响范围。

我们可以做一个简单的对比。

虚拟机 Docker 容器 沙箱
是什么 一种虚拟化技术 一种容器技术 一个安全目标
怎么隔离 虚拟整套硬件,自带内核 共享内核,Namespace + cgroups 不限,权限、容器、虚拟机都行
解决什么 资源,一台机器当多台 环境,一次构建到处跑 安全,控制影响 范围
典型开销 GB 级镜像,分钟级启动 MB 级镜像,秒级启动 看实现,从零开销到 GB 级
拦得住恶意代码吗 拦得住,难逃逸 拦一部分 看实现强度

为啥 AI Agent 又带火了 Sandbox?

那问题来了,这词都用几十年了,为啥这两年突然满世界都是?

因为写代码的,从人换成了模型。

以前的玩法,大模型只是个代码辅助工具,能帮你补代码、生成函数,但代码复制到编辑器里,跑不跑、怎么跑,全是你自己来。

现在的主流 Agent,你扔给它一个任务,它自己读文件、写代码、起 shell、跑测试、看报错、接着改,几十条命令,条条都是它自己拍板执行的。接的工具越来越多,文件系统、终端、浏览器、数据库。

更重要的是,Agent 越来越多的是挂着没人看的长程任务。半夜跑回归、自动修 bug、云端并行几十个会话,人根本不在屏幕前。弹窗批准这条路走不通了,一是人不在,二是就算在,一下午批几十次之后,剩下的基本就是无脑点允许,弹窗形同虚设。

沙箱的思路正好反过来。不一条条问你,直接把边界焊死,边界里头随便你折腾。

用一条 docker run,模拟沙箱拦了啥

上面这些概念听着玄乎,拆开看,就是几个开关的事。我拿 Docker 拼了个最小沙箱,只需要一条命令。

docker run --rm \
  --network none \
  --read-only \
  --cap-drop ALL \
  --security-opt no-new-privileges \
  --memory 512m \
  --pids-limit 256 \
  -v "$PWD:/workspace" -w /workspace \
  python:3.12-slim python main.py
  • --network none,容器里压根没有网卡,数据就算被读走也发不出去,泄露这条路,在网络这层就断了。
  • --read-only,根文件系统只读,整个容器只有挂进去的 /workspace 能写。
  • --cap-drop ALL,把 Linux capabilities 全扔了,容器里的 root 就是个名字,特权操作一样都干不了。
  • --memory 512m 和 --pids-limit 256,一个管内存,一个管进程数,死循环和进程炸弹都拖不死宿主机。
  • 最后那个 --rm,用完即焚。

文件、网络、权限、资源。以后谁跟你说他这有个沙箱,你就问这四样各拦到啥程度。答不上来的,八成只是个把依赖隔开的环境,跟安全不沾边。

落到测试工作上,有什么作用?

最后说回老本行。

沙箱对测试人来说,不是背个新概念就完了,它直接多出一类能落地的用例,越权测试。

以前测越权,测的是人写的接口,构造个越权请求,看服务端拦不拦。Agent 一来,被测对象多了一个自己会动手的角色,用例跟着变形。

把 Agent 关进沙箱里跑任务。正向用例,测它该干的能不能干成,装依赖、跑测试、改文件。反向用例,故意诱导它越界,让它读工作区外的文件,让它 curl 一个外网地址,让它去改 .git 目录,看沙箱兜不兜得住。

其实 Claude Code 文档里那两条自测命令,就是这个思路的产品化,一条探文件写入,一条探网络外连。Codex 更细,workspace-write 档位里 .git 目录强制只读,防的就是 Agent 一上头改了你的提交历史。这种设计细节,本身就是现成的测试断言,直接抄作业。

所以下次评测一个 Agent 工具,别光看它弹窗勤不勤快,多问三句,沙箱是不是默认开,网络是不是默认断,环境是不是一次一换。这三个答案,比宣传页上任何一句安全承诺都实在。

咱们这行有句老话,永远不要相信用户的输入。现在得再补一句,永远不要盲目相信大模型写的代码。


我是狂师,公众号长期分享 AI 测试提效实战。最近我做了一个重大决定,将 AI 测试开发学习路线开源了:https://github.com/zhoujinjian/ai-testing-guide

并且与开源项目同步配套上线了一款免费在线学习网站👉:https://ai.testfather.cn/

放心食用,觉得有用,就帮忙点个 Star 吧 ⭐

以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~谢谢你看我的文章,我们,下次再见。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
No Reply at the moment.
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up。