← 返回目录

第 31 卷

第 31 / 43 卷作者:Un-named日期:

  • **后端矩阵**:Linux bwrap/Landlock、macOS Seatbelt、Windows ACL restricted-

token;`enforcement: full | partial`——旧 Landlock ABI 与 Windows ACL 的 Everyone/hard-link 边界是当前 partial 案例(**承诺打折扣时,消费方须按 partial 处

置**)

  • **fs 工具同边界**:`write`/`edit` 等文件工具同样受 workspace-write 约束,不是"文件

工具直通、只有 bash 才沙箱"(#149 递归删工作区即发生在 workspace-write 下)

  • **只限写不限读**:当前权限模型约束的是**写**,工作区外内容可被读到(#492 提议

评测隔离模式时点出的现状)

**工具沙箱**:`bash`/`pwsh` 走 `bash-sandbox` / `pwsh-sandbox`(消费 `ctx.sandbox`)在沙箱内起子进程;Windows 上 pwsh 沙箱有 ACL 约束(第 8 章实测遇到

过 temp 权限问题;#758 还报告 Windows 沙箱临时目录清理后永久崩溃)。

**同族案例**:#159 的竞态属于 TOCTOU(检查与使用之间路径被换);#278 是另一种拓宽手法——`/tmp` 作 workspace 时,受限子进程可通过 rebind 把 workspace-write 授权

范围扩宽。两者共同教训:**边界根目录要选可信位置,且不能只信任单一路径检查**。

13.3 权限模型:工具权限分级表

官方权限预设把**两个旋钮**——`sandbox/mode` 与 `approval/policy`——捆成命名预设,客户端展示为一个"Permissions"选择器。默认表两张:

预设sandbox/modeapproval/policy语义
workspace-writeworkspace-writeask工作区内可写、操

作前询问(默认)

danger-full-accessdanger-full-accessnever无沙箱、不询问
custom(派生态)任意组合任意手动调旋钮后的"非

预设"态,不可作为切换目标

**工具权限分级**(按危害半径排序;各工具"建议预设"为按官方文档推导,非逐工具实测— —**推断,待实测**):

级别代表工具建议预设风险备注
只读探查read/grep/read-only兼容低只读不落盘;读
glob不限于工作区
工作区写write/edit/workspace-中写边界=工作
strreplaceeditowrite区根+临时区

r

命令执行bash/pwshworkspace-高沙箱不挡网络与 write(沙箱进程

内)

全访问任意(切danger-full-极高关闭所有闸门 danger-full-access

access)

> 官方文档明确沙箱**只管文件**——所以"命令执行"级的高风险不能靠沙箱消除,要靠审批与信任边界(13.5 / 13.7)兜底。

**真实边界案例**(详见 13.6):`workspace-write` 下递归删除整个工作区零确认(#149);`danger-full-access` 误删整个家目录(#461,真实事故);Windows 上

minimal preset 允许工作区外写入且无审批(#523);沙箱内 agent 可 `taskkill` 杀宿主(#466,进程可见性在沙箱词汇表外)。

13.4 审批流:从请求到放行

官方审批文档:审批回答一个问题——"这个具体动作能不能做?"

**结果集 fail-closed**(`ApprovalOutcome`):

结果含义对调用方的效果
allowed-once一次性放行(只放行被问✅继续

的这一个动作)

rejected明确拒绝❌中止
cancelled请求被撤回❌中止

(AbortSignal)

unavailable无应答者 / 应答者异常❌ 中止(默认 failclosed)

**策略**(`ApprovalPolicy`):`ask`(默认,交给应答者链;链为空 → unavailable);

`never`(确定性全部 rejected,不派发任何应答者——headless/CI 的严格姿态)。

**流程**:工具调用 → `approval/request` waterfall(插件可拦截/改写)→ 应答者(Web UI 人肉应答,或 ACP 桥的一次性机器决策)→ 每次请求成对写审计事件 `approval/asked`

  • `approval/decided`(同一 `ApprovalRequestId`)。

**请求内容**(`ApprovalRequest`):agent(应答者只回答自己拥有的 agent)+ toolName + callId(关联已流式展示的工具调用,参数不重复渲染)+ reason(为什么问)

  • signal(AbortSignal 撤回)。

**三个已知坑**:

  1. **审批回环**:#250 真实复现"模型自批准 danger-full-access"(Web approval 通

道可被模型自己驱动)——**审批不是安全边界**,只是人机协作闸门

  1. **并发误定向**:#453 并发沙箱审批时点 Allow 会中止另一个调用(UI 应答与

callId 错配)

  1. **重连丢审批**:#646 重连静默丢 pending approval(resync 清空 + replay 竞

态);headless 下审批行为未定义(#291)

13.5 插件安全审计清单

插件是 dsh 的能力边界("一切皆插件",见第 4 章)——**装插件 = 装可执行代码**。社区审计(#817 及同族)沉淀的检查清单:

#检查项社区依据处置
1插件来源可信?dsh#587只装官方/知名源;
plugin add无签名装前读源码

/来源校验

2boot 期权限最小?#587警惕"装完自动改配插件 boot 期有全配置"的插件

置树写权限

3不拿vm当安全边#243#451#774vm只当隔离引擎,
界?workflow/动态#778不当安全层

插件 vm 可逃逸

4子进程环境#584检查

scrubbed正确?KEYBOARD/MON
scrubbedParentEnKEY等含KEY子串
v子串误伤合法变量的变量是否被误

scrub(误伤机制按标题推断)

5密钥脱敏不 fail-#226密钥不写进提示 open?settings词;校验脱敏逻辑

role'secret' 存在脱敏缺口

6安全 hook 不静默#460 #583hook 超时设正数;

失效?timeout: 0加载失败要报错会 fail-open

7审计留痕?官方 approval.md关键操作按会话可 approval/asked/回溯

decided 成对可查

8不泄漏会话明文?#674敏感环境禁用崩溃崩溃后 .tmp 明文会转储 / 定期清理

话残留

13.6 社区已知安全案例

以下 4 帖全部经 `gh api graphql` 核验存在(deepseek-ai/deepseek-harness Discussions,2026-08-14):

帖号一句话类型影响

全站分卷索引 · 43 卷
  1. 1第 1 卷
  2. 2第 2 卷
  3. 3第 3 卷
  4. 4第 4 卷
  5. 5第 5 卷
  6. 6第 6 卷
  7. 7第 7 卷
  8. 8第 8 卷
  9. 9第 9 卷
  10. 10第 10 卷
  11. 11第 11 卷
  12. 12第 12 卷
  13. 13第 13 卷
  14. 14第 14 卷
  15. 15第 15 卷
  16. 16第 16 卷
  17. 17第 17 卷
  18. 18第 18 卷
  19. 19第 19 卷
  20. 20第 20 卷
  21. 21第 21 卷
  22. 22第 22 卷
  23. 23第 23 卷
  24. 24第 24 卷
  25. 25第 25 卷
  26. 26第 26 卷
  27. 27第 27 卷
  28. 28第 28 卷
  29. 29第 29 卷
  30. 30第 30 卷
  31. 31第 31 卷
  32. 32第 32 卷
  33. 33第 33 卷
  34. 34第 34 卷
  35. 35第 35 卷
  36. 36第 36 卷
  37. 37第 37 卷
  38. 38第 38 卷
  39. 39第 39 卷
  40. 40第 40 卷
  41. 41第 41 卷
  42. 42第 42 卷
  43. 43第 43 卷