摘要: 本文讨论 Anthropic 于 2026 年 9 月 22 日发布 Claude Opus 5.5 时重点介绍的 Coding Agent 安全能力:在每个动作执行前进行审查的分类器,以及可供安全团队审计的开源沙箱,并给出把两者组合起来的落地配置。最重要的结论是:分类器(对应 Claude Code 的 auto mode)是逐个动作的审批闸门,不是隔离边界;开源沙箱 sandbox-runtime 才是操作系统级的边界。两者叠加,再用 permissions.deny 写死不可逾越的规则,才能让 Agent 放心无人值守运行。本文适合使用 Claude Code 做长时间自动化编码的开发者、团队负责人和安全工程师。相关功能均已可用,其中 sandbox-runtime 仍是 Beta 研究预览。读完后你将获得一套可复制的用户设置、组织托管设置、沙箱配置和一个经过实测的边界自检脚本。
配套项目源码:下载 Claude Opus 5.5 Agent 安全配置包(ZIP)。解压后阅读 README.md,并在本地填写环境变量。
核心结论
搭建 Claude Opus 5.5 的 Agent 安全防线,应该分四层:permissions.deny 写死绝对禁止的操作,auto mode 分类器逐个审查剩余动作,sandbox-runtime 在操作系统层面限制整个 Claude Code 进程能读写的文件和能访问的域名,最后由人工审批和合并前代码审查兜底。官方文档明确说明,分类器是逐动作控制而不是隔离边界,所以无人值守运行时仍建议叠加沙箱。
- 官方三层能力:Anthropic 官方公告称 Opus 5.5 配有在每个动作运行前进行筛查的分类器、可审计的开源沙箱,以及在合并前发现漏洞的代码审查。
- 分类器怎么用:它就是 Claude Code 的 auto mode;Pro、Max、Team 计划默认启用,Enterprise 计划和 API Key 用户默认是 Manual 模式,需要主动开启。
- 沙箱怎么用:用
npx @anthropic-ai/sandbox-runtime claude把整个 Claude Code 进程放进沙箱,文件工具、MCP Server 和 Hook 都受约束,而不只是 Bash 命令。 - 硬规则放哪里:必须永远禁止的操作写进
permissions.deny,它在分类器之前生效、所有模式下都拦截。 - 实测结论:本文的自检脚本在 Linux 上实测,8 项“应被拦截”的检查全部被沙箱拦截;白名单域名放行一项在测试容器中未通过,原因见下文。
背景与主要变化
先说结论:Opus 5.5 把“安全的无人值守 Agent”作为发布重点之一,但真正的防护来自模型之外的配置,模型自身的改进只是其中一层。
Anthropic 于 2026 年 9 月 22 日发布 Claude Opus 5.5,API 模型名为 claude-opus-5-5。官方定价为每百万 Token 输入 $4、输出 $20,缓存读取 $0.20,比 Opus 5 分别降低 20% 和 60%。与本文主题相关的官方信息有三类:
| 类别 | 官方说法 | 对实践的意义 |
|---|---|---|
| 模型自身 | 更少采取难以撤回的操作;在提示词注入测试中各设置下均不弱于 Opus 5;在 Gray Swan 的测试中与 Fable 5.1 并列注入成功率最低 | 降低风险,但不能替代外部控制 |
| 越界倾向 | 在新的“跨越隔离边界”评估中,尝试绕过边界的次数比 Opus 5 或 Mythos 5.1 少约 85%,且均为低严重度、主动报告 | 仍有尝试,沙箱依然必要 |
| 配套能力 | 动作分类器、开源沙箱、合并前代码审查 | 本文的配置对象 |
官方同时坦言,构建能在部署前可靠捕获所有失败的评估仍是未解决的问题,模型也常常怀疑自己正在被评估。这正是需要在模型之外再加几层防护的原因。
还有两点会影响日常使用。第一,Opus 5.5 带有与 Fable 5.1 类似的网络安全和生物安全防护,Claude Code 文档说明被标记为网络安全的请求会改由 Opus 4.8 执行、生物类请求改由 Opus 5 执行;日常修 Bug 不受影响,但安全研究类工作流会遇到回退。第二,auto mode 分类器默认运行在 Claude Sonnet 5 上,而不是你选择的 Opus 5.5,在 Enterprise 和 API 账户中,分类器调用会计入 Token 用量。
核心功能拆解
结论先行:分类器决定“这一步能不能做”,沙箱决定“就算做了,最多能碰到什么”,permissions.deny 决定“无论如何都不许做什么”。三者职责不重叠,缺一不可。
分类器:每个动作的决策顺序
根据 Claude Code 权限模式文档,每个动作按固定顺序判定,第一个命中的步骤生效:
- 命中 allow、ask、deny 规则的动作立即处理,但写入受保护路径、针对关键路径的删除等例外仍会交给分类器或提示你。
- 只读操作和工作目录内的文件编辑自动放行(受保护路径除外)。
- 其余动作交给分类器审查。
- 分类器拦截后,Claude 会收到原因并尝试其他方案。
几个容易被忽略的设计细节:进入 auto mode 时,Bash(*)、Bash(python*) 这类允许任意代码执行的宽泛规则会被自动丢弃,只保留 Bash(npm test) 这样的精确规则;分类器看不到工具返回的结果,因此文件或网页中的恶意内容无法直接操纵分类器,另有服务端探针在 Claude 读取前扫描工具结果;子代理在启动时、运行中和结束后都会被检查。
分类器默认拦截什么
官方列出的默认拦截项很长,最常用的包括:curl | bash 式下载执行、向外部发送敏感数据、生产部署与数据库迁移、云存储批量删除、授予 IAM 或仓库权限、强制推送、git reset --hard 等会丢弃未提交修改的命令、terraform destroy、合并未经人工批准的 PR、禁用 CI 检查、把凭据打印到输出中等。默认放行的包括工作目录内的文件操作、安装锁文件中声明的依赖、只读 HTTP 请求,以及推送到当前仓库的普通分支。运行 claude auto-mode defaults 可以查看完整规则。
分类器默认只信任工作目录和会话开始时已配置的 Git 远端。公司内部的代码托管、存储桶和服务需要写进 autoMode.environment,否则会被当作外部目标拦截。
沙箱:sandbox-runtime 的边界模型
sandbox-runtime(命令名 srt)在 macOS 上使用 Seatbelt,在 Linux 上使用 bubblewrap,网络请求经由主机上的代理按域名白名单过滤。它的规则有一个需要特别记住的不对称设计:
| 维度 | 默认行为 | 规则优先级 |
|---|---|---|
| 读文件 | 默认全部允许,可用 denyRead 划出禁区 |
allowRead 优先于 denyRead |
| 写文件 | 默认全部禁止,需用 allowWrite 显式开放 |
denyWrite 优先于 allowWrite |
| 网络 | 默认全部禁止,需用 allowedDomains 显式开放 |
deniedDomains 优先 |
| 强制保护 | .bashrc 等 Shell 配置、.git/hooks、.git/config、.mcp.json、.claude/commands 等始终禁止写入 |
无需配置,无法被 allowWrite 覆盖 |
与 Claude Code 内置的 /sandbox(只约束 Bash、PowerShell 和 Monitor 命令)不同,用 srt 包裹整个 Claude Code 进程后,Read、Edit 等内置工具、MCP Server 和命令 Hook 都在同一个边界内。

