跳到主要内容

工具授权与执行沙箱

工具授权决定 Agent 可以执行哪些动作,以及动作能影响哪些资源。执行沙箱则限制代码、命令和进程能访问的文件与网络。两者都由程序强制实施,减少模型误判或受到攻击后的损失。

本文先按风险区分工具操作,再说明审批和执行时怎样校验权限。随后介绍凭据传递,以及文件、网络和进程的隔离边界。

1. 面试核心​

先记住这几条,再读正文
  • 工具授权。 工具授权根据当前用户、动作、参数和目标资源,限制越权访问、误操作与数据外泄。卡 · 风险分级
  • 审批与执行校验。 审批绑定具体动作与参数,执行时再检查当前权限和目标版本。卡 · 确认与二次校验
  • 凭据隔离。 工具在程序侧注入凭据,敏感数据的引用在取回真实值时再次接受授权检查。卡 · 凭据与敏感数据
  • 沙箱范围。 执行沙箱通过文件、网络、进程和资源额度限制,约束代码实际运行时的影响范围。卡 · 执行沙箱
  • 白名单的边界。 命令白名单筛选调用入口,运行时沙箱继续约束解释器和子进程的实际访问。卡 · 命令、路径与网络边界

2. 风险分级​

决定一次工具调用是否放行时,需要同时看它做什么、处理什么数据,以及影响哪些对象。比如读文件属于只读操作,但读到凭据后仍会带来外泄风险。

级别例子策略示例
只读搜索、查询订单在用户数据范围内允许
可逆写入工作区编辑、创建草稿按会话授权,保留恢复手段
高风险或对外删除、支付、邮件、发布校验具体授权,必要时审批
禁止越权读取凭据、扩大权限执行层拒绝

同一个工具的风险也随参数变化。比如 run_command("ls") 用来列出目录,而 run_command("rm -rf /") 会尝试删除文件。程序需要按“工具 + 参数 + 目标范围”判断,编码 Agent 可以结合命令白名单与路径限制执行检查。

权限应跟随发起任务的用户。即使工具用服务账号连接数据库,查询结果仍要受当前用户的数据权限约束。否则,普通用户就能借助高权限账号读取其他人的数据。

工作区编辑可以按会话授权执行,并通过版本管理或快照恢复。外部发布会影响工作区之外的对象,应采用对应的授权策略。已经明确授权的具体动作可以继续执行,超出范围时再请求确认。

3. 确认与二次校验​

审批时看到的对象,在执行前还会变化。比如用户权限被收回,或待覆盖的文件已经被别人修改。因此,一次需要审批的动作应经过以下校验与执行流程:

  1. 模型提出动作和参数,由程序接收这份执行请求。
  2. 程序检查参数格式、当前身份和目标范围,拒绝超出授权的请求。
  3. 需要审批时,展示具体对象、参数和影响。比如“删除 3 个文件:a、b、c”,让用户批准、修改或拒绝。
  4. 程序保存动作摘要、目标版本、有效期和审批人,把审批与这次动作绑定。
  5. 执行前原子领取批准记录,确保并发执行器只有一个能领取成功,再检查权限与目标版本。
  6. 执行获准的动作,记录审批时间、实际参数和执行结果,供后续审计。

参数修改或目标版本过期后,要重新校验授权。版本检查还应与写入原子完成,确保检查通过到真正写入之间,目标没有再次变化。这类检查也称为执行期二次校验,即在实际操作时核对当前权限与状态。

任务重复恢复时,仍需通过幂等机制避免动作执行两次。

这里把审批与执行分成两个阶段,便于核对用户批准的内容;分布式事务的两阶段提交则协调多个参与方提交事务。频繁弹出确认会让用户忽略内容,形成审批疲劳。因此,应按风险与已有授权决定是否确认,并为可逆操作保留恢复手段。

4. 凭据与敏感数据​

调用工具需要凭据时,让工具实现负责读取和注入,模型只提供业务参数。比如数据库密码由程序从密钥管理服务取得,再用于建立连接。这样,提示内容被看到时,也不会直接暴露凭据。

工具使用的短期令牌按用户和任务签发,并设置访问范围与过期时间。错误信息、进程环境和日志也要检查,避免凭据通过这些输出重新进入模型上下文。

