09. 权限系统与沙箱边界
CC Learn Docs
09. 权限系统与沙箱边界
范围
src/utils/permissions/permissionSetup.tssrc/utils/permissions/permissions.tssrc/utils/permissions/PermissionMode.tssrc/utils/permissions/yoloClassifier.tssrc/components/permissions/PermissionRequest.tsxsrc/components/sandbox/SandboxConfigTab.tsxsrc/utils/sandbox/sandbox-adapter.ts
1) 三层安全模型
- 规则层:allow/deny/ask 规则与 mode(default/plan/acceptEdits/bypass/dontAsk/auto)。
- 判定层:
permissions.ts进行规则匹配、子命令拆分、classifier/hook 介入。 - 执行层:sandbox runtime 将权限落实到文件/网络系统边界。
2) 权限判定流程图
flowchart TD
A[tool call] --> B[规则匹配 allow/deny/ask]
B --> C{需要进一步判定?}
C -->|是| D[hooks/classifier/模式约束]
C -->|否| E[直接allow或deny]
D --> F{最终decision}
F -->|allow| G[执行工具]
F -->|ask| H[PermissionRequest UI]
F -->|deny| I[拒绝并回填tool_result]
3) permissionSetup 的职责
permissionSetup.ts 做“初始策略构建”与模式切换约束:
- 从 settings + CLI 参数装配工具权限上下文。
- 识别危险规则(例如 Bash 通配、PowerShell 高危执行、Agent allow)。
- 自动模式(auto)启用前进行安全条件检查。
4) permissions.ts 的职责
- 统一规则解释与匹配(含 MCP 前缀规则)。
- 生成权限请求消息。
- 承接 classifier/hook 结果,形成最终
PermissionResult。 - 对 subcommand 场景做细粒度结果合并。
5) Auto-mode 分类器
yoloClassifier.ts 实现 auto 模式安全阀:
- 基于 prompt + action 构造 sideQuery 分类请求。
- 支持规则模板与用户覆盖。
- 失败时可输出调试转储,便于会话级诊断。
6) 沙箱适配层
sandbox-adapter.ts 将 Claude 配置映射到 sandbox-runtime:
- 路径规则转换(
//、/、相对路径、~) - 网络域名 allow/deny
- 设置文件与关键目录写保护
- 工作目录、附加目录、git 特殊路径处理
7) 权限 UI 层
PermissionRequest.tsx 按工具类型分派不同确认组件:
- Bash/Edit/Write/Skill/PlanMode/Monitor 等独立交互面板。
- 支持 sticky footer(长内容批准场景)。
8) 值得学习的点
- 安全策略前置到“模型可见工具集”与“执行前判定”两层,降低误用风险。
- 权限模式、规则系统、沙箱系统三者不是替代关系,而是叠加防线。
- auto mode classifier 与人工确认可以混合,兼顾效率与安全。
9) 风险点
- 权限规则语法灵活,错误配置可能引入放权过度。
- 分类器与 hooks 的时序复杂,必须有完备观测与回归测试。
10) 证据文件
src/utils/permissions/permissionSetup.tssrc/utils/permissions/permissions.tssrc/utils/permissions/PermissionMode.tssrc/utils/permissions/yoloClassifier.tssrc/components/permissions/PermissionRequest.tsxsrc/components/sandbox/SandboxConfigTab.tsxsrc/utils/sandbox/sandbox-adapter.ts