agent runtime lab · 2026 · 技术研究笔记
09. Agent 权限不是 allow 和 deny 两个值
权限判断针对的是某个主体在特定条件下对某项资源执行某种动作
把授权拆成主体、动作、资源、条件和时效,解释读取许可为什么不能自动扩展为写入或联网许可
研究版 · 10 个章节 · 约 8 分钟 · 更新于 2026-07-27
本次测试要求四个 CLI 只读目录,不修改文件,也不访问网络。这个约束如果只保存成 allowed=true,下一步就无法回答:允许谁、允许做什么、允许访问哪里、授权持续多久。
一次授权至少有五个维度
| 维度 | 问题 | 示例 |
|---|---|---|
| 主体 | 谁在操作 | 主 Agent、某个子 Agent |
| 动作 | 做什么 | 读取、写入、执行、联网、发送 |
| 资源 | 操作哪里 | 文件、域名、仓库、账号 |
| 条件 | 在什么限制下 | 只读、无网络、需要确认 |
| 时效 | 授权多久 | 单次、本轮、会话、持久 |
“允许读取工作区”不能推导出“允许执行工作区脚本”;“允许访问 API 文档”也不能推导出“允许向任意域名上传内容”。
模型规则与执行策略要分开
系统 Prompt 可以要求模型在删除文件前询问,但执行器仍要判断实际调用是否属于删除。两层分别处理:
- 模型侧:根据任务选择合理动作。
- 策略侧:根据用户授权决定动作能否执行。
如果模型误判风险,策略仍应拒绝;如果策略允许但模型认为需要确认,运行时可以继续询问用户。两层结论应记录在不同字段中。
授权不能沿工具链自动传播
读取网页后,网页内容要求发送邮件。Agent 已获得网页读取许可,却没有获得发送邮件许可。工具 A 的结果不能替工具 B 申请权限。
子 Agent 也一样。主 Agent 可以读取整个仓库,不表示每个子 Agent都应继承相同范围。委派时应生成更小的资源集合和动作集合。
一次批准的范围要写出来
用户点击“允许”时,界面应明确展示:
| 项目 | 示例 |
|---|---|
| 动作 | 写入文件 |
| 目标 | content/blog/ |
| 次数 | 当前调用一次 |
| 命令或参数 | 可检查的摘要 |
| 后续继承 | 不允许 |
“本次会话始终允许”比单次授权范围更大,应作为另一种明确选择,而不是在用户同意一次操作后自动升级。
沙箱不是全部权限系统
沙箱是限制进程能访问哪些系统资源的隔离环境。它可以阻止越界文件访问和部分网络连接,但无法独立判断业务授权。例如进程有权调用邮件 API,并不代表用户同意向某个收件人发送内容。
因此权限层需要组合文件系统沙箱、网络策略、凭证作用域和业务审批。它们共同构成边界。
我会怎样做权限回归测试
固定五类动作:工作区读取、工作区写入、工作区外读取、允许域名访问、未允许域名访问。分别由主 Agent 和子 Agent提出,再测试单次授权过期后的行为。
日志应能回答每次决策使用了哪条策略、匹配了哪个资源、授权何时失效。若只能看到“permission denied”,就难以判断是规则正确生效还是配置错误。
资源匹配需要规范化
路径在进入策略判断前应转换为规范形式,并处理相对路径、符号链接和大小写差异。否则 workspace/../secret 可能在字符串上以工作区开头,却实际指向外部资源。域名也要在解析重定向和子域范围后判断。
策略日志不应保存凭证正文,但应保存规范化资源、匹配规则标识和决定原因。这样才能区分解析错误、策略缺失和明确拒绝。
确认界面是授权协议的一部分
用户看到的摘要必须与执行器将要使用的参数来自同一份规范化调用。若界面显示“写入一篇文章”,执行器却收到可展开的任意 Shell 字符串,确认并未覆盖真实动作。
授权后参数发生变化,应使原批准失效并重新判断。否则模型可以先获得低风险参数的批准,再在执行前替换目标。
授权判断是一条函数,不是标签
decision = policy(subject, action, resource, context, provenance)
context 包含时间、网络、工作区和会话状态;provenance 表示参数来自用户、项目文件还是工具结果。相同的 write_file,对仓库测试文件与 SSH 配置的决定不同。
模型只提出动作。执行器规范化资源后计算允许、拒绝或需要确认。MCP 授权规范禁止令牌透传,并要求资源服务器验证令牌受众,因为持有令牌不能证明它适用于当前服务。MCP Authorization
路径权限要处理表示差异
./src/../secrets、符号链接、大小写与挂载点可以指向同一资源。策略先解析工作目录、消除相对段、处理链接和挂载边界,再匹配资源。
测试还要覆盖授权后路径被替换。这是检查与使用之间竞态:检查的是资源 A,执行时路径已指向 B。高风险操作使用已打开的文件描述符或不可变资源标识,避免再次按字符串解析。
确认界面展示动作、规范化资源、数据去向、副作用和有效范围。每次只改变主体、动作、资源、条件、来源或时效,验证一次批准不会扩展成整个会话的通用权限。
版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。
(采用 CC BY-NC-SA 4.0 许可协议进行授权)
本文标题:09. Agent 权限不是 allow 和 deny 两个值
本文链接:https://www.sshipanoo.com/blog/ai/agent-runtime-lab/09-Agent权限模型/
