行系統(tǒng)命令?mercury-agent多層權(quán)限系統(tǒng)完整解析)
為什么敢讓AI智能體執(zhí)行系統(tǒng)命令mercury-agent多層權(quán)限系統(tǒng)完整解析【免費(fèi)下載鏈接】mercury-agentSoul-driven AI agent with permission-hardened tools, token budgets, and multi-channel access. Runs 24/7 from CLI, Telegram or More.項(xiàng)目地址: https://gitcode.com/gh_mirrors/me/mercury-agent你有沒有想過一個(gè) 7×24 小時(shí)運(yùn)行的 AI 智能體憑什么敢直接在你的服務(wù)器上執(zhí)行系統(tǒng)命令mercury-agent 給出的答案是一套多層權(quán)限系統(tǒng)——從命令黑名單、安全讀白名單、命令段拆分防注入到文件系統(tǒng)目錄范圍管控和符號(hào)鏈接逃逸防護(hù)層層設(shè)卡讓 AI 智能體既能干活又作不了大惡。本文帶你從零看懂這套設(shè)計(jì)的每一層防護(hù)。第一層命令黑名單——永遠(yuǎn)不執(zhí)行的紅線任何 AI 智能體跑命令第一步都得先劃紅線。mercury-agent 內(nèi)置了一份硬性黑名單blocklist命中即拒絕無論處于什么模式、用戶是否點(diǎn)了總是允許sudo *、rm -rf /、rm -rf ~—— 提權(quán)與災(zāi)難級(jí)刪除mkfs *、dd if*、format *—— 磁盤格式化與覆寫shutdown *、reboot *、halt *—— 關(guān)機(jī)重啟:(){ :|: };:—— 經(jīng)典的 Fork 炸彈del /s /q C:\*、reg delete *等 Windows 側(cè)危險(xiǎn)命令Blocked command: matches sudo *這份清單定義在 blocklist.ts并同步內(nèi)置到權(quán)限清單默認(rèn)值中permissions.ts。關(guān)鍵點(diǎn)在于黑名單檢查發(fā)生在一切放行邏輯之前連Allow All 全自動(dòng)模式也無法繞過。第二層安全讀命令——白名單自動(dòng)放行如果每條命令都要用戶確認(rèn)AI 智能體會(huì)被彈窗淹死。mercury-agent 為此維護(hù)了一份安全只讀命令白名單ls、cat、head、tail、grep、rg、find、wc、git status、git diff、git log……這些命令只讀不寫在任何模式下都自動(dòng)放行。而npm publish、git push、docker *、rm -rf *、curl * | sh這類有實(shí)際副作用的命令則始終需要用戶確認(rèn)。內(nèi)置工具全景可以參考官方文檔內(nèi)置工具清單。第三層命令段拆分——防注入的關(guān)鍵一招這一層是最容易被忽略、也最見功力的設(shè)計(jì)。假設(shè)echo *在自動(dòng)放行名單里那么echo hi; rm -rf ~會(huì)不會(huì)被當(dāng)成echo 命令放行mercury-agent 的答案是絕不。splitShellSegments函數(shù)會(huì)把整條命令按;、、||、|、切分成獨(dú)立段落還會(huì)把$(...)、反引號(hào)、子 shell()、花括號(hào)塊{}單獨(dú)拆出來逐段檢查permissions.tsecho $(rm -rf ~)—— 命令替換被拆出單獨(dú)命中黑名單拒絕 ?ls; reboot—— 拆成兩段reboot命中黑名單拒絕 ?cat foo; rm -rf ~—— 全段必須都是安全讀命令才放行此處失敗轉(zhuǎn)人工確認(rèn) ?甚至連雙引號(hào)內(nèi)部的$(...)都會(huì)被挖出來檢查——因?yàn)?bash 在雙引號(hào)里同樣會(huì)執(zhí)行命令替換。這是一種寧可誤殺、不可漏放的保守策略。第四層文件系統(tǒng)范圍管控 符號(hào)鏈接防護(hù)命令之外文件讀寫走的是目錄范圍scope機(jī)制訪問類型規(guī)則讀在已批準(zhǔn)范圍內(nèi)直接放行寫Ask Me 模式下每次都詢問即使范圍已批準(zhǔn)范圍外路徑觸發(fā)approve_scope工具請(qǐng)求用戶選 Allow本次/ Always永久保存/ Deny其中有一個(gè)隱蔽攻擊面符號(hào)鏈接逃逸。一個(gè)路徑在文字上位于工作目錄內(nèi)但通過 symlink 實(shí)際指向了范圍外的敏感文件。mercury-agent 會(huì)在寫入前對(duì)路徑做realpath規(guī)范化若最終落點(diǎn)不在任何可寫范圍內(nèi)直接拒絕permissions.ts。相關(guān)測(cè)試用例覆蓋在 permissions.test.ts。第五層Ask Me 與 Allow All 雙模式會(huì)話啟動(dòng)時(shí)mercury-agent 會(huì)讓你選擇權(quán)限模式CLI 用方向鍵菜單Telegram 用內(nèi)聯(lián)按鈕 Ask Me默認(rèn)文件寫入、shell 命令、范圍變更都要確認(rèn)選項(xiàng)為 Yes / No /Always選 Always 即切換為自動(dòng)放行且按命令精確記憶? Allow All本次會(huì)話全自動(dòng)批準(zhǔn)重啟后重置值得注意的是遠(yuǎn)程安全隔離本地 CLI 的全部允許永遠(yuǎn)不會(huì)悄悄抬高來自 Telegram/云端會(huì)話的遠(yuǎn)程請(qǐng)求permissions.ts——你在家點(diǎn)了 Allow All不代表遠(yuǎn)程消息也能免確認(rèn)執(zhí)行命令。權(quán)限交互的完整行為見官方文檔Permissions。動(dòng)手試試權(quán)限如何落地所有權(quán)限規(guī)則持久化在~/.mercury/permissions.yaml隨時(shí)可編輯mercury-agent 不會(huì)繞過手工修改。執(zhí)行鏈路很直白AI 調(diào)用run_command工具 → 權(quán)限管理器checkShellCommand逐層檢查 → 通過才交給子進(jìn)程執(zhí)行且?guī)?120 秒默認(rèn)超時(shí)保護(hù)run-command.ts。Telegram 里隨時(shí)可用/permissions切換模式。總結(jié)mercury-agent 的多層權(quán)限系統(tǒng)回答了一個(gè)核心問題信任不是靠管住 AI而是靠設(shè)計(jì)。黑名單兜底、白名單提效、段拆分防注入、scope 管文件、符號(hào)鏈接防逃逸、遠(yuǎn)程通道隔離——五層防線各司其職才讓讓 AI 直接跑系統(tǒng)命令從一句豪言變成了可以 7×24 放心運(yùn)行的工程現(xiàn)實(shí)?!久赓M(fèi)下載鏈接】mercury-agentSoul-driven AI agent with permission-hardened tools, token budgets, and multi-channel access. Runs 24/7 from CLI, Telegram or More.項(xiàng)目地址: https://gitcode.com/gh_mirrors/me/mercury-agent創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考