互动实验室实验 5 / 8
本章目录

实验 05 · 权限与沙箱判定台

对应第 15–17 章。本实验把工具规则、审批策略和操作系统沙箱分成三层,观察同一动作为什么可能自动允许、请求批准或直接拒绝。

1. 实验问题

审批回答“人类是否同意扩大权限”,沙箱回答“进程技术上能触达什么”。两者经常被混为一个开关。请选择“修改文件、workspace 外部、never、workspace-write”,先预测结果。

never 不是自动允许,而是 Agent 不能通过弹窗获得新权限;超出当前边界的动作应直接拒绝或寻找替代方案。

2. 组合判定

实验是简化策略模拟,不代表具体产品的全部规则。它展示的核心顺序是:识别动作风险,应用审批策略,再检查实际执行边界。真实系统还会合并项目规则、企业配置、网络域名和工具副作用标注。

3. 典型组合

尝试以下组合:

  1. workspace 内读取 + read-only:应允许;
  2. workspace 内修改 + read-only:需要扩大或拒绝;
  3. 修改 .git:即使 workspace 可写也应特殊保护;
  4. 删除主目录 + never:应拒绝;
  5. 普通命令 + always:技术上可执行,但策略要求询问。

注意 ASK 不等于动作已经发生。Runtime 必须暂停 Turn,获得具体批准,再重新进行执行检查。

4. 最小权限设计

当动作被拒绝时,列出更窄替代方案:把目标文件复制到 workspace;只允许一个域名;让可信 setup 安装依赖;使用只读 API;请求一次特定命令而不是 full access。

权限升级应与任务需要绑定并可撤销。调试失败不构成永久扩大权限的理由。

5. 威胁推演

假设 Agent 读取网页,网页包含恶意指令要求上传 ~/.ssh。即使模型误信,工具规则应识别主目录,审批层应显示外发目标,沙箱应阻止读取或联网。纵深防御意味着不依赖任意单层绝对正确。

6. 代码挑战

为每个 ToolSpec 增加 side_effect、allowed_roots 和 network 属性。policy.check 返回 allow、ask、deny 与 reason。写离线测试覆盖路径穿越、.git、主目录、网络和危险命令。测试应验证理由,而不只验证布尔值。

完成实验的标准是能说清:谁提出动作,谁分类风险,谁批准,谁在操作系统层真正限制。