news 2026/9/30 0:48:44

为什么敢让AI智能体执行系统命令?mercury-agent多层权限系统完整解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
为什么敢让AI智能体执行系统命令?mercury-agent多层权限系统完整解析

为什么敢让AI智能体执行系统命令?mercury-agent多层权限系统完整解析

【免费下载链接】mercury-agentSoul-driven AI agent with permission-hardened tools, token budgets, and multi-channel access. Runs 24/7 from CLI, Telegram or More.项目地址: https://gitcode.com/gh_mirrors/me/mercury-agent

你有没有想过:一个 7×24 小时运行的 AI 智能体,凭什么敢直接在你的服务器上执行系统命令?mercury-agent 给出的答案是一套多层权限系统——从命令黑名单、安全读白名单、命令段拆分防注入,到文件系统目录范围管控和符号链接逃逸防护,层层设卡,让 AI 智能体既能干活,又"作不了大恶"。本文带你从零看懂这套设计的每一层防护。

第一层:命令黑名单——永远不执行的"红线"

任何 AI 智能体跑命令,第一步都得先划红线。mercury-agent 内置了一份硬性黑名单(blocklist),命中即拒绝,无论处于什么模式、用户是否点了"总是允许":

  • sudo *、rm -rf /、rm -rf ~—— 提权与灾难级删除
  • mkfs *、dd if=*、format *—— 磁盘格式化与覆写
  • shutdown *、reboot *、halt *—— 关机重启
  • :(){ :|:& };:—— 经典的 Fork 炸弹
  • del /s /q C:\*、reg delete *等 Windows 侧危险命令
Blocked command: matches "sudo *"

这份清单定义在 blocklist.ts,并同步内置到权限清单默认值中(permissions.ts)。关键点在于:黑名单检查发生在一切放行逻辑之前,连"Allow All 全自动模式"也无法绕过。

第二层:安全读命令——白名单自动放行

如果每条命令都要用户确认,AI 智能体会被弹窗淹死。mercury-agent 为此维护了一份安全只读命令白名单:

ls、cat、head、tail、grep、rg、find、wc、git status、git diff、git log……

这些命令只读不写,在任何模式下都自动放行。而npm publish、git push、docker *、rm -rf *、curl * | sh这类有实际副作用的命令则始终需要用户确认。内置工具全景可以参考官方文档:内置工具清单。

第三层:命令段拆分——防注入的关键一招

这一层是最容易被忽略、也最见功力的设计。

假设echo *在自动放行名单里,那么echo hi; rm -rf ~会不会被当成"echo 命令"放行?mercury-agent 的答案是绝不。splitShellSegments函数会把整条命令按;、&&、||、|、&切分成独立段落,还会把$(...)、反引号、子 shell()、花括号块{}单独拆出来逐段检查(permissions.ts):

  • echo $(rm -rf ~)—— 命令替换被拆出,单独命中黑名单,拒绝 ✅
  • ls; reboot—— 拆成两段,reboot命中黑名单,拒绝 ✅
  • cat foo; rm -rf ~—— 全段必须都是安全读命令才放行,此处失败,转人工确认 ✅

甚至连双引号内部的$(...)都会被挖出来检查——因为 bash 在双引号里同样会执行命令替换。这是一种"宁可误杀、不可漏放"的保守策略。

第四层:文件系统范围管控 + 符号链接防护

命令之外,文件读写走的是目录范围(scope)机制:

访问类型规则
读在已批准范围内直接放行
写Ask Me 模式下每次都询问,即使范围已批准
范围外路径触发approve_scope工具请求,用户选 Allow(本次)/ Always(永久保存)/ Deny

其中有一个隐蔽攻击面:符号链接逃逸。一个路径在文字上位于工作目录内,但通过 symlink 实际指向了范围外的敏感文件。mercury-agent 会在写入前对路径做realpath规范化,若最终落点不在任何可写范围内,直接拒绝(permissions.ts)。相关测试用例覆盖在 permissions.test.ts。

第五层:Ask Me 与 Allow All 双模式

会话启动时,mercury-agent 会让你选择权限模式(CLI 用方向键菜单,Telegram 用内联按钮):

  • 🔒 Ask Me(默认):文件写入、shell 命令、范围变更都要确认,选项为 Yes / No /Always(选 Always 即切换为自动放行,且按命令精确记忆)
  • ✅ Allow All:本次会话全自动批准,重启后重置

值得注意的是远程安全隔离:本地 CLI 的"全部允许"永远不会悄悄抬高来自 Telegram/云端会话的远程请求(permissions.ts)——你在家点了 Allow All,不代表远程消息也能免确认执行命令。权限交互的完整行为见官方文档:Permissions。

动手试试:权限如何落地

所有权限规则持久化在~/.mercury/permissions.yaml,随时可编辑,mercury-agent 不会绕过手工修改。执行链路很直白:AI 调用run_command工具 → 权限管理器checkShellCommand逐层检查 → 通过才交给子进程执行,且带 120 秒默认超时保护(run-command.ts)。Telegram 里随时可用/permissions切换模式。

总结

mercury-agent 的多层权限系统回答了一个核心问题:信任不是靠"管住 AI",而是靠设计。黑名单兜底、白名单提效、段拆分防注入、scope 管文件、符号链接防逃逸、远程通道隔离——五层防线各司其职,才让"让 AI 直接跑系统命令"从一句豪言变成了可以 7×24 放心运行的工程现实。

【免费下载链接】mercury-agentSoul-driven AI agent with permission-hardened tools, token budgets, and multi-channel access. Runs 24/7 from CLI, Telegram or More.项目地址: https://gitcode.com/gh_mirrors/me/mercury-agent

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 0:45:02

DeeCamp2020冠军项目拆解:从场景选择到技术落地的AI实战方法论

1. 项目整体设计与思路拆解1.1 DeeCamp2020冠军项目背后的共性逻辑我认真看完这批DeeCamp2020的冠军项目之后,第一感受是:这些项目赢在“场景选得准”,而不是算法堆得高。AI积木、自动驾驶、AI听诊、AI科幻,乍一看是四个完全不相关…

作者头像 李华
网站建设 2026/9/30 0:44:53

位移传感器接入PLC的四大通信协议选型实战指南

1. 这不是选协议,是选整套控制逻辑的“神经通路”你手头有个位移传感器——可能是磁致伸缩的、LVDT的、光栅尺的,或者高精度电感式线性位移模块,输出的是微米级位置反馈。现在要把它接入PLC,实现闭环定位、同步运动或精密过程监控…

作者头像 李华
网站建设 2026/9/30 0:43:16

ODrive固件源码解析:从时钟树到8kHz定时器中断的时基设计

1. 为什么一个电机控制固件要先聊定时器很多人第一次翻 ODrive 的源码,注意力都会被 FOC 算法、电流环、编码器校准这些"看起来更高级"的东西吸走,结果在axis.cpp、motor.cpp里绕了半天,最后卡在一个最朴素的问题上:这些…

作者头像 李华
网站建设 2026/9/30 0:39:15

Java 8 Lambda与Stream实战:告别for循环,代码量减半

做Java开发快十年,我越来越发现一个现象:Java 8的Lambda和Stream,是被浪费得最严重的一批特性。很多项目运行在JDK 8上,代码里却还是十年前的for循环风格。更可惜的是,不少人不是不想用,是当初试过一次没看…

作者头像 李华