跳转到内容

安全与隐私

这一页只写你能做的事:知道流量去哪、把凭据放对地方、知道数据留在哪、会轮换。tansr 内部的防线(权限引擎、保护路径、硬安全红线、审计链)在各形态的指南里已经展开,这里只在与你的操作相关时引用。

目的地 何时 能否关
tansr 平台网关 api.tansr.com 登录平台模式后:模型调用、配置束拉取、心跳、用量上报、余额 TANSR_ESCAPE_LOCAL=1 进完全本地模式即整体停用
官方分发点 bash.tansr.com 只在你显式 /updatetansr update 时;启动期恒不自动检查 TANSR_UPDATE_CHANNEL=noneTANSR_NO_UPDATE_CHECK=1;企业可指自托管清单 TANSR_UPDATE_MANIFEST_URL
你配置的模型供应商 完全本地模式下 providers.*.baseUrl 由你决定
你配置的 MCP 服务器 / 自带搜索与媒体端点 会话内工具调用 由你决定;项目层 MCP 服务器须显式授信
模型经工具访问的任意 URL(WebFetch / Http) 会话内 受权限规则约束;可用 deny 规则禁用整个工具

无人值守部署(tansr serve / headless 放权到 auto)的推荐基线是网络出口白名单:仅放行模型 API 等必要目的,DNS 与已建连接之外缺省拒绝;配合容器或最小权限专用用户、文件系统写面限工作目录。参考模板在仓内 deploy/serve/

已在场的两道用户可见防线:同一条命令里既引用秘密文件(.env、密钥、.aws/credentials)又带外发动作(curl / scp / git push …)恒被拒绝,任何模式与规则压不过;会话一旦读过秘密文件,其后的外发动作一律转为询问(会话污点)。即将随 tansr 命令行 0.5.0 提供:全部出网(WebFetch / Http / hooks / 音频下载)改经统一出口,DNS 解析后再判私网、环回、链路本地地址,指向内网或元数据地址的抓取被拒并给出原因;Http 工具与 hooks 可引用的凭据环境变量收敛到白名单 http.allowedAuthEnvVars,名单外不发请求。

  • @tansr/sdk 令牌档只连你传入的 baseUrl(平台网关)以及你显式配置的 MCP 服务器;SDK 恒不扫用户目录、恒无自带搜索端点。
  • @tansr/serve 上游链是 appid/appkey → POST /v1/app-tokens → GET /t1/config + POST /t1/heartbeat → POST /t1/exchange,全部指向 apiBaseUrl;另有你配置的轮末 webhook URL(出站请求恒不带任何鉴权凭据头,真伪凭签名)与可选冷层对象存储。
  • 移动端 SDK 只连你的会话服务 baseUrl,不直连平台。
