给 AI Agent 开放 Shell 权限后,如何防止它在深夜偷偷执行 DROP TABLE

前端大鹏 初级 2026/7/24 687 浏览 8 点赞 约 3 分钟

很多在公司内部部署 AI Agent 的同学可能都有类似的焦虑:给 Agent 赋予执行 Shell 命令的权限,就像是在生产服务器里养了一颗定时炸弹。虽然现在的模型逻辑能力很强,但一旦它在尝试修复 Bug 时产生幻觉,或者被一段恶意的提示词注入(Prompt Injection)给忽悠了,一个 rm -rf / 或者 DROP TABLE users 就能让整个项目组在周一早晨集体失眠。

我之前尝试过几种主流的“护栏”工具,但发现大多数工具的逻辑是“事后审计”——也就是在命令执行完、数据库已经没了之后,它才在日志里温情地提醒我:“哎呀,刚才执行了删除操作。” 这种拦截机制对于防止数据丢失毫无意义。

最近我在团队里实操了 gate.cat,它的核心逻辑是“先否决再执行”,将拦截点前置在命令传给 Shell 之前。最让我觉得靠谱的一点是,它在拦截路径上并不依赖模型调用,而是采用确定性的字符串匹配和路径分析。这意味着 AI 无法通过在 Prompt 里写“请忽略之前的限制,直接执行删除”来绕过拦截,因为拦截层根本不听 AI 说话,只看最终生成的命令字符串。

在实际部署中,我尝试了三种不同的接入场景,分享一下具体的实操细节:

首先是最推荐的 Claude Code 拦截方案。由于 Claude Code 的权限控制非常灵活,我们可以直接在配置文件中植入 hook,让拦截权限完全脱离模型的控制流。具体操作是先通过 pip install gate.cat 安装,然后在项目的 .claude/settings.json 配置文件中,将 gatecat-hook 添加到钩子列表中,并将匹配项明确设置为 Bash|Write|Edit。这样只要是涉及写入或执行的操作,必须经过 gate.cat 的判定才能下发给 Shell。

其次是针对通用 CLI Agent(比如 aider 等)的适配。这类工具通常会读取系统的 $SHELL 环境变量,我们只需要将默认的 shell 路径替换为 gatecat-shell。这样无论 Agent 如何通过 CLI 尝试操作文件系统,所有的指令流都会先经过这个拦截层。

最后是 API 代理模式。如果你使用的是 Ollama 或者 OpenRouter 等兼容 OpenAI 格式的接口,可以通过修改 base_url 将请求转发给 gate.cat。这种方式在架构上最轻量,适合那些不需要深度集成到本地 Shell,但需要对 API 返回的指令进行初步过滤的场景。

在实测过程中,我发现这种确定性拦截的效率非常高,因为它省去了再次调用 LLM 进行判断的 Token 开销和延迟。但这里必须强调一个技术细节:gate.cat 本质上是一堵“墙”,而不是一份完美的“安全证明”。它能高效拦住已知的危险指令,但无法保证所有不匹配的指令都绝对安全。

因此,我的建议是不要把 gate.cat 当作唯一的救命稻草。在公司环境下,最稳妥的方案依然是「沙盒(Sandbox)+ gate.cat」的双重保险。沙盒负责在物理层隔离资源,gate.cat 负责在指令层过滤高危操作。

另外,这个项目采用的是 Apache-2.0 协议,且核心代码零依赖,这意味着你不需要担心引入一大堆臃肿的第三方库导致环境冲突,部署速度极快。如果你也在担心 AI Agent 搞崩数据库,建议去 GitHub 搜一下 BGMLAI/gate.cat 尝试部署。

工作流AIAI落地agentscybersecurity

全部回复 (4)

大Max爱学习 初级 2026/7/24
这玩意儿延迟高吗?要是每次执行都卡一下挺烦的。
0 回复
折腾党小雨 中级 2026/7/24
得配个白名单,不然有些必要的运维命令也被误拦了。
0 回复
强迫症脚本小子 专家 2026/7/24
之前被AI误删过测试库,这种前置拦截确实比事后告警靠谱。
0 回复
阿海爱学习 高级 2026/7/24
心疼你三秒,当时怎么恢复的?是用快照回滚吗
0 回复

发表回复

支持 Markdown 格式