STACIO WIKI · 安全指南
Stacio 安全与治理指南
1. 安全边界
Stacio 的目标是把远程操作放进可见、可确认、可脱敏和可追踪的本地工作流,但它不是:
- 远端主机的身份与权限管理系统;
- 网络防火墙、堡垒机审批或零信任网关的替代品;
- 集中 SIEM、不可篡改审计或合规归档系统;
- 数据库备份、灾难恢复和业务连续性平台;
- 能保证第三方本地 Agent 所有内部行为的 OS 沙箱。
安全责任由本机、Stacio、远端账号、网络和组织流程共同承担。
2. 本地数据与敏感资产
2.1 数据位置
默认应用支持目录为:
~/Library/Application Support/Stacio/当前实现中的主要数据包括:
| 数据 | 默认位置或存储 | 敏感性 |
|---|---|---|
| 会话、分组、主机密钥、传输历史、宏、审计 | Stacio.sqlite |
包含主机、用户名、路径、操作记录和环境信息。 |
| 密码、私钥口令、API Key、Token | CredentialVault/ 下的本地加密凭据库 |
高敏感;普通列表和会话数据库只保存引用。 |
| 应用日志 | Logs/stacio.log |
经过脱敏,但仍可能包含时间、错误和环境上下文。 |
| Agent Bridge | agent-bridge.sock |
仅供本机进程与 Stacio 通信,应限制本机账号访问。 |
| Remote Edit 与远端预览缓存 | Stacio 自建缓存目录 | 可能包含远端文件副本。 |
| AI 对话历史 | 本机 SQLite,按终端保留最近记录 | 可能包含问题、回复、命令卡和结果摘要。 |
在设置 > 安全 > 本地存储复制当前实际路径。不要根据文档硬编码路径处理用户数据。
2.2 本地凭据库
当前 Stacio 连接凭据由本地加密凭据库保存,不在设置页展示 secret 原文。使用规则:
- 会话数据库只保存凭据 ID和账号引用;
- 列表只显示类型、标签和账户,不显示 secret;
- 删除会话不会自动删除凭据,避免误删共享凭据;
- 删除“凭据引用”前,应确认没有其他会话使用;
- 迁移、备份或恢复应用支持目录时,要把凭据库和会话数据库视为一个受保护数据集;
- 丢失凭据库密钥或文件损坏时,可能需要重新保存凭据。
“Stacio 本地凭据库”不等同于远端密钥托管系统。组织仍应实施凭据轮换、最小权限、离职回收和紧急吊销。
2.3 私钥
Stacio 保存私钥路径,认证时从本地文件读取私钥正文。治理要求:
- 私钥文件权限仅允许授权用户读取;
- 不把私钥复制到项目仓库、会话导出、日志或反馈;
- 私钥口令保存在凭据库,不写入连接脚本;
- 设备丢失、账号离职或疑似泄漏时立即吊销对应公钥并轮换。
3. SSH 主机身份
Stacio 在认证前探测并验证 SSH 主机密钥。首次连接必须由用户确认;已保存指纹变化时默认阻断。
3.1 地址与端口也是身份边界
Stacio 按“配置的主机字符串 + 端口”保存 SSH 主机信任。常见 IP 连接应明确记录完整端点,例如:
192.168.1.20:22
192.168.1.20:2222
server.example.com:22这三项是独立的连接身份:同一 IP 的不同端口可能经过不同 NAT 规则或到达不同 SSH 服务;同一服务器通过 IP 与域名连接,也会产生分别的信任确认。不要复制一个端点的信任结果来跳过另一个端点的指纹核对。
直接使用 IP 可以减少 DNS 依赖,但不能消除地址复用、NAT 变更或中间人风险;使用域名便于地址迁移,但需要同时治理 DNS。无论采用哪种方式,都以独立可信渠道提供的主机指纹为判断依据。
3.2 信任流程
- 从云控制台、CMDB、资产管理员或独立可信通道获取预期指纹。
- 核对主机、端口、算法和 SHA-256 指纹。
- 只有确认目标真实后才接受。
- 把首次信任纳入资产上线或会话交付记录。
3.3 指纹变化治理
把指纹变化按安全事件处理,直到证明是授权变更:
- 暂停连接和自动化;
- 检查 DNS、IP、VPN、ProxyJump 和资产重装记录;
- 通过独立渠道核对新指纹;
- 记录旧/新指纹摘要、变更单、确认人和时间;
- 确认后再更新信任,不提供“先连上再说”的静默路径。
ProxyJump 会分别验证跳板机和目标主机,不得只核对其中一端。
4. 协议与网络治理
4.1 协议选择
| 协议 | 建议 |
|---|---|
| SSH/SFTP/SCP | 默认首选,仍需主机密钥、强认证和最小权限。 |
| FTP/Telnet | 明文协议,仅限隔离且可信网络;应制定淘汰计划。 |
| VNC | 根据服务端安全能力决定是否通过 SSH 隧道保护。 |
| 串口 | 物理访问同样可能获得高权限,应控制设备、线缆和现场访问。 |
4.2 隧道监听
- Local 和 Dynamic 隧道默认绑定
127.0.0.1; - 绑定
0.0.0.0、::或局域网地址会扩大暴露面; - Dynamic 隧道是 SOCKS5 代理,非本机监听可能成为局域网代理入口;
- Remote 隧道可能把本机或内网服务暴露到 SSH 服务端一侧;
- 启动前记录用途、监听地址、端口、目标、责任人和关闭时间;
- 不再需要时立即停止,退出 Stacio 前检查运行中隧道提示。
5. 命令风险与审批
5.1 风险分类
Stacio 对 AI/Agent 命令使用四类风险:
| 风险 | 示例 | 默认治理建议 |
|---|---|---|
| 只读 | 查看进程、状态、日志、配置 | 开发环境可自动;生产环境仍要确认目标和范围。 |
| 写入 | 修改文件或普通状态 | 必须确认,变更前备份。 |
| 网络 | 发起网络请求、复制、连接操作 | 检查目标、数据去向和授权。 |
| 危险 | 删除、格式化、关机、重启或明显破坏性操作 | 逐条人工批准,并准备恢复。 |
风险分类用于减少误操作,不保证任何命令绝对无副作用。只读命令也可能产生负载、读取敏感数据或触发远端工具行为。
5.2 全局策略
设置 > AI 与执行和设置 > 安全提供命令确认策略:
全部自动;低风险自动;只读自动;每次确认。
推荐:
- 个人开发环境:只读自动或低风险自动;
- 共享测试环境:只读自动;
- 生产环境:每次确认。
“全部自动”不适合作为生产默认值。
5.3 会话覆盖
会话可进一步设置:
禁止执行;仅命令卡片;只读自动;每条确认;跟随全局。
优先级原则:拒绝规则、生产环境和更严格的会话策略可以覆盖普通全局放行。会话策略只应收紧权限,不应被当作绕过组织审批的手段。
5.4 允许和禁止模式
自动放行模式与禁止模式按命令开头、大小写不敏感匹配,并会跳过常见 sudo、env 等包装器。治理要求:
- 禁止模式优先;
- 模式应尽量具体,例如完整的只读子命令;
- 不使用过宽前缀放行整类 shell、解释器或包管理器;
- 修改规则后在开发会话验证,再应用生产;
- 定期审查不再使用的模式。
6. MultiExec 治理
MultiExec 会把输入同步到多个终端,属于高影响能力:
- 使用前确认完整目标列表和每个目标的环境。
- 至少选择两个可执行终端才进入多执行工作区。
- 任一生产目标都会要求显式确认。
- 广播期间界面保持明显状态,可单独暂停某个终端。
- 广播事件记录目标数、成功数、失败数和脱敏后的输入。
- 任务结果必须按目标报告,不能用“已发送”替代“每台均成功”。
禁止通过错误标记环境、复制生产会话为开发环境或修改本地记录绕过生产确认。
7. AI 与 Agent 治理
7.1 终端上下文
AI 请求可附带当前终端标题、目录和最近输出。发送前考虑:
- 输出是否包含客户数据、密钥、数据库结果或内部地址;
- 模型供应商、Base URL 和数据处理政策;
- 上下文字符上限是否超出任务所需;
- 是否可以关闭“附带最近终端输出”并只提供必要摘要。
API Key 只写入 Stacio 本地凭据库。导出 AI 配置或诊断时不应包含 API Key。
7.2 排查助手与本地 Agent 的差异
- 排查助手的备份、验证、回滚和结果检查可由 Stacio 编排器执行代码级门禁;
- 本地 Agent 是独立 CLI,Stacio 能控制其通过 Agent Bridge 发出的远程命令、审批和审计;
- Stacio 不能保证第三方 Agent 的所有本地操作都经过同一状态机;
AGENTS.md、CLAUDE.md、QWEN.md等操作契约是指导约束,不是 OS 级强制沙箱。
因此,本地 Agent 工作区不应拥有超出任务需要的本机文件权限或远端账号权限。
7.3 备份与验证门槛
对配置、部署、数据库或远端文件的变更:
- 每次变更新建备份,不复用上次变更的备份证明。
- 验证备份路径存在且内容可恢复。
- 变更后运行与目标对应的专项验证。
- 验证失败立即停止继续变更。
- 经批准后回滚,并再次验证恢复状态。
- 最终报告包含备份位置、验证结果、回滚方法和残余风险。
8. 文件与数据治理
8.1 远端文件操作
- 下载目标由本地用户选择,避免不可信远端路径控制本地位置;
- 删除、覆盖、重命名和 chmod 前核对完整路径;
- Remote Edit 保存前检查远端文件是否已被他人修改;
- 重要文件使用 Files 的备份功能或平台原生备份,不能只依赖编辑缓存;
- 外部编辑器产生的本地副本可能包含业务数据,应按数据分级保护。
8.2 传输冲突
推荐默认使用“每次询问”。自动覆盖适合受控构建产物,不适合配置、数据库文件、客户数据或多人共同编辑的目录。
8.3 缓存清理
设置 > 文件 > 缓存维护只清除 Stacio 自建的 Remote Edit 和临时远端文件缓存,不删除会话数据库、凭据、下载目录或用户真实文件。若存在未保存编辑,清理会明确警告其将丢失。
9. 日志、审计与诊断
9.1 记录范围
Stacio 本地审计用于回答:
- 哪类发起者执行了操作;
- 目标会话或运行时是什么;
- 风险级别和审批结果是什么;
- 执行是否开始、完成、失败或取消;
- MultiExec 有多少目标发送成功或失败。
审计内容会脱敏,不以保存 secret 或完整业务日志为目的。
9.2 诊断导出
在设置 > 安全配置:
- 审计导出条数;
- 应用日志导出行数;
- 诊断包是否包含应用日志。
在视图 > 诊断导出前进行人工预览。自动脱敏只能降低风险,不能保证所有业务敏感信息都被识别。
9.3 反馈
帮助 > 反馈会显示拟发送的清洗后诊断信息,并要求用户同意。提交前仍要检查标题、描述和预览,不粘贴终端原文、文件内容、环境变量或凭据。
10. 数据保留与删除
建议团队定义明确期限:
| 数据 | 建议策略 |
|---|---|
| 保存会话 | 每季度审查无主、过期和重复资产。 |
| 凭据引用 | 与账号轮换和人员变更同步审查。 |
| AI 对话历史 | 在设置中按需清除;默认本地保留最近记录。 |
| 命令历史与宏 | 不记录 secret;定期删除过期操作。 |
| 传输历史 | 按项目和数据分级保留。 |
| Remote Edit 缓存 | 工作完成并确认同步后清理。 |
| 诊断包 | 问题关闭后按组织规定销毁或归档。 |
删除会话、清理缓存、删除凭据引用和清除 AI 历史是不同动作,不应相互假设。
11. License 治理
License 状态控制 MultiExec、AI Agent、堡垒机、SSH 隧道、设备看板、文件同步、ProxyJump 和批量会话导入/导出等高级能力。
- 使用
帮助 > License查看状态、版本、到期和宽限; - 有效授权持久化后可在离线状态继续使用,直到授权状态或有效期不再允许;
- 离线授权文件必须验证签名、设备和身份;
- 客户端只保存公开验签材料,后台签名私钥不得进入客户端、Git、日志或安装包;
- License 不是远端权限,也不是组织变更批准。
12. 安全事件响应
12.1 凭据疑似泄漏
- 停止使用相关会话、Agent 和隧道。
- 在远端或身份系统吊销密码、Token、密钥或证书。
- 检查审计、登录日志和异常来源。
- 保存必要证据后清理本机凭据引用和缓存。
- 创建新凭据并最小化权限。
- 验证旧凭据不能再使用。
12.2 设备丢失或本机被入侵
- 远程锁定或擦除设备(如组织能力允许)。
- 吊销所有可能保存在该 Mac 上的远端凭据。
- 检查 SSH 公钥、API Key、Token、堡垒机和 License 会话。
- 审查远端登录和变更记录。
- 不把本地加密凭据库视为无需吊销的理由。
12.3 主机密钥异常
立即停止连接,按本指南第 3 节进行独立核验。若无法证明是授权轮换,升级给安全和资产负责人。
12.4 可疑 Agent 或 MultiExec 操作
- 暂停或取消任务。
- 停止相关隧道和继续广播。
- 保存脱敏后的请求 ID、目标、审批和执行状态。
- 检查远端是否发生实际变更。
- 使用已验证备份恢复,并运行专项验证。
- 收紧会话策略、全局审批和允许模式。
13. 团队治理基线
- 每个生产会话都有责任人、环境、用途和最小权限账号;
- 每个跳板、隧道和自动化都有明确范围与关闭条件;
- 主机指纹首次信任和轮换有独立验证记录;
- 生产 MultiExec 和 Agent 变更逐条确认;
- 重要配置变更先备份、后验证、失败可回滚;
- 凭据、会话、缓存、日志和诊断包有保留与销毁周期;
- 每季度审查 License、凭据引用、自动放行模式和废弃会话;
- 团队明确哪些控制由 Stacio 代码强制,哪些依赖本地 Agent 遵循操作契约。
更底层的威胁与控制设计见安全威胁模型,Agent 专项说明见Agent 能力与安全保障。