凭据 代表谁 正确位置 恒不放
个人访问令牌(PAT) 你本人 控制台生成后只喂给 tansr init(掩码输入)或 CI 的 TANSR_PAT 环境变量 shell 历史(--pat 直给会留痕)、脚本明文、仓库
本机派生应用键 你的这台设备 tansr init 自动写入操作系统密钥库(macOS Keychain / Linux secret-service / Windows DPAPI);不可用时降级 0600 文件并明确警示 不需要你碰;tansr doctor 的凭据存储段可看落点
模型供应商 API key(完全本地模式) 你的供应商账号 环境变量;配置文件里只写变量名 auth.env settings.json、错误消息、/config 输出(它们永不携带值)
应用密钥 appid / appkey 你的应用 你的服务端进程环境变量(Node 进程或 @tansr/serve 终端设备、日志、错误响应、版本库(.env.gitignore
短期 app_user 令牌 你的某个终端用户 Electron 主进程内存;@tansr/serve 进程内部 renderer 进程、持久化存储;移动端从不接触它
你自己的登录 token(移动端) 你的用户 authProvider 按次提供,SDK 不持久化 SharedPreferences / DataStore / UserDefaults / 日志
会话服务 /v1 Bearer(--token / TANSR_SERVE_TOKEN) 运维方 环境变量 /v2 面互不相通,不要复用给终端用户
webhook secret 你的推送后端 会话服务与接收端各自的环境变量 日志;引擎恒不打印它

三处红线值得反复说:appkey 恒不出你的服务端;app_user 令牌恒不出会话服务;会话 id 不是鉴权因子。

命令行还有一层脱敏纪律替你兜底:报告、日志、导出转录里的密钥一律按 sk-...尾4位 形态脱敏;tansr sessions export 的产物可直接进工单。

  • 会话、配置缓存、用量队列、项目记忆落在 <storageRoot>/(缺省 ~/.tansr,可经 TANSR_STORAGE_ROOT 或总根 TANSR_USER_HOME 重定向);登录平台后新数据按账号隔离到 <storageRoot>/identities/<账号指纹>/
  • 每会话一目录:journal.jsonl(哈希链)、meta.jsonattachments/、超限产物 spill/;图片字节缓存在 <storageRoot>/image-cache/<sessionId>/;Shell 长输出落 <工作目录>/.tansr/shell-output/;TTS 音频落 <工作目录>/.tansr/artifacts/<sessionId>/
  • 不会自动删除。清理走 tansr sessions prune(缺省 dry-run 只列清单,--apply 才删;保留策略 --keep-days 缺省 90 与 --keep-last 缺省 500 取并集;今日与使用中的会话恒不删;损坏目录要 --include-broken)。tansr logout 不删身份仓数据。
  • 会话结束时的 metrics.json 只有计数与比率,不含路径、命令、规则原文。对外遥测缺省关闭:当前版本不存在任何对外上报通道。
  • 平台侧不存终端会话内容,只计量;平台会话注册表有 30 天不活跃租约,到期归档。
  • 会话历史落在你配置的 store 目录 <dir>/agent-sessions/<endUserKey>/sessions/<sessionId>/,endUserKey 是终端用户 id 的哈希,不是身份;可挂冷层到你的对象存储,段是明文 JSONL(压缩)——加密、密钥管理、驻留地、访问控制归你policy.transform 挂点)。
  • 内存态短窗:终结记录保留 30 min,闲置 24 h 落盘;DELETE /v2/sessions/:id 是关闭不是删除。今天的 store 缺省永存;存储保留期扫描(按天龄与每用户条数删休眠会话)即将随 @tansr/serve 0.7.0 提供。真删除走 store.delete
  • 结构化日志字段恒不含令牌与消息内容;指标标签恒不含 sessionId / endUserId。
  • 下行到终端的权限请求帧恒不携完整工具参数,只有目标摘要;webhook 载荷恒不携消息内容与凭据。

Android / iOS SDK 不缓存凭据;视图状态在内存;是否把 sessionId 落本地(以便冷启 resume)由你决定——只存 id,不存内容,不存凭据。

凭据 怎么换 影响面
PAT 控制台新建一枚,本机 tansr init --fresh 重新登录,再在控制台删除旧 PAT PAT 恒不被 tansr logout 吊销——其他设备可能还在用同一枚
本机派生应用键 重跑 tansr init 即轮换顺延(临期时会话内会有「密钥即将过期」提示);tansr logout 清本地并尽力远程停用;丢失设备可到控制台手动停用该装置键 每台装置各持各键(按主机名 + 装置 id 命名),互不顶替
应用密钥 appkey 控制台轮换(对应 POST /v1/apps/:id/rotate);更新服务端环境变量后重启进程 兜底全断:旧 appkey 立即失效
某个终端用户的令牌 控制台或管理 API 按终端用户定向吊销(POST /v1/apps/:id/app-user-revocations),该用户存量令牌即时全拒;停掉他在你系统里的登录态即自然断供(令牌 TTL 60–86400 s,不存在续期) 只影响该用户
整个应用 控制台停用应用 末端全拒
会话服务 /v1 Bearer TANSR_SERVE_TOKEN / --token 后重启 /v1 面调用方需同步
webhook secret 接收端先同时接受新旧两值,再换会话服务侧,再撤旧值 期间投递零丢失
你自己的登录 token(移动端) 归你的登录体系;SDK 在 401 时经 authProvider 重取至多 2 次,仍 401 进入终态等你显式重连 令牌刷了再 401 就是吊销或配置错,不是抖动

令牌失效在平台侧只有一个码会触发:unauthorized(401)。会话服务收到它会在同一请求内逐出缓存令牌、重铸、重发一次;端侧 SDK 看到它就走上面的 2 次收敛。其他码(403、429、5xx)都不表示令牌坏了,不要因此重铸。

  • tansr doctor:凭据落在密钥库还是明文文件?localProviders 段是否符合你的预期(平台模式 / 逃生态)?无人值守基线有没有提示?
  • 仓库里 grep 一次 TANSR_APP_KEY / sk- / tansr_sk_,确认没有真值入库。
  • 会话服务绑 0.0.0.0 时,/metrics 是否只暴露给内网?store 目录是否本地盘、未共享?
  • 你的 token 换发端点是否只在自家登录态之后签发、endUserId 恒取服务端会话而不信任请求体?
  • 冷层对象存储的生命周期规则与加密是否已配置?