介绍 nono:用于 AI 代理的安全沙箱

发布: (2026年2月3日 GMT+8 07:52)
5 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的完整文本(除代码块、URL 和源链接之外),我将把它翻译成简体中文并保持原有的格式、Markdown 语法和技术术语不变。谢谢!

介绍

Claude Code、OpenCode 等 AI 编码代理功能强大——它们可以编写代码、重构整个代码库,并自动化繁琐的任务。然而,它们在你的权限下运行,这意味着它们可以读取 SSH 密钥、访问 AWS 凭证,甚至可能将数据外泄。当前的解决方案往往依赖代理自行监管,但错误和漏洞屡见不鲜。

nono 是一种基于能力的安全外壳,利用内核级原语对 AI 代理和其他不受信任的进程进行沙箱隔离。它在 Linux 上使用 Landlock,在 macOS 上使用 Seatbelt,创建一个环境:一旦施加限制,就没有任何 API 能够逃脱这些限制——即使是 nono 本身也不例外。

名字已经说明了一切:“不”允许未经授权的文件系统访问,“不”允许机密数据外泄,“不”允许破坏性命令。

为什么选择 nono 而不是容器?

关注点容器nono
开销需要镜像、层以及运行时无需镜像或运行时;直接施加限制
复杂性管理卷、网络和权限简单的 CLI 标志
对单个命令来说过度否,设计上轻量

nono 在不增加容器、虚拟机或额外基础设施负担的情况下提供安全性。

安装

macOS(Homebrew)

brew tap lukehinds/nono
brew install nono

从源码构建(Linux/macOS)

git clone https://github.com/lukehinds/nono.git
cd nono
cargo build --release

基本用法

# Give Claude Code read/write access only to the current directory
nono run --allow . -- claude

# Separate read and write permissions
nono run --allow ./project-dir --write ./output claude

# Block network access entirely
nono run --allow . --net-block -- my-agent

# Preview what would happen (dry run)
nono run --allow . --dry-run -- my-command

一旦 nono 应用沙箱,内核会拒绝未授权的操作。这是一种结构性强制,而不是可以被绕过的策略过滤器。

Protection Layers

保护措施是否可被覆盖?
命令黑名单阻止危险的二进制文件(rmddchmodsudo是,使用 --allow-command
内核(删除)阻止 unlink/rmdir 系统调用
内核(截断)防止将文件清零
文件系统沙箱限制路径访问仅通过显式 --allow
网络沙箱阻止网络访问仅通过移除 --net-block

默认会阻止敏感路径,如 SSH 密钥、AWS 凭证和 shell 配置文件。子进程会继承所有限制,防止通过子进程技巧提升特权。

Visual Overview

Terminal
$ nono run --allow ./project -- claude

├─ nono (applies sandbox, then exec)
│   └─ Claude Code (sandboxed)
│       ✓ Can read/write ./project
│       ✗ Cannot access ~/.ssh, ~/.aws
│       ✗ Cannot delete files

平台支持

平台机制内核要求状态
LinuxLandlock LSM5.13+✅ 文件系统
LinuxLandlock LSM6.7+✅ 文件系统 + 网络
macOSSeatbelt10.5+✅ 文件系统 + 网络
Windows🚧 尚未支持

调试:nono why

$ nono why ~/.ssh/id_rsa
Path: /Users/you/.ssh/id_rsa
Status: BLOCKED
Reason: Sensitive path SSH private keys are protected by default

该命令解释了路径被阻止的原因,使沙箱行为易于理解和调试。

示例工作流

  • 安全运行 AI 编码代理

    nono run --allow ./my-project -- claude
  • 在受限写入权限下构建代码

    nono run --read ./src --write ./target -- cargo build
  • 在无网络访问的情况下运行测试

    nono run --allow . --net-block -- npm test
  • 在不担心删除的情况下处理文件

    nono run --read ./input --write ./output -- python process.py

许可证与资源

  • 许可证: Apache 2.0
  • 源代码:
  • 文档:

结论

随着 AI 代理变得更加强大和自主,“信任代理会行为得当”的安全模型变得越来越站不住脚。nono 提供了一种不同的方法:在内核层面使不良行为不可能。试一试,安全地进行实验,并分享你的反馈。

由 Luke Hinds 创建 – 如果觉得有用,请给仓库加星!

Back to Blog

相关文章

阅读更多 »