跳转到内容

下载 Termii · v0.4.5

三分钟,装进你的 Dock

原生构建,包体仅数 MB。应用内自动更新,始终新鲜。

安装说明

macOS:若提示「无法打开」,在终端执行 xattr -dr com.apple.quarantine /Applications/Termii.app。Windows:首次运行可能触发 SmartScreen,选择「仍要运行」即可。

信任模型与安全边界

插件安全模型围绕两条原则:

  1. 权限先声明 —— 插件需要的宿主能力必须写在 capabilities 里, 安装启用时展示给用户确认;
  2. 签名先校验 —— 从 URL 安装的包可带 minisign 签名,带签名则验签 通过才可安装。
层级 声明 信任弹窗内容 被授予后可调用
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 贡献点)仍可用。
  1. 从磁盘 / URL 安装的外部插件默认未信任;
  2. 用户在「设置 → 插件」里启用时,宿主按 capabilities 展示信任弹窗 (contributes 摘要 + 能力列表就是给用户看的);
  3. 确认后插件才被激活;之后随时可禁用 / 重新启用。

官方插件与第三方完全等同:无内置、无特权、同一条信任 / 启用 / 卸载流程。

  • 插件包可附带 minisign 签名(catalog.json 条目的 sigUrl 指向 .sig 文件)。签名信任根复用 Tauri updater 的 minisign 公钥 (tauri.conf.json 的 plugins.updater.pubkey),与更新包同源。
  • 带签名的目录条目:签名必须下载成功且验签通过才安装——拒绝静默 降级为无签名安装。
  • 无签名:可以安装,但界面上没有「已签名」标识,走上述信任确认 流程。
  • 裸 URL 安装(非目录条目):无签名安装。
  • 签名失效 / 缺失的官方包不会被接受为「官方」(见 官方插件开发与发布)。

不要安装来源不明的未签名插件——它与你授予的权限等价于一个拥有你 SSH 凭据的进程。

  • ctx.storage 按插件 id 分桶,互不可见。
  • 卸载:删除插件目录、吊销授权、清注册表记录;pluginSettings 里的 数据保留,重装后可恢复。
  • 禁用:宿主回放该插件全部注册返回的 Disposer(贡献点 / 事件 / 服务 / 样式节点),强制回收其名下全部流式进程与 sidecar,再调用 deactivate()。
边界 宿主行为
贡献点 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 字段安装时剥离,第三方伪造无效
依赖 前置依赖不可达 → 跳过加载并展示原因;单个插件失败不影响宿主与其他插件(故障隔离)

普通用户在用户指南 → 插件系统查看如何判断插件是否 可信。