sandbox-runtime 怎么安装:srt 验证与沙箱配置
sandbox-runtime(命令行简称 srt)用于在操作系统层限制进程的文件、网络和 Unix socket 访问,适合给 AI Agent、MCP 服务或本地命令加一层隔离。
截至 2026-11-01,Anthropic 官方仓库仍把 Sandbox Runtime 标为 Beta Research Preview。现在值得配置,是因为它已经能通过 npm 安装并直接用 srt 启动受限进程;但研究预览阶段的 API 和配置格式仍可能变化,不宜直接用于没有回滚方案的生产任务。
安装前先确认平台与命令环境
官方实现使用 macOS 的 sandbox-exec 和 Linux 的 bubblewrap,网络访问则由代理过滤。以下三项要在安装前完成。
- 确认系统:三平台都受官方支持——macOS 用
sandbox-exec(Seatbelt profiles)、Linux 用bubblewrap(容器化+网络命名空间隔离)、Windows 用专用srt-sandbox本地用户账号(基于该 SID 的 Windows Filtering Platform 出站栅栏 + 写受限令牌 + 工作树显式 ACE)。此前“机制只对应 macOS 和 Linux”的说法与官方 README 矛盾,已更正。各平台安装命令不同:不要在 Windows 上照抄下面的 Linux/macOS 命令;另可到仓库 Releases/Changelog 核对当前版本(changelog 显示已到 v0.0.76,以页面当下为准)。 - 确认 Node.js 与 npm 已可用,分别执行:
node -v
npm -v
两条命令都应返回版本号;如果终端提示找不到命令,应先安装或启用 Node.js,而不是反复执行 npm 安装。
- 确认网络与代理:执行
curl anthropic.com应能正常返回页面。该测试用于区分“目标网站不可达”和“沙箱主动拦截”。如果安装前已经无法访问,应先处理本机网络。
官方给出的安装命令没有登录 Anthropic 账号、订阅或付款步骤,因此安装本身不要求账号权限,也没有额外费用。
三种安装方式怎么选
当前官方仓库给出的安装命令是 npm 全局安装。检索资料中还存在 Homebrew 安装、源码构建以及同名的 Python/Rust 包,不能把它们混为同一个项目。
| 方式 | 完整命令或入口 | 适合谁 | 主要风险 |
|---|---|---|---|
| 官方 npm 包 | npm install -g @anthropic-ai/sandbox-runtime |
大多数 macOS、Linux 用户 | 全局安装会修改 npm 的全局包目录 |
| Homebrew 安装 | brew install anthropic-experimental/tap/srt |
已使用 Homebrew、希望由包管理器升级的人 | 资料中的 tap 属于 anthropic-experimental,与当前官方仓库组织名不同,安装前应确认 tap 来源 |
| 源码构建 | git clone https://github.com/anthropics-experimental/sandbox-runtime.git<br>cd sandbox-runtime && cargo build --release |
需要审查源码、固定分支或修改实现的人 | 需要 Rust 工具链,并承担自行升级与编译成本 |
| 容器隔离 | 项目目标本身是“无需容器”,不作为官方安装步骤 | 已经采用 Docker 等隔离机制的人 | 多一层系统隔离,配置和排错复杂度更高 |
优先选择 npm 方案:命令最短,而且直接对应官方仓库的 Installation。Homebrew 与源码命令来自 LearnAgent 的 Agent 沙箱实战,适合作为补充路径,不应覆盖官方仓库当前提供的安装入口。
还要注意同名包:PyPI 上的 sandbox-runtime 是另一个 Python 项目,Linux 依赖、配置字段和运行机制都不同。不要因为包名相同就执行它的 pip 或 uv 命令来替代 srt。
用官方命令安装并验证
确认 Node.js 和 npm 可用后,执行官方安装命令:
npm install -g @anthropic-ai/sandbox-runtime
安装结束后,先运行一个允许访问当前目录的读取测试:
srt " cat README.md "
如果测试文件存在,输出中应出现 Running: cat README.md,随后显示文件内容;仓库 README 给出的现象是当前目录访问被允许。
再测试一个明确禁止读取的敏感文件路径:
srt " cat ~/.ssh/id_rsa "
预期输出包含:
cat: /Users/ollie/.ssh/id_rsa: Operation not permitted
路径会随当前用户名变化。真正需要确认的是程序显示 Operation not permitted,而不是照抄示例里的用户名。如果 srt 提示找不到命令,应重新打开终端让 shell 刷新 PATH;若仍失败,可执行 npm prefix -g 查看 npm 全局目录,再检查该目录是否位于当前 PATH 中。
用 srt 包装 MCP 服务
srt 不只用于一条 Bash 命令,也能作为 MCP 服务的启动器。MCP(Model Context Protocol,模型与外部工具通信的协议)配置文件通常位于项目中的 .mcp.json。
未经沙箱限制时,配置直接启动文件系统 MCP 服务:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem"]
}
}
}
改为由 srt 启动后,写入:
{
"mcpServers": {
"filesystem": {
"command": "srt",
"args": ["npx", "-y", "@modelcontextprotocol/server-filesystem"]
}
}
}
然后在 ~/.srt-settings.json 中配置文件权限:
{
"filesystem": {
"denyRead": [],
"allowWrite": ["."],
"denyWrite": ["~/sensitive-folder"]
}
}
这套配置把允许写入的位置限定为当前目录,同时明确排除敏感目录。它表达的是“默认限制、显式放行”的思路:新增目录时,应修改 allowWrite,而不是把整个用户目录加入白名单。
两个常见拦截结果怎么处理
Connection blocked by network allowlist
官方示例中,srt " curl anthropic.com " 请求成功,而 srt " curl example.com " 会输出:
Connection blocked by network allowlist
这说明网络代理已按允许列表拦截请求,不是 npm 安装失败。处理方式是在 ~/.srt-settings.json 的 network 配置中,把确实需要访问的域名加入允许列表,然后重新运行同一个 srt 命令。若目标不需要联网,则保留拦截即可。
官方完整 settings 示例(注意 network 与 filesystem 都是必填段,缺字段会让校验失败):
{
"filesystem": {
"denyRead": [],
"allowWrite": ["."],
"denyWrite": ["~/sensitive-folder"]
},
"network": {
"allowedDomains": [],
"deniedDomains": []
}
}
写入 ~/.srt-settings.json 后生效;不放这个文件时 srt 用内置默认:无网络访问、默认写路径之外不可写、读不受限——这正是上面“没配域名就被拦”的原因。自定义路径用 srt --settings /path/to/srt-settings.json。
各平台依赖与验证:macOS 依赖系统自带的 sandbox-exec(无需另装);Linux 需要 bubblewrap(Debian/Ubuntu 一般 sudo apt install bubblewrap——发行版包管理通用做法);Windows 用系统自带机制(srt-sandbox 本地用户 + WFP),无需第三方依赖。验证命令通用:
srt "echo hello" # 应输出 Running: echo hello 与 hello
srt --debug curl https://example.com # 被拦时看 debug 日志定位是网络还是文件系统
Operation not permitted
文件读取出现该提示,表示沙箱阻止了当前进程访问指定路径。先判断命令是否必须读取该文件:不需要就维持阻止;确实需要时,再把对应文件或目录加入允许读取范围。
不要为了让报错消失而直接关闭整套沙箱。对于 Agent、MCP 服务和包含凭据的目录,应保留默认限制,只为当前任务添加最小权限。
怎么算安装成功
完成安装后,应同时满足三个可观察结果:终端能够找到 srt;读取当前目录文件时能看到 Running: 和文件内容;读取受限文件或访问未放行域名时出现明确的 Operation not permitted 或 Connection blocked by network allowlist。
如果三项都成立,说明 npm 包、srt 命令、操作系统沙箱和网络代理已经共同生效。若只有普通命令能运行、MCP 服务仍能直接访问敏感目录,则还没有真正经过 srt。
官方入口与后续核查
安装命令、能力说明和配置示例以 Anthropic sandbox-runtime 官方仓库 为准。仓库采用 Apache-2.0 许可证,当前同时公开 Issues 和 Pull Requests;研究预览阶段出现配置差异时,可先搜索仓库中的 srt-settings、目标系统平台和具体报错。
如果改用 Homebrew 或源码方式,务必核对 LearnAgent 沙箱教程 中使用的仓库地址与当前官方仓库是否一致。遇到命令层面的异常,再结合 GitHub Issues 提交可复现命令、系统版本和完整输出;提交前先删除令牌、私有路径及敏感目录名称。
参考来源
评论区
登录后可评论。