Claude Cowork 技术拆解:用 Apple 虚拟化框架运行 Linux 虚拟机
深入 Claude Cowork 的技术实现细节,揭示其在 macOS 上高效运行开发环境的方案。对想理解新工具原理的程序员有参考价值。
完整中文译文
环境概述
本报告详细说明了 Claude AI 助手"Cowork 模式"的 Linux 容器环境。该环境是一个轻量级、高度沙箱化的 Ubuntu 22.04 LTS 虚拟机,运行于 ARM64 架构,设计用于在保持与主机系统严格隔离的同时,提供安全的代码执行能力。
发行版:Ubuntu 22.04.5 LTS (Jammy Jellyfish)
内核:Linux 6.8.0-90-generic (PREEMPT_DYNAMIC)
架构:aarch64 (ARM64)
ARM64 处理器包含硬件密码加速(AES、SHA1、SHA2、SHA3、SHA512)、原子操作、指针认证(PACA/PACG)和分支目标识别(BTI)等高级安全功能。
沙箱架构
Bubblewrap (bwrap) 隔离
容器使用 Bubblewrap 作为其主要沙箱机制。关键隔离特性包括:
- 网络隔离:
--unshare-net创建独立的网络命名空间 - 进程隔离:
--unshare-pid提供进程命名空间隔离 - 随父进程关闭:父进程退出时容器自动终止
- 新会话:防止终端劫持攻击
Seccomp 过滤
该环境采用严格的 seccomp(安全计算模式)过滤:
- Seccomp 模式:2(过滤模式)
- 活跃过滤器:应用了 2 个 seccomp 过滤器
- NoNewPrivs:启用(防止权限提升)
- Capabilities:所有权能已删除(CapEff = 0)
位于 /usr/local/lib/node_modules_global/lib/node_modules/@anthropic-ai/sandbox-runtime/vendor/seccomp/arm64/unix-block.bpf 的自定义 BPF(伯克利包过滤)程序强制执行系统调用限制。
网络代理架构
所有网络流量都通过本地隧道代理:
socat 进程通过 Unix socket 将流量转发到主机:
- HTTP:
/tmp/claude-http-*.sock - SOCKS:
/tmp/claude-socks-*.sock
会话目录结构
/sessions/brave-loving-maxwell/
├── .bash_logout
├── .bashrc
├── .profile
├── mnt/
│ ├── .claude/ # Claude 配置
│ ├── .skills/ # 可用的技能模块
│ │ └── skills/
│ │ ├── algorithmic-art/
│ │ ├── canvas-design/
│ │ ├── docx/
│ │ ├── pdf/
│ │ ├── pptx/
│ │ ├── skill-creator/
│ │ └── xlsx/
│ ├── outputs/ # 用户可访问的输出目录
│ └── uploads/ # 用户文件上传目录
└── tmp/ # 临时文件
多个目录使用 bindfs 映射主机文件系统位置并控制权限:
/sessions/brave-loving-maxwell/mnt/.skills(可用 927G - 主机磁盘)/sessions/brave-loving-maxwell/mnt/outputs(用户工作区文件夹)/sessions/brave-loving-maxwell/mnt/uploads(上传的文件)/sessions/brave-loving-maxwell/mnt/.claude(配置)
系统包与工具
该环境包含大约 1,201 个包。关键开发工具包括:
- core20(版本 2683、2690)
- snapd(版本 25585、25939)
注意:此环境中不提供 Go、Rust 和 Docker。
主 Claude 进程使用 claude-opus-4-5-20251101 模型运行,并可访问特定的允许工具:Task、Bash、Glob、Grep、Read、Edit、Write 等。
MCP(模型上下文协议)服务器
配置了两个 MCP 服务器:
- Claude in Chrome - 浏览器自动化能力
- b89c1e3a-f5c6-4dec-9d8a-0b3db0a78353 - Cloudflare 集成
用户权限与隔离
用户名:brave-loving-maxwell
主目录:/sessions/brave-loving-maxwell
隔离特性:
- 用户以零权能运行
- NoNewPrivs 标志防止权限提升
- Seccomp 过滤器限制可用的系统调用
- 网络访问仅通过受控代理
- 多层隔离:结合了命名空间隔离、seccomp 过滤和权能删除
- 网络控制:所有流量都经过代理并可监控
- 短生命周期会话:除工作区文件夹外,文件系统在任务间重置
- 无 root 访问权:用户没有提升的权限
- 随父进程关闭:确保会话终止时的清理
隔离架构图
┌─────────────────────────────────────────────────────────┐
│ Host System │
│ ┌───────────────────────────────────────────────────┐ │
│ │ Bubblewrap Sandbox │ │
│ │ ┌─────────────────────────────────────────────┐ │ │
│ │ │ Ubuntu 22.04 VM │ │ │
│ │ │ ┌────────────────────────────────────────┐ │ │ │
│ │ │ │ Claude Code Agent │ │ │ │
│ │ │ │ - Opus 4.5 Model │ │ │ │
│ │ │ │ - Tool Access (Bash, Read, Write...) │ │ │ │
│ │ │ └────────────────────────────────────────┘ │ │ │
│ │ │ │ │ │ │
│ │ │ ┌─────────┐ ┌────┴────┐ ┌───────────┐ │ │ │
│ │ │ │ socat │ │ socat │ │ Session │ │ │ │
│ │ │ │ :3128 │ │ :1080 │ │ Storage │ │ │ │
│ │ │ └────┬────┘ └────┬────┘ └───────────┘ │ │ │
│ │ └───────┼─────────────┼───────────────────────┘ │ │
│ └──────────┼─────────────┼──────────────────────────┘ │
│ │ │ │
│ Unix Socket Unix Socket │
│ │ │ │
│ HTTP Proxy SOCKS Proxy │
└─────────────────────────────────────────────────────────┘
总结
该容器环境代表了为 AI 辅助计算精心设计的沙箱。它在功能(完整的开发工具链、文件操作、网络访问)和安全性(严格隔离、权能删除、流量监控)之间取得了平衡。会话文件系统的短生命周期特性与持久工作区文件夹相结合,为最终用户提供了安全性和实用性。
该环境是为 Claude Code agent 特别优化的,提供了代码执行、文件创建和网络访问所需的工具,同时保持强大的隔离边界以保护用户的系统和更广泛的基础设施。