多个步骤需要传递敏感值时,可以让服务端保存真实数据,只返回一个短期引用。引用就是用于查找真实值的标识。比如第一个工具取得身份证号后,模型和界面只收到引用 ID 或脱敏值。下一个工具拿到引用后,由程序校验用户、用途和有效期,再取回真实值,这个过程称为解引用。

引用本身也要受访问控制。仅持有引用并不足以获得数据权限,否则攻击者拿到 ID 后就能读取原值。

工具结果只返回任务需要的字段,日志按规则对密钥、手机号和证件号脱敏。日志查询与产物下载接口同样检查身份。检索则在文档返回之前过滤权限,避免无权查看的内容先进入上下文。

5. 执行沙箱​

模型生成的代码会调用文件、网络和系统接口。沙箱在实际运行时限制这些访问,让错误代码的影响被控制在授权范围内。

维度约束
文件限定可读写路径,隐藏凭据与系统数据
网络控制出站目标和内部地址访问
进程最小权限运行,约束系统调用与子进程
资源CPU、内存、磁盘、时间和进程数上限
生命周期任务间隔离,按策略清理临时资源

例如,文件系统只暴露工作目录,网络默认关闭或仅允许白名单目标。网络规则还要阻止访问内网元数据地址,避免取得云环境凭据。进程以非 root 用户运行,并限制系统调用,也就是程序向操作系统请求服务的接口。每个任务使用独立的临时环境,结束后清理或销毁。

实现这些限制时,可以比较以下隔离方式:

  • 操作系统沙箱使用系统提供的访问约束。本地开发工具可结合 macOS Seatbelt,或 Linux 的 seccomp、namespaces 与 Landlock。它们分别参与系统调用过滤、资源视图隔离或文件访问限制,再配合操作确认。
  • 普通容器隔离进程和资源视图,但仍共享宿主机内核。挂载目录与容器权限会直接影响隔离效果。
  • gVisor通过用户态内核处理许多系统调用,减少应用直接接触宿主内核接口的机会。
  • 微虚拟机通过虚拟化提供独立边界,Firecracker 是其中一种实现。多租户运行不可信代码时,可以评估这一类方案。

选择时要根据威胁模型,也就是需要防御哪些攻击,比较隔离范围与开销。启动时间、资源成本、挂载方式和网络规则都需要实测,隔离效果取决于完整配置。

配置完成后,用受控操作验证三类限制是否生效:

  • 尝试读取工作区外的禁止路径,检查文件访问是否被拒绝。
  • 访问被禁止的域名和内部地址,检查网络规则是否生效。
  • 在受控范围内触发资源上限,检查进程是否被限制或终止。

工具是否自动执行,还要结合来源和审核结果判断。自研且经过评审的工具,可在已有授权与沙箱范围内自动运行。第三方工具需要审核来源、代码和依赖,固定版本,并按实际需求收紧文件与网络权限。工具定义变化后应重新审核,防止新增能力越过原来的授权范围。

5.1 命令、路径与网络边界​

入口参数符合白名单后,还要检查程序实际访问了什么。shell、Python 和构建工具都能执行脚本或启动子进程,单看命令前缀无法覆盖后续行为。

路径也需要按实际文件目标校验。规范化会消除 .. 等路径片段,符号链接则会把路径指向另一处文件。即使检查时目标合法,执行前路径仍会变化。因此,敏感操作要使用受约束的文件访问机制,在访问时落实目录限制。

网络控制则要覆盖 DNS 解析结果、重定向后的地址和最终目标。一个允许访问的域名,也会把请求转向内网地址。数据经允许的代理或工具传出时,还要检查用途与内容。沙箱负责资源访问范围,业务授权则负责判断当前用户是否能执行这次动作。

6 · 面试题卡片​

本页题目与参考回答

6.1 Agent 对工具调用不作限制,会有哪些风险?工具调用的安全控制怎么实现?​

考察重点

  • 能说明工具能力怎样导致越权、误操作、外泄和资源滥用。
  • 能把分级授权落实到程序检查,并保持当前用户的数据权限。

相关内容:风险分级、确认与二次校验。

参考回答

无限制的工具调用会导致越权读取、误删误写、数据外泄和资源滥用。

