跳到正文
FunCoding

搜索

搜索文档、智能体、博客、Skill 和 MCP

选择沙箱环境

对比 Claude Code 的隔离方案:内置沙箱 Bash 工具、sandbox runtime、dev container、自定义容器、虚拟机和云端会话,按威胁模型选择,并在组织内强制。

隔离 Claude Code 会限制会话能读、写和在网络上触及什么。当你让 Claude 在更少权限提示下工作、无人值守运行,或指向你不完全信任的代码时,这一点最重要。Claude Code 可以运行在多种隔离环境里,从轻量的按命令沙箱到完全独立的虚拟机。本页按隔离什么、需要什么来对比它们,帮你按威胁模型选择,并展示如何在组织里强制。更广的安全模型见「安全」页,Agent SDK 部署见「安全部署」。

对比

前两种方案在宿主操作系统上运行,不用容器;其余把 Claude Code 放进容器或虚拟机。

方案隔离什么需要 Docker设置成本
沙箱 Bash 工具Bash、PowerShell 和 Monitor 命令及其子进程否macOS 上极小;Linux 和 WSL2 上低
Sandbox runtime整个 Claude Code 进程,包括文件工具、MCP 服务器和 hooks否低
Dev container完整开发环境是中
自定义容器完整开发环境是中到高
虚拟机完整操作系统否高
云端会话由 Anthropic 托管的完整操作系统否无;需要 Claude 订阅,除非用 claude --cloud 启动否则还需连接 GitHub 账号

沙箱 Bash 工具内置于 Claude Code,限制 Bash 命令;内置文件工具、MCP 服务器和 hooks 仍直接在你的宿主上运行。表中其他方案把整个 Claude Code 进程放在隔离边界内,所以文件工具、MCP 服务器和 hooks 也受限。

沙箱隔离降低被攻破的影响,但不能消除风险:任何允许网络出口的方案仍可能泄露智能体可读的数据,任何把项目目录以可写方式挂载的方案仍可能修改那些代码。隔离也不改变发送给模型的内容:你的提示词和 Claude 读取的文件无论有没有沙箱都会传给 Anthropic API 或你配置的提供商。

选择

你想要从这里开始
在自己机器上日常工作时减少权限提示用 /sandbox 配置的沙箱 Bash 工具
让 Claude 以 --dangerously-skip-permissions 或自动模式无人值守工作预配置的 dev container、任意容器或 VM,或 sandbox runtime
不用 Docker 也隔离 MCP 服务器和 hooks,而不仅是 BashSandbox runtime
处理不受信任的仓库专用虚拟机,或有 Claude 订阅时用云端会话(用 claude --cloud 启动无需 GitHub)
在团队里标准化沙箱环境复制进你仓库的预配置 dev container
在没有本地设置的设备上用 Claude Code云端会话(需要 Claude 订阅和已连接的 GitHub 账号)
要求组织里每个开发者都隔离在组织范围内强制隔离
在原生 Windows 主机上工作容器或 VM,或在 WSL2 里运行 Bash 沙箱

隔离与权限模式的关系

权限模式决定工具调用是否运行、是否先提示你;隔离限制命令运行起来之后能访问什么。二者配合:权限模式让动作无需询问就运行时,隔离边界限制这些动作能触及什么。传 --dangerously-skip-permissions 时 Claude 不先询问就行动,没有提示来拦住错误,你选的隔离边界就是保护系统的东西。始终在容器、VM 或 sandbox runtime 里运行 --dangerously-skip-permissions 会话,这样文件工具、MCP 服务器和 hooks 也在边界内。在 Linux 和 macOS 上,以 root 运行时 Claude Code 拒绝带这个标志启动。自动模式用分类器审查动作代替提示,分类器是按动作的控制,不是隔离边界,所以隔离边界对无人值守运行仍增加纵深防御,但不像 --dangerously-skip-permissions 那样是必需的。沙箱 Bash 工具单独只约束 shell 命令,所以在任一模式下都不足以支撑完全无人值守运行;可以叠加方案,例如在容器或 VM 内运行沙箱 Bash 工具,就在外层环境边界之上有了操作系统级命令限制。

沙箱 Bash 工具

内置于 Claude Code,用操作系统原语限制 Claude 运行的每条 Bash、PowerShell 或 Monitor 命令的文件系统和网络访问。不支持原生 Windows(在 Windows 主机上用 WSL2 或下面的容器/VM 方案)。运行 /sandbox 命令打开沙箱面板并选择模式;批准模式、默认边界以及如何放宽或收紧见「沙箱」页。按命令的沙箱不覆盖会话里运行的一切:Read、Edit 和 WebFetch 等其他内置工具在 Claude Code 进程内运行,由路径或域名的权限规则来把关;MCP 服务器和命令 hooks 是在宿主上不受约束运行的独立进程。要把内置工具、MCP 服务器和 hooks 都放在同一个操作系统边界后面,在 sandbox runtime、dev container 或自定义容器里运行整个 Claude Code 进程。

Sandbox runtime

@anthropic-ai/sandbox-runtime 包用内置 Bash 沙箱所用的同样的 Seatbelt 或 bubblewrap 隔离包住整个进程。通过运行时运行 Claude Code 会约束会话里的每个工具、hook 和 MCP 服务器,而不只是 shell 命令。运行时是 beta 研究预览,配置格式可能随包演进而变化。

设置与启动

