Scert/doc/部署事务人工处置设计.md

13 KiB
Raw Blame History

部署事务人工处置设计

2026年10月3日21:32 本机接入实现

  • 准备确认对象仅留在服务端会话,终端只取得短期令牌和脱敏摘要;执行先清空确认,所有失败尝试均不能再次使用。
  • 请求动作字段互斥;准备、结果与只读分片不可混合。旧服务未广告能力时客户端拒绝执行类请求。
  • 终端要求完整确认事务与动作,不显示令牌。执行断连不等于未执行;新连接只能按处置编号查询持久状态,不自动重新准备或执行。
  • [✓] 三包和本机 HTTP 专项竞态、真实 Unix socket 失去响应/跨会话测试、静态检查与普通全量通过。
  • [~] HTTP 全包竞态尚未结束;外部实库和正式产品入口验证仍是独立门禁。

2026年10月3日21:00 本机接入边界

  • [✓] 最新底层执行器完整 Linux 回归已通过。
  • [~] 准备对象只保留在本机会话,终端只能取得令牌、处置编号和脱敏摘要;执行使用会话对象及对端身份,不能接受客户端自建意图或身份。
  • 三类动作必须明确展示风险并确认;响应丢失只能按处置编号查询,不自动重放。协议、终端和正式包尚待验证。

2026年10月3日20:52 确认和执行器实现边界

  • 确认对象持有不可公开的准备绑定、令牌摘要和持久请求标识,副本共享原子消费状态;随机令牌不入库。有效期沿用一分钟,失败确认亦消费,不能重放。
  • 确认消费后等待共同操作门;持久化开始和占用成功后才重新核查。已有幂等记录只返回结果,不再次连接;准备变化只结束为拒绝,可能发生写入的失败结束为不确定并保留占用。
  • 提交必须重新验证新证书,回滚必须具有旧站点基线并重载、验证旧证书;历史已核验阶段也不能跳过本次验证。不使用按阶段自动选择方向的恢复入口,提交与回滚不互相回退。
  • 连接关闭和独立有界结束审计均在共同操作门内;审计失败不能返回成功。结果查询输出明确的处置标识、事务、服务器、动作、状态和时间,不输出请求键、绑定摘要或确认令牌。
  • 对全部目标推导临时路径,拒绝历史列表缺项掩盖的未知文件;回滚后再次核对基线和残留,避免解锁未知现场。
  • [✓] 基础部署竞态、SQLite 三动作原子结束和两类审计失败/数据库重开通过;静态检查、后端全量通过一轮。
  • [~] 最新安全查询和未知临时文件补充正在回归。本机协议/终端、PostgreSQL 等实库及正式生产门禁仍待完成,不开放半成品写入口。

2026年10月3日20:17 互斥接入状态

  • Service 的共同操作门覆盖普通部署、站点核验、异常回滚、提交收尾及自动恢复;等待可取消,异常退出先收尾再释放。
  • 自动恢复在解析服务器之前查询持久化占用;失败关闭且不改原事务。普通部署在连接之前检查同服务器及同地址端口别名占用。
  • 竞态、静态检查及数据库重开集成专项通过,最新全量运行中。
  • 人工执行器必须加入同一操作门,消费一次性确认后建立持久化意图、重新核验准备绑定,并按动作执行真实文件/锁/严格 HTTPS 核验;失败不静默切换动作。
  • 本机协议、终端、动作级不确定结果与重启矩阵、PostgreSQL 实库及正式生产门禁仍未闭环。

2026年10月3日20:04 实现与待接入边界

  • 持久化 MySQL 迁移十二场景、仓储三动作及审计失败回滚六场景通过。
  • [~] 下一步把普通部署、HTTPS 核验、异常收尾和自动恢复纳入可取消的进程内互斥;人工执行器必须复用同一互斥。
  • [~] 自动恢复遇到持久化占用或占用查询失败时不连接远端、不更新原事务,保留人工处置绑定及现场。
  • 进程内互斥不替代数据库占用和远端文件锁;一次性确认、动作专属核验、协议接入及多进程/重启验证仍需完成。

