权限与升级
1. 当前权限边界(X-01/X-02/X-03)
准备 A(资源所有者)、B(接收授权)以及一个未授权账号。每条都同时验证“列表不可见”和“直接访问不可达”;只隐藏 UI 不算通过。
- 未授权:节点、私网服务、公开应用、网关出网与互联网出口均不可见/不可达。
node与private_service范围对比:Node Grant 放行指定节点 L3;Private Service Grant 只放行服务协议端口,二者不能互相扩大。- 跨账号:A 给 B 一个 Node Grant,B 通过 Node IP/DNS/Ping 访问;禁用/删除后现有与新连接都收敛为拒绝。B 切回自己的 Network 后不得残留 A 的资源。
- Subnet Access Grant 当前不做正向授权:按 ACL-06 验证选择禁用、提交 Not Ready 与 fail closed。
2. 滚动升级(X-04)
按生产可能顺序验证:
- 新 NSD + 上一发布版 App/
ns/NSGW; - NSGW 与
ns分批升级; - App 使用新
libns,服务端仍在滚动; - 最后升级剩余客户端。
混跑期间可以显式提示功能暂不可用,但不能崩溃、启动失败、越权或静默降低三 pin 信任。
3. 普通 App 升级(X-05)
适用边界:桌面 build 22 及以上,以及 iOS/Android 正常覆盖升级。用真实上一发布版登录并连接后覆盖安装候选包,不清数据。
通过标准:能启动;账号、设备身份、Profile、Organization/Network、设置与出口偏好保留;保持产品定义的连接状态;更新失败可回到旧版本。全新安装不能替代升级证据。
4. 已验证桌面 build 1~21 一次性迁移(X-06/X-07)
这不是普通升级保留路径,只适用于已验证的 macOS/桌面历史 build 1~21;build 22+、iOS、Android 不得进入此迁移。
- 用真实 build 1~21 状态启动候选版:迁移必须先完成一次性 claim,再执行规定的 legacy reset;App 静默启动、保持断开并禁用旧 auto-connect,用户随后重新登录。
- 第二次启动:不能再次 claim、reset 或重复提示。
- 在 durable claim 前注入失败:不得触碰 Core/App 数据,App 仅记录诊断并静默继续启动,pending evidence 允许下次启动重试。
- 在 claim 已成功后的 reset、App artifacts 清理或完成标记阶段分别注入失败:本次 attempt 必须进入终态且不再自动重试;App 继续静默启动、保持断开并禁用旧 auto-connect,不能使用半迁移身份/Profile 建立连接。
- 用 build 22+、iOS、Android 状态做反例:不得清除身份/Profile 或走 legacy desktop migration。
5. 旧 ns 状态迁移(NS-26/NS-27)
- 单 source:自动迁移为 singleton profile,设备/节点身份与 authority 保留,无需重新登记;第二次启动幂等。
- 多 source:必须 fail closed,不能任选 source 或混合资源;提示人工执行
sudo ns reset --all --yes后重新登记。未带--yes的全量重置不得执行。