☰
nanoMuse的Sentinel安全哨兵:三级审批+沙箱,AI Agent删文件、转账、付款前必先问你
2026/10/16 3:04:28 网站建设 项目流程

【免费下载链接】nanoMuse

nanoMuse: an open-source personal agent for every device you own. One agent with a name and a look of its own that does things, keeps working while the app is closed, remembers you, and asks before anything you cannot undo. On Android, iPhone and iPad, Windows / macOS / Linux and in the browser; your phone's screen and your computer as its hands.

项目地址:https://gitcode.com/gh_mirrors/na/nanoMuse
点击查看免费下载

nanoMuse 是一个开源的私人 AI Agent(智能体),它能帮你发消息、操作手机和电脑屏幕、读邮件、管理目标——而这些"动手"的能力正是安全风险的来源。为此,nanoMuse 内置了Sentinel 安全哨兵:它像一道闸门坐在模型与所有工具之间,将每个操作按safe / moderate / sensitive三级风险分类,删文件、转账、付款这类不可撤销的动作必须先向你审批;在 Linux 上还会用 bubblewrap 沙箱把 shell 命令关进"笼子"。本文将带你完整看懂 nanoMuse 的三级审批机制与沙箱防护,搞明白它到底拦得住什么。

Sentinel 是什么?AI Agent 与工具之间的"安检门"

nanoMuse 的设计理念来自 Meta 的 Muse:智能体从不直接执行工具,而是把每次调用交给Sentinel.guard(),走一条固定链路:

agent ──► Sentinel.guard() ──► policy ──► 审批(如需)──► 保险库替换密钥 ──► 执行 agent ◄── 脱敏结果 ◄── 污点记账 ◄────────────────┘

也就是说,无论模型"想"做什么,最终落到硬盘、网络或手机屏幕上的每一步,都要先过哨兵的策略检查。核心代码就三处:

  • 关口:nanomuse/sentinel/gate.py
  • 决策:nanomuse/sentinel/policy.py
  • 审计日志:nanomuse/sentinel/audit.py

想深入阅读,官方文档在 docs/sentinel.md(中文版见 docs/zh/sentinel.md),行为测试在 tests/test_sentinel.py。

三级风险分级:safe、moderate、sensitive 分别管什么

每个工具都声明一个静态风险级别,哨兵据此决定放行还是询问:

级别含义典型工具
safe可逆、本地操作工作区内读写文件、web_search、记忆、目标、提醒
moderate触及外部或改变状态web_fetch、python_execute、读邮件、浏览器、手机操作
sensitive难以撤销或外部可见shell、send_email、保存/删除技能

更关键的是动态提级:哨兵会为具体这一次调用单独"加警"——

  • 🗑️ shell 命令出现rm -rf、sudo、curl | sh模式时自动附警告;
  • 🐍python_execute的代码一旦碰网络、读环境变量、删文件或触及工作区外的路径,立刻升为sensitive,原因直接写在审批卡片上;
  • 📱 操作手机点击时,如果点击描述(label)里含有确认支付、转账、提交订单、发送、删除等敏感词,一律按sensitive处理并询问——这就是标题里"转账、付款前必先问你"的实现。

审批卡片:一次、本次对话、24 小时……6 种授权粒度

当决定是"询问"时,App 或控制台会弹出审批卡片,上面写清楚:用的是什么工具、为什么要执行(你的原始请求)、精确参数、风险级别和原因。你可以拒绝,也可以带范围地允许:

你的回答效果
拒绝不执行,模型收到 "Sentinel blocked",并被叮嘱不要重试同一调用
一次(Once)仅本次,什么都不记
本次对话该聊天存续期间有效,删除聊天即失效
直到重启进程退出为止
24 小时带过期时间持久化在approvals.json
总是(Always)持久化,直到你手动撤销

授权是绑定到具体目标的,而不是一刀切的开关:允许shell:git不等于允许curl,允许给alice@example.com发信不等于能给别人发。带警告的危险命令(rm -rf、sudo、curl | sh)永远只能逐次审批,任何长期许可都覆盖不了它。

App 里无人应答的卡片默认 1 小时后超时并算作拒绝;而所有已授予的权限都列在头像下方的"权限"面板中,每项都有独立撤销按钮(授权逻辑见 nanomuse/sentinel/grants.py):

bubblewrap 沙箱:给 shell 命令上的一间"隔离房"

审批解决"做不做",沙箱解决"做了能碰到什么"。Meta Muse 给每个用户配一台云端 VM,nanoMuse 跑在你的机器上,于是在 Linux 上用 [bubblewrap](Flatpak 背后的同款工具,apt install bubblewrap即可)为每一次shell和python_execute调用创建独立命名空间:

  • ✍️只有工作区可写:/usr、/etc、/opt、/var全部只读,/tmp是本次调用私有的;
  • 🚪家目录不存在:保险库、数据目录、ssh 密钥、云凭据、浏览器配置统统看不见;
  • 🌐默认断网:只有被评估为需要网络的命令(含curl、pip、URL 或network=true)才获得外网,否则只带回环接口。因缺网失败的命令会收到说明,模型可带network=true重试——而那时它就要按外发调用再走一遍审批;
  • 🔐环境变量清洗:名字含*KEY*、*TOKEN*、*SECRET*等变量全部移除,模型写的脚本连 API key 都读不到。