2026年10月3日19:43 持久化基础实现状态

  • 准备与重新核验基础已通过原生 Linux 竞态;HTTP 全包竞态与完整静态检查通过,准备对象仍不代表执行授权。
  • 新增迁移 22—24:独立处置记录、事务唯一占用、开始/结束事件。每版仅一个表,兼容现有 MySQL DDL 中断后结构校验机制,不影响迁移 15 的专用回填。
  • 开始操作在同一事务内保存请求绑定、占用和开始事件,并核对原事务摘要。相同请求返回原记录且不重新授权;同一幂等键不同绑定拒绝。
  • 结束操作在同一事务内保存处置结果、必要的原事务终态和结束事件;任一步失败整体回滚。只读核查不改原事务;不确定结果保留占用;仅允许已核验阶段写入对应提交/回滚终态。
  • 第一轮仓储、数据库、部署三包竞态及完整静态检查通过;故障注入覆盖开始写入、结束结果、原事务、审计及占用释放。
  • [~] 数据库关闭重开、准备摘要转换、MySQL 实库迁移和审计测试补测中。
  • 尚未接入一次性确认、本机协议和完整生命周期互斥;尚未实现动作专属执行器。这些仓储接口仅是内部持久化能力,不是用户可用的提交或回滚入口。

本轮没有替代 R3/R4 整体目标:历史阶段只是存储层防误用条件,不能单独证明本次人工处置做过远端检查。执行器必须在持久化占用和完整互斥内重新执行身份、文件、锁及严格 HTTPS 核验;不能直接利用历史已核验阶段跳过现场验证。

2026年10月3日 设计与任务拆分

本文件对应《部署事务人工核查任务清单》R3、R4,是待实现的约束和执行清单,不是已完成能力或验收结论。范围仅限 Linux:第一台部署 Scert,第二台作为证书推送目标。

已确认的安全要求

  • 入口只使用既有受保护 Unix socket,调用者身份取自操作系统对端,不接受客户端自行声明的身份。不增加 HTTP 路由或 TCP 监听。
  • 密码重置和部署处置是互斥会话;处置不能绕过密码重置的邮箱验证码。只读核查默认不执行任何命令。
  • 当前现场观察不能补造历史 Evidence;没有可信历史证据的事务只允许记录人工核查结论,不能转成历史提交成功或自动回滚。
  • 不允许删除无归属、归属不符的锁,不允许覆盖与新旧摘要均不匹配的目标文件;出现不一致即保留现场。
  • 远端文件动作不能与数据库组成原子事务。必须先持久化处置意图与审计,再执行有界动作;最终状态与完成审计原子落库。进程崩溃必须留下可识别的未完成处置,而不是假成功。

2026年10月3日19:07 准备与重新核验实现任务

修改前检查点 6b77730 已推送。当前先实现 R3-B 的只读绑定基础,不把它当作执行授权或完整处置功能。

  • [~] 绑定受信任操作者、明确动作、事务记录、服务器配置和完整现场采样;公开摘要不携带历史证据、凭据或锁归属令牌。
  • 一分钟有效期,准备及重新核验共用三十秒操作上限;取消、过期、配置变化、事务变化和现场变化均拒绝。
  • 缺可信历史证据的事务只允许准备记录核查结论,不允许准备提交或回滚,不改变历史状态或现场。
  • 完成单元及竞态验证;再接入一次性本机确认凭据、数据库处置占用和原子审计。

准备对象及重新核验结果只是执行器的前置输入,不代表已经写入处置意图、取得互斥、完成动作资格核验或获得远端写入授权;在持久化和完整执行链路接入前,不对用户开放写操作入口。

