如何在 NVIDIA OpenShell 中沙盒化 Claude Code 与 Codex
- 作者

- 姓名
- Nino
- 职业
- Senior Tech Editor
当我们在使用具有 --dangerously-skip-permissions 肌肉记忆的自主编码代理时,潜在的安全隐患往往被忽视。一个被污染的 README 文件或恶意的 Issue 评论就可能让代理完全接管你的 Shell、~/.ssh 密钥以及 ~/.aws/credentials。尽管内置沙盒能提供一定程度的保护,但它们通常存在盲区。
为了彻底解决这一问题,我们可以将编码代理放入 NVIDIA OpenShell 中运行。这是 NVIDIA 开源的 Apache-2.0 运行时,专为在严格策略下运行 AI 代理而设计。在我们 n1n.ai 的企业级大模型 API 聚合服务中,我们始终建议开发者在部署高性能模型时配合多层安全防护。以下是关于其隔离机制、安装步骤以及 0.1.x 版本中实用技巧的详细解析。
架构与内核级强制隔离
OpenShell 的架构将系统拆分为网关(控制平面)、监管程序(受信任端)以及运行代理的隔离沙盒。在 Linux 系统上,这种安全保障依托于真正的内核特性:
- 文件系统:基于 Landlock。默认策略仅对
/bin、/usr、/lib、/proc、/dev/urandom、/etc和/var/log开放只读权限,而工作目录、/tmp和/dev/null则具备读写权限。你的主目录由于根本不在容器挂载范围内而绝对安全。 - 网络隔离:默认零出站流量。直接外部出口在运行时级别被切断,TCP 连接和 DNS 查询会被 seccomp 用户通知拦截并交由监管程序根据策略进行判定。
- 基于二进制的规则:沙盒会从
/proc中识别调用可执行文件的真实路径,例如允许"/usr/bin/gh may GET api.github.com"而完全禁止普通的curl行为。 - 凭证管理:代理环境变量中持有的仅是不透明占位符,而不是你的真实 API 密钥。代理仅在请求被绑定到的特定端点时才会动态注入真实值。发送至其他任何地方都会收到带有
403 credential_endpoint_mismatch的响应。 - 进程权限:工作负载以非 root 用户身份运行,没有任何 Linux 能力(capabilities)。
如果与监管程序的连接断开,沙盒会自动冻结代理,实现故障安全(Fail-closed)。
安装与部署步骤
1. 安装 OpenShell 工具链
运行官方提供的安装脚本:
curl -LsSf https://raw.githubusercontent.com/NVIDIA/OpenShell/main/install.sh | sh
远程遥测默认处于开启状态,你可以在本地网关中将其关闭:
export OPENSHELL_TELEMETRY_ENABLED=false
2. 构建自定义代理镜像
由于基础镜像 nvcr.io/nvidia/base/ubuntu:24.04 默认不包含代理 CLI,你需要自行构建镜像。
请注意,当前的 @anthropic-ai/claude-code 要求 Node >= 22.0.0,而 Ubuntu 24.04 的 apt 默认源仅提供 Node 18。因此需要通过 NodeSource 引入 Node 22:
FROM nvcr.io/nvidia/base/ubuntu:24.04
RUN apt-get update && apt-get install -y curl ca-certificates git \
&& curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
&& apt-get install -y nodejs \
&& rm -rf /var/lib/apt/lists/*
RUN npm install -g @anthropic-ai/claude-code @openai/codex
USER 1000
构建本地镜像:
docker build -t agents:local .
3. 配置提供商与策略配置文件
OpenShell 使用提供商配置文件来安全地管理 API 密钥。下载并编辑参考配置文件:
curl -LO https://raw.githubusercontent.com/NVIDIA/OpenShell/main/providers/claude-code.yaml
由于 npm 全局安装会将二进制文件置于 /usr/lib/node_modules/ 下,需更新二进制路径匹配规则:
binaries:
- /usr/bin/claude
- /usr/local/bin/claude
- /usr/lib/node_modules/@anthropic-ai/**
校验并导入配置文件:
openshell provider profile lint -f claude-code.yaml
openshell provider profile import -f claude-code.yaml --global
openshell provider create --name my-claude --type claude-code --from-existing
启动与运行沙盒
通过以下命令创建隔离沙盒并挂载工作区:
openshell sandbox create --name claude-box --from agents:local \
--provider my-claude \
--upload ./src:/workspace/src
openshell sandbox connect claude-box
# 在容器内部执行:
claude
安全特性对比矩阵
| 特性 | Claude Code 内置沙盒 | Codex 沙盒 | Devcontainers | 手动 Bubblewrap | NVIDIA OpenShell |
|---|---|---|---|---|---|
| 主目录 / SSH 访问 | 默认可读 | 受工作区限制 | 挂载卷决定 | 自定义绑定 | 完全隔离 |
| 默认网络策略 | 白名单(初始为空) | 未明确说明 | 默认完全开放 | 自定义 | 全部拒绝 |
| 明文 API 密钥可见 | 是(可配置掩码) | 是 | 是 | 是 | 否(占位符 + 代理注入) |
| 基于二进制的出口控制 | 否 | 否 | 否 | 否 | 是 |
总结与建议
在现代化开发中,保障本地开发环境的安全至关重要。结合诸如 n1n.ai 提供的稳定、高速大模型 API 聚合服务,以及类似 NVIDIA OpenShell 的运行时沙盒隔离方案,能够确保你的核心基础设施免受提示词注入和供应链攻击的威胁。
Get a free API key at n1n.ai