沙箱在 config/config.example.toml 的[sandbox]段配置,mode = "auto"时检测到 bubblewrap 可用就自动启用;macOS、Windows 和大多数 Docker 容器跑不了沙箱时降级为"清洗环境 + 工作区为工作目录",并在 设置 → Safety 中如实告知。配置示例可对照 config/config.example.toml。

污点追踪:防"提示注入"偷走你的隐私

这是 Sentinel 对提示注入攻击的实际防线。一旦某段对话读取过私密数据(read_emails、联系人、工作区外的文件等),这段对话就被标记为"已污染"(tainted):

  • 此后该对话中任何把数据发往白名单外主机的调用,无论风险级别、无论模式(连auto也不例外),都先弹审批卡片,且卡片上写明目的地;
  • 污点按对话隔离:读过邮件的聊天不会"传染"旁边的聊天,清除对话即清除污点;
  • web_fetch每一跳重定向都会检查,私有地址、回环地址、Tailscale 网段(100.64.0.0/10)、云元数据地址一律直接拒绝。

效果是:一个恶意网页就算"指使"Agent 把你的收件箱发到某处,你也一定会先看到目的地再点头。白名单默认覆盖搜索、维基百科、GitHub 和 PyPI,可在 config/config.example.toml 的egress_allowlist中调整。

保险库 + 审计日志:密钥模型看不见,行为处处留痕

凭据保险库让密钥与模型彻底隔离(实现见 nanomuse/vault/vault.py):

nanomuse vault set EMAIL_PASSWORD # 加密存入 <data_dir>/vault.enc nanomuse vault list # 只列名字

配置里用{{vault:NAME}}占位符引用密钥——模型看到的永远只是占位符,真实值在审批通过后的执行前一刻才替换;若任何工具输出里意外出现密钥,模型读到前已被替换成[REDACTED:NAME]。

审计日志则保证"不知道发生了什么"不再可能:每条消息、每轮决策、每次审批和工具调用都带 UTC 时间戳追加到audit.jsonl:

nanomuse audit -n 50 # 表格查看最近 50 条

App 里点头像打开的活动面板读的是同一个文件。

三种安全模式怎么选:ask、strict、auto

sentinel 的mode决定"风险 × 模式"的最终裁定:

模式safemoderatesensitive适合场景
ask(默认)允许允许询问日常交互使用
strict允许询问询问高敏感环境
auto允许允许允许nanomuse daemon等无人值守运行

注意auto不是"全放行":它仍遵守deny_tools、拒绝规则、污点规则和警告检查——无人值守时遇到仍要审批的步骤,会被记为拒绝并留在动态 Feed 里,而不是偷偷执行。你还可以在[sentinel]段用[[sentinel.rules]]写细粒度规则,比如默认配置里就有一条"拒绝所有含rm -rf的 shell 命令"。

诚实的边界:Sentinel 防得住什么、防不住什么

nanoMuse 跑在你的机器上、以你的用户身份,哨兵是同进程中的一个模块,而非云端 VM 外层的独立防线。官方在 docs/sentinel.md 里给了一份不含糖衣的总结:

✅ 防得住

  • 模型做超出你要求的事:所有调用过策略,权限绑定工具与目标、可随时撤销;
  • 提示注入外泄:私密数据读后,白名单外主机先审批;
  • 模型看到你的密钥:保险库 + 占位符 + 脱敏 + 环境变量清洗;
  • "不知道发生了什么":审计日志全覆盖。

⚠️ 防不住(运行前须知)

  • 沙箱跑不起来时(macOS/Windows/多数容器),shell以你的身份运行,你批准的命令能做你能做的一切——重要数据建议放进容器或专用账号运行(官方 Docker 镜像即是);
  • 保险库密钥默认与数据同目录,能读数据目录的人可解密,重视可用NANOMUSE_VAULT_KEY指向外部密钥管理;
  • "总是允许shell:curl"这类宽泛授权,强度就和你授权的那一刻一样;
  • 别把服务端口直接暴露到公网;
  • 审批疲劳:卡片不看就批,以上全部失效。

安全细节与漏洞报告见 SECURITY.md。

写在最后

nanoMuse 的 Sentinel 把"AI Agent 安全"拆成了四件普通人能检查的事:分级审批(删文件、转账、付款前必须点头)、授权粒度(批到哪个工具、哪个目标,可一键撤销)、沙箱隔离(命令碰不到家目录、默认断网)、全程审计(audit.jsonl有迹可循)。对新手来说,记住一条就够:在 nanoMuse 里,Agent 的手再快,也快不过你屏幕上的那张审批卡片。

【免费下载链接】nanoMuse

nanoMuse: an open-source personal agent for every device you own. One agent with a name and a look of its own that does things, keeps working while the app is closed, remembers you, and asks before anything you cannot undo. On Android, iPhone and iPad, Windows / macOS / Linux and in the browser; your phone's screen and your computer as its hands.

项目地址:https://gitcode.com/gh_mirrors/na/nanoMuse
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询