Skip to content

安全:动作授权与执行约束 ​

工具消费者按需请求一次动作审批、解析本次文件策略并调用执行沙箱。凭据逐操作读取,业务所有权另行核验;各插件分别承担授权、文件约束与秘密解析责任。

消费者组合审批、策略与文件沙箱

箭头表示标注的调用或依赖关系;点击组件定位正文。完整关系见下方文字说明。

文字关系说明与章节链接

工具/执行消费者 →(需审批时请求)→ 动作审批服务;工具/执行消费者 →(解析本次策略)→ 执行策略解析器;工具/执行消费者 →(受限模式参数)→ 沙箱能力与平台后端;沙箱能力与平台后端 →(返回约束参数)→ 进程执行器;工具/执行消费者 →(按需逐操作读取)→ 凭据解析提供者。

工具/执行消费者 · 动作审批服务 · 执行策略解析器 · 沙箱能力与平台后端 · 进程执行器 · 凭据解析提供者

审批服务只授予一次动作 ​

dsh-user-approval 接收动作请求,并经回答链取得 allowed-once、rejected、cancelled 或 unavailable。只有 allowed-once 授权;缺少回答者、非拥有者回应或回答者抛错都不能视为默认同意。

// 请求一次动作审批并记录审计,只有 allowed-once 授权执行。
async request(req: ApprovalRequest): Promise<ApprovalOutcome>

ask 策略进入链条,never 策略直接拒绝而不派发。决策可采用最近日志状态,否则使用配置;approval/asked 与 approval/decided 留下仅用于记录的审计对,取消后到达的迟到答案被丢弃。

策略解析绑定本次执行 ​

dsh-sandbox 定义 read-only、workspace-write、danger-full-access 等执行策略,sandbox-local 在本机实施,shell 等消费者把策略交给实际执行器。

// 将原始 argv 包装为受约束执行参数,同时报告后端约束完整度。
abstract confine(argv: readonly string[], policy: SandboxPolicy, signal?: AbortSignal): Promise<ConfinedArgv>

每次调用根据 Session 不可变 cwd 确定根目录,路径要在执行环境里规范化;经过明确批准的覆盖只应用于对应调用。danger-full-access 绕过文件限制。该能力主要约束文件效果,不能据此宣称同时隔离全部网络访问或进程可见性。

// 按本次批准覆盖、会话日志与部署默认解析文件执行策略。
resolve(request: SandboxPolicyRequest = {}): SandboxExecutionPolicy

平台后端落实文件约束 ​

固定版本本地实现使用 Linux 的 bwrap 或 Landlock、macOS 的 Seatbelt、Windows 的受限令牌与 ACL;具体后端报告 full 或 partial。

Windows 与较旧 Landlock 存在部分实施的情形,命令成功不证明请求的所有限制都已实施。自定义 runnerCommand 会跳过内建后端选择与探测,此时 full 是操作者的实施声明,还须配置 runnerFailureSignatures。SSH 沙箱由 sandbox-ssh 在远端执行环境实施,不能把本地 ACL 结论套在远端路径上。失败输出中的拒绝线索也不等于完整的拒绝审计。

凭据与业务所有权分别校验 ​

dsh-credentials 定义凭据服务,credentials-local 管理本地来源;配置引用环境变量名,密钥值由提供者拥有,空值视为缺失。

// 每次操作重新解析凭据,返回当前值与来源,跨操作不可缓存。
abstract resolve(ref: CredentialRef): Promise<ResolvedCredential | undefined>

每次操作或请求重新 resolve;本地凭据文件默认监视变更,重载后可供下次请求使用。来源优先级是启动环境、存储文件、项目 .env、home .env;启动环境是冻结快照,优先级最高且只读,变更它需要重启。describe 仅报告配置状态、来源与可写性。同时 jobs 与 subagent 检查对象拥有关系,不能因为模型知道一个编号就允许访问。

辅助示例

模型需要在工作区外写文件时,工具发起针对该动作的审批;获得一次许可后,执行器使用获批的权限覆盖配置执行,并报告实际沙箱事实。这个许可不会自动授予后续命令,更不会让模型读取任意作业或取得模型 API 密钥。若用户已取消,迟到的同意也不能启动原动作。

设计取舍 ​

审批、执行限制、凭据与所有权各自回答一个具体问题,减少权限被含糊继承的机会;代价是使用者需要分别检查审批、执行限制、凭据和所有权结果。软提示适合协作,强制限制依赖具体执行后端,二者不能因名称都含“只读”就混为同一保证。

相关包与插件
资料来源与核验范围

本章依据固定版本的官方文档整理,设计取舍根据所述机制分析;核验范围为文档,不包含运行实测。

图示
100%双指缩放 · 滑动查看