装不装你说了算
后台检查、后台下载,但绝不自动安装、绝不在退出时静默替换。 终端里跑着你的活,自动重启会把正在进行的 agent 对话掐掉。
安全模型
安全页通常从「我们保护你」开始。这一页从边界开始, 因为一个说不清边界的承诺没有用。
边界
Termspace 里所有终端和应用本身跑在同一个用户身份下。 底层是 tmux,而任何已经能在你机器上执行命令的进程, 都可以直接向那些会话发送按键 —— 绕开画布上的连线、弹窗、开关,一个都不经过。
所以「连线即授权」防的是:agent 拿错账号、连错数据库、把活派到你没打算派的地方, 以及你自己手滑。它不防一个已经拿到你 shell 的攻击者 —— 那种情况下,你的 ssh 私钥和浏览器 cookie 早就没了,Termspace 的弹窗是最不重要的一环。
这句话同样写在项目的开发文档和代码注释里。任何时候有人(包括我们自己) 把它描述成安全机制,那是错的。
做到的
每一条都给出它挡住的那个具体场景。挡不住什么也一并写。
数据
| 什么 | 存在哪 | 出网吗 |
|---|---|---|
| 凭证内容 | 本机,系统钥匙串加密 | 不出网 |
| 画布布局 / 节点 | 本机 JSON,原子写 + 备份 | 不出网 |
| 终端滚动历史 | 本机文件 | 不出网 |
| 派活与授权记录 | 本机追加式日志 | 不出网 |
| 额度数据 | 不落盘,内存里 | 向对应厂商的官方接口查询 |
| 崩溃日志 | 本机 | 不自动上传 |
没有账号体系,没有服务端。 Termspace 不向我们的服务器发送任何东西 —— 我们没有那样的服务器。唯一的固定出站是检查更新(见下), 其余全部是你自己配置的 agent 在跟它们各自的厂商说话。
更新
更新包会替换掉整个应用,所以这条链的每一环都值得说清楚 —— 包括每一环不保证什么。
| 环节 | 保证 | 不保证 |
|---|---|---|
| HTTPS | 连上的确实是那个地址的服务器,传输中没被改 | 那台服务器可信 |
| 校验和 | 下载到的文件完整、没损坏 | 发布者身份 —— 控制了发布目录的人可以给恶意包算一个匹配的校验和 |
| 代码签名 | 候选包的签名与当前正在运行的这个应用同源 | 它来自官方目录、版本更新、通过了公证、私钥没泄漏 |
结论:这条链的信任根是发布目录的控制权,代码签名是最后一道防线而不是第一道。 更新源地址在设置里可以改 —— 这有代价,所以界面上会显著提示当前生效的域名。 只接受 HTTPS,明文地址一律拒绝。
后台检查、后台下载,但绝不自动安装、绝不在退出时静默替换。 终端里跑着你的活,自动重启会把正在进行的 agent 对话掐掉。
签名本身不提供版本单调性,防降级完全靠这一层,所以它是显式写死的。
修过的
写出来不是为了显得坦诚 —— 是因为它们说明了这套东西的失效模式长什么样: 不报错,测试全绿,只是安静地做了错误的事。
这三个都不是在写代码时发现的,是在发布前专门做一遍审计时发现的 —— 改动审查看的是「这次改了什么」,而它们不在任何一次改动里。
报告
如果你找到了这一页没说清的问题,或者发现某句话与实际实现不符,请告诉我们。 「文档描述与实现不符」本身就算一个有效报告 —— 这一页的价值全在于它是准确的。
软件当前处于早期阶段。它跑在你的开发机上、握着你的账号凭证, 请按这个前提评估要不要用。