适用人群与使用场景
结论:只要你打算让 Claude 在不逐条确认的情况下运行,就至少需要“分类器 + 沙箱”中的一种;无人值守运行则两者都要。
官方文档针对不同目标给出了起步配置,整理如下:
| 你的目标 | 推荐起步配置 | 需要的隔离 |
|---|---|---|
| 敏感工作,每步自己确认 | Manual 模式 | 无 |
| 本地迭代,少一些提示,但不用分类器 | Manual 模式 + /sandbox 选择自动放行 |
内置 Bash 沙箱 |
| 日常放手工作 | auto mode | 可选;加沙箱或容器作为纵深防御 |
| CI 中只允许明确列出的命令 | dontAsk 模式 + --allowedTools 白名单 |
CI 运行器自身 |
| 完全无人值守 | --dangerously-skip-permissions |
必须:容器、虚拟机或 sandbox-runtime,且以非 root 运行 |
对个人开发者,推荐 auto mode 配合 srt 包裹整个进程;对团队,关键在于用托管设置统一下发策略,因为只有内置 Bash 沙箱是 Claude Code 自己能强制执行的,容器和 srt 需要借助设备管理工具保证;对处理不可信代码的场景,官方建议使用独立虚拟机或 Anthropic 托管的云会话。
更多 Claude Code 的使用教程可以在站内 Claude Code 专题 中找到。
安装、配置或使用步骤
结论:按下面 8 步,大约 30 分钟可以在一台 macOS 或 Linux 开发机上完成“auto mode + sandbox-runtime + 硬性 deny 规则”的完整配置。
- 升级并选择模型:更新 Claude Code,在会话中用
/model选择 Opus 5.5,或在设置中写"model": "claude-opus-5-5"。 - 写入用户设置:把配置包中
claude/user-settings.json的内容合并进~/.claude/settings.json。注意defaultMode: "auto"和autoMode必须写在用户设置里,写在项目共享的.claude/settings.json中不会生效,这是为了防止仓库自己给自己放权。 - 配置可信基础设施:在
autoMode.environment中保留"$defaults",再用自然语言写上公司的代码托管组织、存储桶、内部域名和服务。保存后运行claude auto-mode config确认生效。 - 安装沙箱依赖:Linux 或 WSL2 执行
sudo apt-get install -y bubblewrap socat ripgrep;macOS 只需brew install ripgrep。然后执行npm install -g @anthropic-ai/sandbox-runtime。 - 编写沙箱配置:以配置包中的
srt/srt-settings.json为模板,按项目修改域名白名单和路径,保存为~/.srt-settings.json。Linux 上先执行mkdir -p ~/.claude && echo '{}' > ~/.claude.json,因为 Linux 只对已存在的路径授予写权限。 - 运行自检脚本:以非 root 用户执行
bash scripts/verify-srt.sh ~/.srt-settings.json,确认全部检查通过。官方特别提醒:配置文件无效时 srt 仍会启动并默认断网,所以“启动成功”不代表配置已加载。 - 在沙箱中启动 Claude Code:进入项目目录,执行
npx @anthropic-ai/sandbox-runtime claude(全局安装后也可以写成srt claude)。 - 组织级统一下发(可选):把
claude/managed-settings.json通过托管设置下发,禁用 bypass 模式、强制开启 Bash 沙箱,并统一组织级 deny 规则。
用户设置的核心部分如下(规则语法以 Claude Code 官方 permissions 文档为准):
{
"model": "claude-opus-5-5",
"permissions": {
"defaultMode": "auto",
"deny": [
"Bash(git push --force *)",
"Bash(terraform destroy *)",
"Read(~/.ssh/**)",
"Read(./.env)"
],
"ask": ["Bash(npm publish *)"]
},
"autoMode": {
"environment": [
"$defaults",
"Source control: github.com/YOUR_ORG and all repos under it",
"Trusted internal domains: *.internal.YOUR_DOMAIN"
]
}
}
沙箱配置示例。它开放 Claude Code 运行所需的域名和路径,禁止读取密钥目录、禁止写 .env:
{
"network": {
"allowedDomains": ["api.anthropic.com", "claude.ai", "platform.claude.com",
"github.com", "*.github.com", "registry.npmjs.org"],
"deniedDomains": []
},
"filesystem": {
"denyRead": ["~/.ssh", "~/.aws", "~/.config/gcloud", "~/.kube"],
"allowWrite": [".", "/tmp", "~/.claude", "~/.claude.json"],
"denyWrite": [".env", ".env.local", "secrets/", "~/.claude/settings.json"]
}
}
claude.ai 和 platform.claude.com 是 OAuth 登录与刷新令牌所需,用 API Key 认证时可以删除。~/.claude/settings.json 列入 denyWrite,是为了防止沙箱内的会话改写权限规则或 Hook,官方文档特别提醒过这一风险。如果你只想单独隔离某个 MCP Server,可以参考配置包中 mcp-sandboxed.json 的写法,把 command 改为 srt。
实际工作流示例
结论:以“夜间无人值守做一次依赖升级和迁移”为例,四层防护分别在不同位置拦住不同风险,任何一层失效时其他层仍能兜底。
一次无人值守任务中各层的分工
晚上你在项目目录执行 srt claude,交代任务“把项目从 Express 4 升级到 5,修复所有测试,推送到 feature 分支并开 PR,不要合并”。运行过程中可能出现这些动作:
- 修改代码、运行测试:工作目录内的编辑自动放行,
npm test在沙箱内运行。 - 推送到 feature 分支并创建 PR:分类器默认放行推送到当前仓库的普通分支,以及与请求相符的 PR。
- 依赖的安装脚本试图执行
curl … | bash:分类器默认拦截下载并执行代码的动作。 - 某个被投毒的依赖试图读取
~/.aws/credentials并上传:即使分类器没有识别出来,沙箱的denyRead也会让读取失败,而上传目标不在域名白名单中,网络请求同样被拒绝。 - Claude 想“顺便”合并 PR:你在对话中说了“不要合并”,官方说明分类器会把对话中声明的边界当作拦截信号;合并未经人工批准的 PR 本身也在默认拦截列表中。
- 有人试图强制推送覆盖主分支:
permissions.deny中的规则在分类器之前生效,直接拒绝。
第二天早上,你看到的是一个待审查的 PR,而不是已经上线的改动。合并前再用官方提供的代码审查能力或团队现有流程检查一遍,形成最后一层防线。
边界自检的实测结果
配置包中的 verify-srt.sh 会在临时目录里逐项验证沙箱边界。本文在 Ubuntu 24 测试容器中,用 sandbox-runtime 1.0.0 实际运行,结果如下:
✅ [allow] 项目内写文件
✅ [allow] 读取项目文件
✅ [deny] 写 .env(denyWrite)
✅ [deny] 写 .bashrc(强制保护)
✅ [deny] 写 .git/hooks(强制保护)
✅ [deny] 读取 ~/.ssh(denyRead)
✅ [deny] 写项目外路径
✅ [deny] 访问白名单外域名
❌ [allow] 访问白名单内域名 curl: (7) Failed to connect to localhost port 3128
所有“应被拦截”的检查都确实被拦截了。唯一失败的是白名单域名放行:沙箱内的代理桥接没有启动。本文的测试容器本身运行在另一层沙箱中,并且以 root 身份执行,而官方 README 建议使用非 root 调用者,因此这很可能是测试环境导致的,但本文无法在此环境中证实。请在你自己的机器上以普通用户运行脚本,确认白名单域名可以正常访问。
编写脚本时还踩到一个值得注意的坑:sandbox-runtime 1.0 需要用 srt -c "命令" 运行命令字符串。第一次调用方式写错时,所有“拦截”检查都显示通过,实际上是命令根本没有执行(退出码 127)。脚本现在会把这种情况标记为失败,这也提醒我们:验证安全配置时,必须确认“被拦截”确实来自沙箱,而不是别的错误。

