LOCAL-FIRST 安全架构

明确谁能访问凭据,谁能执行操作。

Runory 把安全边界落实在架构里:React 是交互层,Rust 是基础设施引擎。SSH、TCP、跳板与隧道、凭据、私钥解析、主机验证、远程文件和进程执行都不交给前端。

01

凭据只在本地 Vault

02

连接强制主机验证

03

权限业务专用 IPC

01

秘密不进入主机资料

ServerProfile 永远不保存 password、passphrase、privateKeyContent 或 vaultMasterSecret。

02

未知与变化是两种状态

未知主机可以临时或永久信任;已知主机密钥变化会直接阻止连接;跳板路径两端分别验证。

03

远程内容默认不可信

远程文件、终端输出、HTTP Body 与 MCP Output 都按 Untrusted Data 处理。

01

凭据的生命周期停留在 Rust Core

CredentialService 通过 CredentialVault 保存凭据。界面没有读取已记住密码明文的 API;临时秘密只在用户当前操作时一次性提交。日志可以记录 profile_id、session_id、host、port 和稳定错误码,但不能记录密码、Passphrase、私钥或 Vault Key。

私钥同时支持 File 与 Vault 概念。桌面端可以引用文件,移动端使用导入后的不透明 key_id,避免把桌面路径假设带到 iOS 或 Android。

02

连接身份必须核对

Runory 不提供 accept_all_hosts、skip_host_verification 或 StrictHostChecking=no 之类的绕过入口。未知主机要求 Trust Once、Trust & Remember 或 Cancel;密钥变化则阻止连接。跳板与隧道复用同一套认证与验证边界,而不是另开旁路。

这套验证位于 Rust 的 KnownHostService,而不是依赖前端是否正确显示某个警告。

03

审批、验证与审计互相约束

AI 命令审批绑定精确命令和会话。结构化高风险操作绑定 ChangeSet Version,并要求 Verification。ChangeSet、Incident 与 Audit 只持久化必要的无内容元数据,重启后旧审批失效,不会自动续跑。

Tauri 使用最小权限和业务专用 Command。终端输出通过 Channel 流向 xterm,既不经过通用事件广播,也不进入 React State 或持久化存储。

常见问题

安全架构

网页端能读取服务器资料吗?+

不能。可选云同步保存的是本地加密后的清单密文,网页不解密服务器资料。

Runory 会记录终端输出吗?+

不会持久化终端输出;原始流只通过 Tauri Channel 写入 xterm。

插件或 Skill 能提升权限吗?+

不能。Skill、MCP 与模型都必须经过统一 Tool Registry、Policy 与审批边界。