工具权限与沙箱边界

kp-018进阶20 分钟04-Agent化开发

一句话定义

Agent 的每个工具(读、写、执行、网络)都是独立的风险面,权限管理的原则是最小授权加分层放行——只读起步、写操作需确认、命令走白名单、敏感环境加沙箱隔离。

为什么重要

Agent 的事故几乎都经由工具发生:删除文件、执行危险命令、安装投毒依赖、把密钥发往外部服务。模型层面的可靠性无法覆盖工具层的风险——一个被诱导的 rm -rf 不需要模型「变坏」,只需要一次跑偏(kp-020)。权限设计不是不信任模型,而是让任何单次失误的爆炸半径可控。这是 Agent 化开发从个人玩具走向生产可用的分界线。

前置知识

kp-017(Agent 循环——权限约束的是循环中的行动步)。

核心概念

  • 四类风险面:文件系统(改/删)、命令执行(任意 shell)、网络(请求外发、下载安装)、凭据(环境变量、密钥文件)。
  • 授权模式:只读(分析类任务默认)/ 需确认(写与执行,逐次人工放行)/ 白名单自动(明确安全的命令自动执行)/ 沙箱(容器/VM/临时目录隔离)。
  • 白名单思维:与其拉黑危险命令(永远列不全),不如只放行明确需要的命令模式。
  • 环境隔离:生产凭据不进开发 Agent 环境;敏感仓库在容器中跑 Agent;网络默认关闭,需要时按域放行。

原理与机制

风险模型的两个参数是「触发概率」与「爆炸半径」。跑偏与提示注入(恶意内容混入 Agent 读到的文件或网页,诱导其执行指令)决定触发概率无法降为零,因此工程重心必须放在爆炸半径上:只读模式把文件类半径降为零;白名单把命令类半径限制在枚举内;沙箱把不可枚举的残余风险隔离在可重建的环境里。分层放行则匹配信任积累:新 Agent/新仓库从只读开始,随验证记录逐步升级——与人对新同事的授权路径同构。

实例或案例

操作步骤(权限配置清单,接入新 Agent 时逐项过):

  1. 文件:限定工作目录;生成代码目录只读;确认删除类操作必须逐次确认。
  2. 命令:建立白名单(构建/测试/lint/git status 等);rm、curl | sh、包安装命令默认需确认。
  3. 网络:默认禁网;需要装依赖时临时放行并事后回收;禁止 Agent 访问内网服务。
  4. 凭据:.env 不在工作目录内或加入拒绝读取清单;密钥走环境注入而非文件。
  5. 隔离:敏感仓库用容器/VM 跑 Agent;实验性任务用临时 worktree/分支。
  6. 审计:开启命令与文件写入日志,事后可回放。

排错清单:

  • Agent 要求安装可疑包 → 一律先人工核对包名与来源(见 kp-022)再放行。
  • Agent 读取了含密钥的配置 → 立即检查其上下文是否外发,轮换密钥(kp-024 应急流程)。
  • 白名单太松(git * 全放行)→ 收窄到子命令级,git push 类永远需确认。
  • 团队成员各自配权限 → 权限配置入仓共享评审,像规则文件一样维护。

公式或模型

本节不适用:安全配置无量化公式,以「事故复盘归因到权限缺失」为零目标。

图示

风险面    只读模式   需确认模式   白名单自动   沙箱隔离
文件系统   半径=0    逐次放行     增删白名单   临时目录/容器
命令执行   不可用    逐次放行     枚举子命令   容器内执行
网络      禁用      按域放行     —           禁网为默认
凭据      拒读      —           —           环境注入不落盘

直观类比

像给自动驾驶设地理围栏与限速:不讨论它「会不会」开错,而是设计让开错也无害的道路——围栏(沙箱)、限速(白名单)、副驾确认(需确认模式)。

常见误区

  • 「模型够强就不需要权限」:风险来自跑偏与注入,不是模型意图。
  • 拉黑清单式安全:危险命令与URL枚举不完,白名单才是可维护方向。
  • 沙箱只给实验用:敏感数据仓库的日常开发同样需要隔离。

与其他知识点的关系

kp-020 的止损动作依赖权限层(可暂停、可回滚);kp-024 的密钥卫生是凭据风险面的展开。

自测题

要点:文件/命令/网络/凭据;只读、需确认、白名单自动(外加沙箱隔离层)。

要点:危险模式不可枚举,白名单把半径限制在已审计的枚举内,新增项即评审点。

  1. 四类风险面与三种授权模式分别是什么?
  2. 为什么白名单优于黑名单?

延伸阅读

本节不适用:Agent 权限实践尚新,各家产品文档差异大,本节只沉淀跨产品原则。

#权限#沙箱#安全