对比与选型建议
结论:个人日常用“auto mode + srt 包裹整个进程”;团队标准化用 dev container;处理不可信代码用虚拟机或云会话;--dangerously-skip-permissions 只在上述隔离环境中使用。
官方对几种隔离方式的比较可以概括为:
- 内置 Bash 沙箱(
/sandbox):设置最简单,但只约束 Shell 命令,内置文件工具、MCP Server 和 Hook 仍在主机上直接运行,单独使用不足以支撑无人值守。 - sandbox-runtime:无需 Docker,覆盖整个进程,适合个人开发机;Beta 状态,配置格式可能变化。
- Dev container:官方示例带默认拒绝的 iptables 防火墙,适合团队统一环境,但它是约定而不是 Claude Code 强制的边界。
- 自定义容器或虚拟机:隔离最强,虚拟机拥有独立内核,适合评估不可信代码或有合规要求的场景。
- 云会话:由 Anthropic 托管的隔离虚拟机,网络代理执行默认白名单,GitHub 令牌保存在沙箱之外。
权限模式的选择同样关键。auto mode 适合绝大多数放手场景;dontAsk 适合 CI 这类只允许固定命令的环境;bypassPermissions 官方明确说明对提示词注入和意外操作没有任何保护,只能在隔离环境中使用,组织可以用 disableBypassPermissionsMode 禁用它。关于 Agent 安全的更多内容,可参考站内 Agent 安全相关文章。
风险、限制与注意事项
结论:分类器会误判、会失效,沙箱也有已知绕过面,所以任何一层都不应被当成唯一防线,高风险操作必须保留人工审批。
分类器不是保证。 官方文档明确警告 auto mode 减少了权限提示,但不保证安全,应只用于你信任大方向的任务,不能替代对敏感操作的审查。分类器连续拦截 3 次或累计 20 次后会暂停 auto mode、恢复人工提示;在非交互的 -p 运行中没有人可以提示,被拦截的动作直接不执行,任务继续。
对话中的边界可能丢失。 你在对话里说的“不要推送”只保存在对话记录中,上下文压缩可能删除这条消息。官方建议:需要硬性保证时,写成 deny 规则。
分类器服务故障。 GitHub 上有用户报告,分类器所用模型暂时不可用时,所有需要审查的 Bash 命令都被阻塞,且未按文档回退为人工提示,导致一次生产数据库操作被卡住约 15 分钟。执行有时效要求的运维操作时,应准备好切换到 Manual 模式。
域名白名单不等于无泄露。 sandbox-runtime 只按域名过滤,不检查流量内容。允许 github.com 意味着进程可以推送到任意仓库;某些情况下还可能通过域名前置(domain fronting)绕过过滤。白名单应尽量收窄。
危险的放宽选项。 允许 /var/run/docker.sock 这类 Unix Socket 等于把主机控制权交给沙箱内的进程;enableWeakerNestedSandbox 会显著削弱 Linux 上的隔离,只应在外层已有隔离时使用;macOS 的 allowAppleEvents 会让沙箱失去代码执行隔离。这些选项不要从项目内的配置文件读取。
Linux 上的强制保护有盲区。 Linux 版在启动时一次性生成禁止写入列表,只覆盖已存在的文件,会话中新建的仓库或文件(如 git init、git clone 产生的)不受保护。无人值守运行结束后,应检查可写路径和新建内容。
提示词注入仍需警惕。 官方称 Opus 5.5 的抗注入能力不弱于此前模型,但没有模型能完全免疫。读取外部网页、Issue、依赖代码时产生的指令,不应被当作用户授权。
人工审批不可省略。 生产部署、数据库迁移、密钥与权限变更、对外发布和付款类操作,应通过 ask 规则或流程强制人工确认。分类器的默认拦截列表覆盖了其中很多项,但这是防线之一,不是唯一防线。
成本与数据。 在 Enterprise 和 API 账户中,分类器调用会计入 Token 用量;沙箱不改变发送给模型的内容,Claude 读取的文件仍会传到 API。
事实依据与来源
官方已确认的事实: Opus 5.5 的发布日期、模型名、价格、三层安全能力、抗提示词注入与越界倾向数据、网络安全与生物安全防护,来自 Anthropic 官方发布页。分类器的决策顺序、默认拦截与放行规则、回退阈值、分类器看不到工具结果、宽泛 allow 规则被丢弃、分类器默认运行在 Sonnet 5 上、各计划的默认权限模式,来自 Claude Code 权限模式文档;autoMode.environment 的写法与读取范围来自 Claude Code auto mode 配置文档;网络安全请求回退到 Opus 4.8、生物类回退到 Opus 5 来自 Claude Code 模型配置文档;各隔离方式的比较、sandbox-runtime 的启动方式与默认拦截行为,来自 Claude Code 沙箱环境文档;sandbox-runtime 的配置字段、读写优先级、强制保护路径和安全限制,来自其官方 GitHub 仓库 README。
第三方资料: 分类器服务故障时未回退到人工提示的问题,来自 anthropics/claude-code 仓库的用户 Issue;媒体对发布内容的汇总来自 Help Net Security、KDnuggets 等。
实测与编辑判断: 自检脚本的 9 项结果为本文在 Ubuntu 24 容器中使用 sandbox-runtime 1.0.0 的实际运行输出,白名单放行失败的原因为推测。四层分工、配置文件内容和工作流示例为本文实施建议,其中权限规则写法需以官方文档为准。
内容核验日期: 2026 年 9 月 25 日。
FAQ
Opus 5.5 的“动作分类器”在哪里开启?
它对应 Claude Code 的 auto mode。在 CLI 中按 Shift+Tab 切换,或用 claude --permission-mode auto 启动,也可以在 ~/.claude/settings.json 中设置 "defaultMode": "auto"。Pro、Max、Team 计划默认启用;Enterprise 计划和使用 API Key 的账户默认是 Manual 模式,需要手动开启,组织管理员可以禁用它。
开了 auto mode 还需要沙箱吗?
无人值守运行时建议需要。官方文档说明分类器是逐动作的控制,不是隔离边界,沙箱能在分类器误判时限制损害范围。如果使用 --dangerously-skip-permissions,则必须在容器、虚拟机或 sandbox-runtime 中运行。
/sandbox 和 sandbox-runtime 有什么区别?
/sandbox 是 Claude Code 内置的 Bash 沙箱,只约束 Bash、PowerShell 和 Monitor 命令及其子进程。sandbox-runtime 是开源的独立工具,用来包裹整个 Claude Code 进程,内置文件工具、MCP Server 和 Hook 也都在边界之内。两者使用相同的底层机制(macOS 的 Seatbelt、Linux 的 bubblewrap)。
为什么我在项目 .claude/settings.json 里设置 auto mode 不生效?
这是有意设计。官方说明 defaultMode: "auto" 和 autoMode 配置不会从项目共享的 .claude/settings.json 读取,以防一个仓库给自己授予自动权限。请写在 ~/.claude/settings.json、.claude/settings.local.json 或组织托管设置中。
分类器总是拦截访问公司内部服务怎么办?
分类器默认只信任工作目录和会话开始时的 Git 远端。在 autoMode.environment 中保留 "$defaults",再用自然语言写上公司的代码托管组织、内部域名、存储桶和关键服务,然后运行 claude auto-mode config 确认生效。反复被拦截的操作也可以通过 /feedback 反馈误判。
如何确认沙箱配置真的生效了?
运行本文配置包中的 verify-srt.sh,它会逐项测试文件读写和网络访问。不要只看 srt 是否能启动:官方说明配置文件无效时 srt 仍会启动,只是默认断网并限制写入。另外要确认“被拦截”确实来自沙箱,而不是命令本身报错。
用 Opus 5.5 做安全研究为什么会被回退到其他模型?
Opus 5.5 带有与 Fable 5.1 类似的网络安全防护。Claude Code 文档说明,被标记为网络安全的请求会改由 Opus 4.8 执行,生物类请求改由 Opus 5 执行。日常修复自己代码中的 Bug 不受影响;需要做专业安全工作的从业者,可以关注官方即将扩展到 Opus 5.5 的网络安全验证计划。
团队如何统一强制这些安全配置?
通过托管设置下发:用 disableBypassPermissionsMode 禁用 bypass 模式,用 sandbox.enabled 强制开启内置 Bash 沙箱,统一 deny 规则和 autoMode.environment。开发者可以追加自己的条目,但不能删除托管设置提供的条目。注意,只有内置 Bash 沙箱是 Claude Code 能自己强制执行的,要求所有人在容器或 srt 中运行,需要借助设备管理或软件白名单工具。
参考来源
- Anthropic:Introducing Claude Opus 5.5
- Claude Code Docs:Choose a permission mode(auto mode 与分类器)
- Claude Code Docs:Configure auto mode
- Claude Code Docs:Choose a sandbox environment
- Claude Code Docs:Model configuration(安全分类器回退)
- GitHub:anthropic-experimental/sandbox-runtime
- Anthropic Engineering:How we built Claude Code auto mode
- Claude Platform Docs:What's new in Claude Opus 5.5
- GitHub Issue:分类器不可用时未回退到人工提示
- Help Net Security:Claude Opus 5.5 发布报道
内容核验日期:2026 年 09 月 25 日
环境配置与 Docker 工作流
适合阅读安装部署、本地配置、服务器搭建和自动化流程类文章后继续转化。