Permission — 执行前做权限判断

"工具执行前先做权限判断" — 权限管线决定哪些操作需要审批。

Github 原文:shareAI-lab/learn-claude-code

上一篇文章中,我们制作的 Agent 有 5 个工具。其中有一个工具——file tools 受 safe_path 保护,但 bash 不受限制。让它”清理一下项目”,可能执行 rm -rf /

安全不能靠信任模型,要靠代码——在工具执行之前做判断。

解决方案

Permission — 执行前做权限判断

我们上篇文章设计的循环完全保留。

唯一的变动在工具执行前插入 check_permission()——每个工具调用经过三道闸门,顺序固定:硬拒绝优先,软询问次之,都没命中就放行。

啥意思?简单来说就是:

闸门作用命中后
1. 拒绝列表永远禁止的操作(rm -rf /sudo直接拒绝,不执行
2. 规则匹配取决于上下文的操作(写工作区外、rm 文件)交给闸门 3
3. 用户审批闸门 2 命中后,暂停等用户确认用户决定允许或拒绝

当然还有一种情况,那就是三道都没命中,那就直接执行,大部分日常操作走这条路。

看到这里,你是不是一下就懂了你在使用 codex 和 cc 的时候,会询问你同意这个东西到底是怎么来的了?

工作原理

我们这里来详细讲讲这三个“闸门”。

Permission — 执行前做权限判断

闸门一:绝对不允许做的事

你也不希望 Agent 操作 bash 给你数据库全删了吧?

那么这个就需要闸门一,它有一张硬拒绝表,先查,命中就返回阻止信息。(简单字符串匹配不是可靠安全机制,命令变体和 shell 展开可能绕过,所以在实际的实战落地中,会有更加复杂的方式)

闸门二:不必事事过问的贴心管家

闸门二就像个贴心的管家,它走规则匹配——描述”什么时候需要问用户”,毕竟每条都来问你,打断效率,得一直看着,也挺烦的不是吗?因此闸门二就存在了,它让每条规则指定工具和检查条件。

不是闸门一不允许的一条调用请求,如果闸门二觉得没事的,安全的很,那么就直接放行,如果闸门二觉得,不行有点危险,我得问问用户,那他就把这个提交到了闸门三。

闸门三:用户输入触点

闸门三就是那个你在 CC、Codex 等一众工具中老是能看到的那个询问你是否允许的东西,等待你是否同意执行这个命令,但有一说一,这部分目前各家在人性化方面做的都不好,多数人问了也没用,完全看不懂,只会点同意。。。

漫画详解

这里方便理解,我依然用 AI 做了个小漫画,来解释这个部分。

Permission — 执行前做权限判断