想给 AI 代理更大权限,但又怕它把项目删了?nono 用内核沙箱解决这个矛盾

如果你想持续获取更多相关资讯,欢迎关注 x-cmd 博客

用 Claude Code 跑了一阵子,你发现它的能力取决于你给多少权限。限制太死,它基本帮不上忙;放开权限让它折腾,又怕它手滑删错了东西。每次看到 agent 执行 rm -rf 或者往错误目录写入,心里就悬着。

请添加图片描述

nono 是一个 AI 代理安全工具,提供内核级沙箱隔离、凭证保护、网络过滤、快照回滚和操作审计。它由 Sigstore(PyPI、npm、brew、Maven Central 的软件签名标准)的核心作者主导开发。

快速上手

用 x-cmd 安装 nono 非常简单,只需在终端中运行以下命令即可:

x install nono

基本用法——以 claude-code 为例:

nono run --profile claude-code -- claude

这条命令在沙箱中启动 claude-code,文件系统只读当前目录,网络仅允许调用模型 API,危险命令被拦截。

x-cmd 沙箱工具

如果只是需要对任意命令做简单的权限隔离,x-cmd 内置的 x sb 可直接使用:x sb airrun 阻止网络访问,x sb editrun --wd ./tmp 允许写指定目录。详情见 x-cmd.com/mod/sb

核心特点

内核级沙箱,权限由内核强制执行

nono 在 macOS 上使用 Seatbelt,在 Linux 上使用 Landlock(内核 5.13+)。沙箱一旦应用,内核即对当前进程及其所有子进程执行权限约束——权限范围取决于启动时的显式声明,攻击者无法从沙箱内部通过提示词或 syscall 改写这些约束。

注意:沙箱的安全性依赖于正确配置和最小权限原则。命令拦截(rm 等危险命令)是防御的补充层,真正的安全边界是文件系统能力模型。

# 只允许读取 ./src,写入 ./output,其余全部拒绝
nono run --read ./src --write ./output -- cargo build

凭证保护:API key 不进 agent 进程

nono 支持两种模式:

  • Proxy injection:agent 连接 localhost 代理,代理将真实 API key 注入到上游请求——key 永远不会出现在 agent 进程的内存中
  • Env injection:从 1Password、Apple Passwords 或系统 keystore 读取凭证,注入为环境变量
# Proxy 模式:API key 完全隔离在 agent 之外
nono run --proxy-credential openai -- my-agent

快照与原子回滚

nono 在执行前自动对工作目录做 content-addressable 快照(SHA-256 + Merkle tree),执行后可交互式审查并恢复任意版本。大项目(.git、node_modules、target 等)自动排除,避免卡顿。

nono run --rollback --allow . -- npm test
nono rollback list   # 查看快照
nono rollback restore  # 恢复

网络过滤

本地代理拦截所有出站请求,硬编码拒绝云元数据端点(169.254.169.254 等)。Host 白名单机制让 agent 只能访问明确允许的域名。

nono run --allow-proxy api.openai.com --allow-proxy api.anthropic.com -- my-agent

指令文件供应链签名

AGENTS.md、SKILLS.md 等指令文件是攻击向量。nono 用 Sigstore(DSSE envelopes + in-toto/SLSA statement)对其进行签名验证,支持 keyed signing 和 GitHub Actions OIDC keyless signing。执行时验证签名者身份、证书链和签署时间窗口。

内置主流 Agent Profiles

开箱即用:claude-code、codex、opencode、openclaw、swival。每个内置 profile 遵循最小权限原则,并公开配置供用户审计和自定义。此外支持自定义 profiles,通过 JSON 文件组合安全策略。

工作原理

nono 的安全模型是能力模型(capability model),而非传统的策略模型(policy model)。

传统安全逻辑是黑名单——“禁止 X”;nono 是白名单——“只允许 X”。在沙箱启动前,调用者显式声明所需能力(可以读哪些路径、可以写哪些路径、可以访问哪些网络地址),然后通过 Sandbox::apply() 将这些约束永久写入内核。之后运行的所有代码及其子进程都受到相同约束。

Supervisor 模式(Linux)进一步支持运行时能力扩展:agent 触发权限外的 syscall 时,seccomp user notification 暂停进程并向用户申请授权,授权通过后直接注入文件描述符——agent 从不自行执行 open()。

适用场景

  • 在客户代码库或敏感项目中安全运行 AI 代理
  • 团队共享 agent 配置时验证指令文件来源可信
  • 防止 prompt injection 通过恶意文档泄露 API key
  • 需要审计和回溯 AI 所做所有操作的企业环境

来源:

https://cn.x-cmd.com/install/nono

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