最新n1n v2.0.1 正式上线!企业级大模型接口聚合平台 (LLM API Gateway),为您接入 500+ AI Models,价格低至 1 折, 立即尝试

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

作者
  • avatar
    姓名
    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手动 BubblewrapNVIDIA OpenShell
主目录 / SSH 访问默认可读受工作区限制挂载卷决定自定义绑定完全隔离
默认网络策略白名单(初始为空)未明确说明默认完全开放自定义全部拒绝
明文 API 密钥可见是(可配置掩码)是是是否(占位符 + 代理注入)
基于二进制的出口控制否否否否是

总结与建议

在现代化开发中,保障本地开发环境的安全至关重要。结合诸如 n1n.ai 提供的稳定、高速大模型 API 聚合服务,以及类似 NVIDIA OpenShell 的运行时沙盒隔离方案,能够确保你的核心基础设施免受提示词注入和供应链攻击的威胁。

Get a free API key at n1n.ai