📄 一句话概括
预设能决定装哪些件,决定不了能踩多大范围——把两者混为一谈,等于把刹车装在方向盘上。
📝 本节和前面几节的关系
8.3.6 的失败路径里,最要紧的是权限那一条;这一节专门讲清预设与权限的边界。
一、实测三次改动,看谁说了算
- 在预设内部塞一条
sandbox-policy(mode: danger-full-access):dump 出来树里两条并存,宿主层那条仍写着DSH_PERMISSION_MODE ?? 'workspace-write'——没动。 - 在宿主层把
sandbox-policy改成 read-only:diff 6 行,生效(第 4 章的实验)。 - 宿主层的
permission:三档枚举,沙箱与审批成对写死。
三次一比就清楚了:管范围的那一件,根本不在预设里。
二、权限是【成对】的
三档枚举长这样:
read-only+askworkspace-write+ask(默认)danger-full-access+never
每一档都是沙箱档位与审批策略的固定搭配(4.5.1)。
为什么要成对?因为三个自由开关有 8 种组合,一半是自相矛盾的;枚举只剩 3 种,每一种都自洽。
三、预设与权限,各管什么
- 预设:会话里装哪些件、人格怎么写、暴露哪些工具。它的粒度是【能力】。
- 权限:进程能给多大沙箱范围、要不要问人。它的粒度是【范围】。
两者的关系是:预设决定你手里有哪些工具,权限决定这些工具最远能碰到哪。
四、为什么必须分开
如果预设能改权限,等于会话给自己发通行证:
一个预设只要在里面写一句【我允许全盘访问】,整套边界就没了。
所以本课把它放在宿主层:每会话一份的装配清单,无权改动进程级的策略。
五、动手 Demo:为什么预设不是权限系统
把本章实测的三次改动横过来看:
rows = [("预设内部", "塞 sandbox-policy", "宿主层没动"),
("宿主层", "改 read-only", "6 行生效"),
("宿主层", "permission 三档", "沙箱与审批成对")]
for a, b, c in rows:
print(" %-8s %-18s %s" % (a, b, c))
print(" 预设管装配, 不管权限")
实跑输出:
--------------------------------------------------------------------
为什么预设不是权限系统
--------------------------------------------------------------------
把本章实测的三次改动横过来看:
在哪一层改 改的是什么 实测 diff
--------------------------------------------------------------------
预设内部 塞一条 sandbox-policy 宿主层那条**没动**
宿主层 sandbox-policy 改 read-only 6 行,生效
宿主层 permission 三档枚举 枚举本身是成对配好的
--------------------------------------------------------------------
权限的三档是 `read-only+ask`/`workspace-write+ask`/
`danger-full-access+never`——**沙箱与审批成对写死**(4.5.1)。
预设能决定【装哪些件】,决定不了【能踩多大范围】。
**把两者混为一谈,等于把刹车装在方向盘上。**
管范围的那一件,根本不在预设里——这是从 dump 里数出来的事实,不是设计口号。 三档枚举的意义在于成对:3 种自洽搭配,好过 8 种一半矛盾的开关组合。 预设若能改权限,就等于会话给自己发通行证。
30 秒实验
- 在你自己的树里找
sandbox-policy、approval、permission三件,看它们在不在预设里。 - 试着在预设内部加一条权限相关的件,dump 一下看宿主层变没变。
- 记住判据:管能力的是预设,管范围的是宿主。
常见误区
- 错误:在预设里写一条权限配置就能提权。——纠正:实测无效——树里两条并存,宿主层那条一个字没动。
- 错误:沙箱档位和审批策略可以各自随便配。——纠正:它们是成对的——三档枚举的意义就是不给乱配留空间。
- 错误:预设是【我的】,我喜欢怎么配都行。——纠正:预设是会话级的,权限是进程级的——层次差一级,权力也差一级。
自测三问(点开对答案)
1. 预设能决定什么、不能决定什么? —— 能决定**装哪些件、人格、暴露哪些工具**;不能决定**沙箱范围和要不要问人**——后两者在宿主层。 2. 权限三档为什么必须成对? —— 因为**三个自由开关有 8 种组合、一半自相矛盾**;成对枚举只剩 3 种,每一种都自洽。 3. 在预设里塞 sandbox-policy 的实测结果是? —— 树里**两条并存**,宿主层那条**没动**——所以预设不是权限系统。- ☐ 下一节(8.5 插件生态越强,边界越重要)
相关笔记
- 插件生态越强,边界越重要 —— 从权限推开到整个生态
- 为什么 Guard 要【单调】 —— 三档枚举的出处
- Approval 与 Sandbox 为什么必须放在不同层 —— 两个独立插件的分工
- 🐳 DeepSeek Harness · 索引