比如高权限服务账号会让普通用户读取无权查看的数据,循环调用则持续消耗配额与费用。程序需要按当前用户检查工具、参数和目标范围,并设置调用次数与费用上限。

只读操作仍按数据权限过滤,可逆编辑保留恢复手段。删除、支付和外发等高风险动作按授权策略审批,执行时再次校验。代码和命令放在沙箱中运行,全部调用记录实际参数与结果,便于复核已经发生的副作用。

6.2 工具副作用分级授权和执行期二次校验如何落地?删除、覆盖等危险操作要人工审批吗?​

考察重点

  • 能解释生成计划、审批与执行各自检查什么。
  • 能处理审批之后的权限或目标变化,并解释如何减少审批疲劳。

相关内容:确认与二次校验。

参考回答

分级授权根据风险与已有授权决定是否审批,执行期二次校验则核对当前权限和目标状态。

模型先提出动作,程序预校验参数、身份和范围。需要审批时,向用户展示具体对象与影响,把批准记录绑定到动作摘要、参数、目标版本和有效期。

确认到执行之间,用户权限会被撤回,目标也会被修改。因此,执行前要原子领取批准记录并重新校验,写入时用版本条件防止覆盖已变化的对象。参数改变时重新核对授权。

删除、覆盖、付款和外发按具体风险与授权范围决定审批。可逆的工作区编辑可以按会话授权执行,并用版本管理或快照恢复。这样可以减少审批疲劳,让用户把注意力留给高风险动作。

6.3 如何控制 Agent 执行中不暴露密钥?敏感数据如何在步骤之间传递而不暴露?​

考察重点

  • 能说明程序侧如何注入凭据,以及错误输出如何带来泄漏。
  • 能解释引用的授权边界,并把脱敏与访问控制分别落实。

相关内容:凭据与敏感数据。

参考回答

凭据由工具在程序侧读取和注入,步骤之间的敏感值则用受授权约束的短期引用传递。

模型只提供业务参数,工具从密钥管理服务取得凭据。令牌按用户和任务签发,限定范围与有效期。工具错误、环境输出和日志也要检查,防止它们把凭据带回上下文。

敏感结果保存在服务端,模型和界面收到引用 ID 或脱敏值。下一个工具解引用时,再检查用户、用途和有效期,确认后取回真实数据。

日志中的密钥、手机号和证件号按规则脱敏,日志访问也需要授权。内部文档在检索返回前按当前用户权限过滤,输出时只保留任务需要的字段。

6.4 什么是 Agent 沙箱?如何判断工具是否可信,并允许它在沙箱中直接执行?​

考察重点

  • 能说明文件、网络、进程和资源限制分别控制什么。
  • 能比较隔离方式的边界与成本,并通过工具审核和越界测试验证限制。

相关内容:执行沙箱。

参考回答

Agent 沙箱是运行代码和命令的受限环境,工具经审核后仍需在授权范围内运行。

沙箱分别限制文件、网络、进程和资源用量。比如只暴露工作目录,网络使用白名单并屏蔽内网元数据地址,进程以非 root 用户运行。独立任务环境在结束后清理,减少跨任务影响。

普通容器共享宿主内核,gVisor 用用户态内核减少直接接触宿主接口,微虚拟机提供虚拟化边界。选择时根据需要防御的攻击,实测隔离效果、启动时间和运维成本。

自研工具经过评审后可按已有授权自动执行。第三方工具需要核对来源、代码和依赖,固定版本,定义变化时重新审核。最后通过禁止路径、网络访问和资源上限测试,验证限制确实生效。

6.5 命令和路径都在白名单中,为什么仍需运行时沙箱?​

考察重点:能解释解释器、符号链接和重定向怎样改变实际访问目标。

相关内容:命令、路径与网络边界。

参考回答

白名单只筛选调用入口,运行时沙箱还要限制程序最终访问的资源。

解释器和构建脚本能继续启动子进程,所以命令前缀无法描述全部行为。符号链接与检查后的路径变化,也会让实际目标偏离检查时的对象。网络还会经过 DNS 解析和重定向,最终地址同样需要约束。

因此,运行时限制要覆盖文件、网络及子进程,并用越界测试验证。业务授权另行检查当前用户能否执行这次动作。

7. 参考资料​