信任模型与安全边界
信任模型与安全边界
Section titled “信任模型与安全边界”插件安全模型围绕两条原则:
- 权限先声明 —— 插件需要的宿主能力必须写在
capabilities里, 安装启用时展示给用户确认; - 签名先校验 —— 从 URL 安装的包可带 minisign 签名,带签名则验签 通过才可安装。
能力分层(L0 / L1)
Section titled “能力分层(L0 / L1)”| 层级 | 声明 | 信任弹窗内容 | 被授予后可调用 |
|---|---|---|---|
| L0(默认) | capabilities: [] 或省略 |
基础信任确认 | 全部 Host API 白名单(不含进程 / sidecar) |
| L1 | capabilities: ["process"] |
逐项列出能力,警示「将以你的用户权限执行任意命令」 | ctx.process.spawn / hosts.execStream / ctx.config / `ctx.vault.list |
| L1 | capabilities: ["sidecar"] |
同上(隐含 process) |
ctx.sidecar.call + 上述进程 / 配置 / 全量凭据 API |
- 授予状态存
settings.trustedCapabilities[pluginId],卸载时真删记录 (而不是写空数组——旧实现把授权清成[]但 id 仍在,插件重装后会跳过 信任弹窗,L1 能力实际未授予)。 - 未获授予时相关 API 明确报错,插件其余功能(纯 UI 贡献点)仍可用。
- 从磁盘 / URL 安装的外部插件默认未信任;
- 用户在「设置 → 插件」里启用时,宿主按
capabilities展示信任弹窗 (contributes摘要 + 能力列表就是给用户看的); - 确认后插件才被激活;之后随时可禁用 / 重新启用。
官方插件与第三方完全等同:无内置、无特权、同一条信任 / 启用 / 卸载流程。
- 插件包可附带 minisign 签名(
catalog.json条目的sigUrl指向.sig文件)。签名信任根复用 Tauri updater 的 minisign 公钥 (tauri.conf.json的plugins.updater.pubkey),与更新包同源。 - 带签名的目录条目:签名必须下载成功且验签通过才安装——拒绝静默 降级为无签名安装。
- 无签名:可以安装,但界面上没有「已签名」标识,走上述信任确认 流程。
- 裸 URL 安装(非目录条目):无签名安装。
- 签名失效 / 缺失的官方包不会被接受为「官方」(见 官方插件开发与发布)。
不要安装来源不明的未签名插件——它与你授予的权限等价于一个拥有你 SSH 凭据的进程。
插件的数据与状态隔离
Section titled “插件的数据与状态隔离”ctx.storage按插件 id 分桶,互不可见。- 卸载:删除插件目录、吊销授权、清注册表记录;
pluginSettings里的 数据保留,重装后可恢复。 - 禁用:宿主回放该插件全部注册返回的 Disposer(贡献点 / 事件 / 服务 /
样式节点),强制回收其名下全部流式进程与 sidecar,再调用
deactivate()。
安全边界一览
Section titled “安全边界一览”| 边界 | 宿主行为 |
|---|---|
| 贡献点 id | 外部插件必须以 <pluginId>. 开头(防撞名),否则拒绝注册 |
| 事件订阅 | 只允许白名单前缀(pty:// sshch:// serial:// ssh:// transfer:// fs-progress:// tray:// forward:// proc://) |
| 文件写 | ctx.fs.writeText 只允许写本次会话内经 dialog.pickSavePath 选择的路径 |
| 配置 / 全量凭据 | ctx.config.export/import 与 ctx.vault.list/export/import 需要 L1 process 授予,未授予时明确报错 |
| 主题变量 | CSS 自定义属性值经消毒(禁 {}、;、</style),防逃逸出规则块 |
| 网络 | 生产 CSP:script-src 'self' blob:(插件经 Blob URL 加载);connect-src 'self' https: —— 插件内不允许远程脚本 / 样式 |
| 清单 | manifest.id 必须与目录名一致;official 字段安装时剥离,第三方伪造无效 |
| 依赖 | 前置依赖不可达 → 跳过加载并展示原因;单个插件失败不影响宿主与其他插件(故障隔离) |
给用户的提示
Section titled “给用户的提示”普通用户在用户指南 → 插件系统查看如何判断插件是否 可信。