在 Linux 和 WSL2 上,运行时依赖与内置沙箱相同的 bubblewrap 和 socat,外加 ripgrep(Claude Code 自带,但独立运行时从你的 PATH 解析);macOS 上无需额外包。默认情况下运行时拒绝网络访问,并把写入限制在一小组内置运行时路径内,所以要在通过它启动 Claude Code 之前配置好。配置放在 ~/.srt-settings.json,或用 --settings 传入的文件,完整 schema 见包的 README。至少允许写入:你的项目目录;Claude Code 的配置路径 ~/.claude 和 ~/.claude.json;/tmp(Claude Code 在此写运行时文件)。允许会话需要的网络域名:api.anthropic.com 或你配置的提供商的端点(在第三方提供商上也保留 api.anthropic.com,因为 WebFetch 域名安全检查默认仍会调用它,除非设置 skipWebFetchPreflight: true);claude.ai 和 platform.claude.com(OAuth 登录和令牌刷新需要,用 API Key 认证的运行可以去掉这两个)。

在 Linux 和 WSL2 上,运行时只对已经存在的路径应用写入授权,所以在全新环境里首次启动前先创建 Claude Code 的配置路径:

mkdir -p ~/.claude && { [ -f ~/.claude.json ] || echo '{}' > ~/.claude.json; }

设置文件就位后,用 npx 启动并把 claude 作为要包住的命令:

npx @anthropic-ai/sandbox-runtime claude

运行时自身会阻止什么

运行时不需要你配置就阻止风险最高的写入:denyWrite 优先于 allowWrite;在项目根,运行时拒绝 .git/hooks、拒绝 .git/config(除非设置 filesystem.allowGitConfig: true),并拒绝 .mcp.json、.claude/commands、.claude/agents 和 shell 启动文件。在 macOS 上这些拒绝在写入发生时检查,所以也覆盖会话期间创建的嵌套文件和仓库;在 Linux 和 WSL2 上,运行时在启动时一次性构建拒绝列表,可靠覆盖项目根,对当时已有的嵌套副本做尽力而为的浅层扫描,不覆盖会话之后创建的东西(如 git init、git clone 或脚手架)。~/.srt-settings.json 不存在且没传 --settings 时,运行时仍会启动,阻止网络访问并把写入限制在内置路径(如 /tmp/claude、~/.npm/_logs、~/.claude/debug),不要把干净启动当作你的设置已加载的证明;设置文件存在但为空、不可读或无效时(无论是 ~/.srt-settings.json 还是 --settings 文件),运行时拒绝启动,--settings 文件不存在时也拒绝。你的写入授权仍包括 Claude Code 从中加载配置的其他路径,所以用 denyWrite 拒绝它们:能写这些路径的沙箱会话可以持久化 hooks、权限规则或 MCP 服务器,在你下次启动 Claude Code 时无沙箱运行。无人值守运行之后,检查你保留可写的路径;在 Linux 和 WSL2 上还要检查会话创建的任何东西。

Dev container

Dev container 在 VS Code 或兼容编辑器管理的 Docker 容器里运行 Claude Code,项目挂载进去;你可以在仓库里用 .devcontainer/ 目录定义自己的。claude-code 仓库发布了一个带默认拒绝 iptables 防火墙的示例 dev container 作为起点,复制进你的仓库并调整防火墙允许列表、基础镜像和固定的 Claude Code 版本。由于防火墙阻止未批准的出口,这样的配置支持在无人值守时以 --dangerously-skip-permissions 运行 Claude Code。详见「开发容器」页。

自定义容器

可以在任何 Docker 或 OCI 容器镜像里运行 Claude Code,用你自己的网络策略、挂载卷和 seccomp 配置。这是已有容器基础设施或 CI 运行器的组织最常见的路径;一些托管沙箱和远程执行服务也能为你托管容器。适用与自己运营的任何容器相同的清单:检查什么以可写方式挂载、容器内能触及什么凭据和令牌、网络出口策略允许什么。可以在容器内叠加内置 Bash 沙箱做按命令限制;无特权容器需要沙箱排障页里说明的嵌套沙箱设置。

虚拟机

专用虚拟机提供最强的隔离,有自己的内核,在云或 microVM 部署里还有自己的虚拟化硬件。选项包括云实例、本地虚拟机监控器和 Firecracker 这样的 microVM。在评估不受信任的代码、安全策略要求智能体与宿主之间内核级隔离、或没有可用的宿主环境时用这种方式。Docker Sandboxes 提供带自己的 Docker 守护进程和工作区同步的 microVM,可在任何安装了 Docker Sandboxes 的宿主上运行 Claude Code,它是 Docker 的免费独立产品,不需要 Docker Desktop。

云端会话

云端会话在隔离的、由 Anthropic 管理的虚拟机里运行。网络代理强制默认允许列表,另有一个代理把你的 GitHub 令牌保存在沙箱之外,同时在沙箱内为仓库访问签发限定范围的凭据。你的组织路由到自托管环境的会话则在你自己准备的基础设施上运行,隔离、出口控制和 git 凭据由你负责。想要完整 VM 隔离又不想自己准备基础设施,或从没有本地开发环境的设备委派任务时,用这种方式。它需要 Claude 订阅;除非从 CLI 用 --cloud 启动,还需要连接的 GitHub 账号,沙箱才能克隆你的仓库。

在组织内强制隔离

个人开发者可以选择本页的任何方案;组织能强制什么、用什么工具,取决于方案:

  • 内置 Bash 沙箱:Claude Code 自己强制的唯一方案。通过托管设置下发 sandbox 设置键,可以是由 MDM 管理的文件,也可以是 claude.ai 上的服务端托管设置。要下发哪些键、如何防止开发者放宽策略,见「用托管设置强制沙箱」
  • Dev container:把示例 dev container 提交进你的仓库来标准化团队环境。这是约定而不是强制边界,因为 Claude Code 并不要求容器;如果不希望开发者在容器之外运行 Claude Code,用组织的设备管理或软件允许列表工具强制
  • 自定义容器和 VM:通过批准的镜像分发 Claude Code,并用组织的设备管理或软件允许列表工具阻止在其外安装