需求和任务清单

  • [~] R3-A:确定动作模型、独立审计以及失败边界。本设计已落文档,代码尚未开始。
  • R3-B:只读准备处置。固定事务标识、操作类型、服务器身份、历史记录摘要及现场摘要;生成有界、短期、一次性确认凭据,不向终端返回锁令牌、凭据或原始错误。
  • R3-C:确认时重新读取事务和服务器,重新核验全部目标、备份、临时文件和锁;任何变化使原确认失效,必须重新准备。确认界面必须展示事务、服务器、动作及风险。
  • R3-D:实现独立处置记录与结果查询。原事务、任务尝试和历史报告不因“已阅读”或“已确认”而改成成功。
  • R3-E:复用可信恢复链路执行明确的提交收尾或回滚;提交和回滚不能在失败后静默互换。完成后用真实严格 HTTPS 验证相应证书基线。
  • R4-A:数据库持久化处置占用,建立事务级唯一活动处置与幂等请求约束;配合进程内互斥覆盖普通部署、部署后 HTTPS 校验、事务收尾及自动恢复的完整生命周期。
  • R4-B:原子写入处置意图和开始审计;原子写入处置结果、允许的原事务终态及完成审计。任一写入失败均不得报告成功。
  • R4-C:覆盖重复确认、响应丢失、并发确认、不同动作复用幂等键、取消、超时、进程重启和审计失败。
  • R4-D:三数据库迁移和升级边界验证;MySQL 需包含 DDL 中断后重试与结构冲突拒绝,不能只验证全新 SQLite。
  • R5:通过原生 Linux 回归后构建正式候选包,第一台经安装器部署,在第二台执行证书推送与恢复验证。不得用测试目录或辅助脚本替代正式流程。

操作类型与允许条件

操作 必要条件 原事务变化
仅记录核查结论 身份受保护、重新采样成功、明确确认 不改变原事务终态,不清锁,不解除部署阻塞
完成提交收尾 可信历史证据、允许提交的历史阶段、目标摘要正确、完整锁归属正确、严格 HTTPS 为预期新证书 核验及审计均成功才允许提交终态
回滚到历史基线 可信历史证据、允许回滚的历史阶段、旧文件归属可验证、完整锁归属正确、可验证旧站点基线 还原及严格 HTTPS 核验成功后才允许回滚终态

缺证据事务的“记录核查结论”不是解除阻塞的替代方案。若需要对这类现场重新接管,必须另行定义以当前状态为基线的新独立操作及授权边界,不能通过改写历史证据、SQL 改状态或擅自删除锁完成。

持久化与恢复边界

  1. 独立处置记录至少保存处置标识、原事务标识、受信任操作者、动作、请求摘要、前置采样摘要、状态、创建及完成时间。只存脱敏结构化摘要,不存私钥、密码、SSH 凭据、确认凭据原文或锁令牌。
  2. 重复请求只返回同一处置的现有结果,不重复执行远端动作;同一幂等键和不同请求必须冲突拒绝。
  3. 未完成处置不依赖进程内存判定终态;重启后仍阻止无确认重放。启动自动恢复必须识别持久化占用,避免同一历史锁令牌被两条恢复路径同时使用。
  4. 仅凭处置占用超时不能认定远端动作已停止,不自动释放占用或另起一份动作。重新接管需查询并再次核验远端现场。
  5. 当前恢复实现中的提交已核验、回滚已核验阶段可作为清理重入依据,但人工处置必须另有完整开始和结束审计,不能把旧历史阶段直接认成人工处置已执行成功。
  6. 正常部署互斥必须覆盖 DeployVerified 的文件推送、HTTPS 核验与最终清理,不能只锁住 deployOne 后提前释放。

验证矩阵

  • 无历史证据、服务器指纹变化、命令变化、路径变化:拒绝写操作,原现场不变。
  • 外来锁、无归属锁、符号链接锁、超大归属文件、未知临时文件、旧备份摘要不符:拒绝并保留现场。
  • 准备后文件、服务器、事务阶段或管理员身份变化:旧确认失效,不执行部分动作。
  • 提交与回滚各自正向;HTTPS 不匹配、重载失败及中途断连负向;不得关闭 TLS 校验。
  • 并发部署与确认、两次确认、重启时遗留占用:不能产生第二个修改现场的执行者。
  • 开始审计失败、完成审计失败、终态保存失败:不假成功、不重放、不清理无法证明安全的现场。
  • 本机协议混合载荷、重放、过期、身份不符及断开连接;公开 HTTP 中不存在处置入口。
  • 第一台正式包部署与第二台实机推送分别留证,构建、单测和真实验收分开记录。