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

185 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 部署事务人工处置设计
## 2026年10月4日00:40 实现与实机验证状态
独立重新核查已通过后端全量、竞态、静态检查和三数据库持久化验证,并随 `e00a757` 正式安装至第一台 schema25。正式菜单五及菜单四已验证一次真实提交方向收尾:新核查成功、原 uncertain 保留、原事务 committed、处置占用释放、两组审计保留完整。
随后独立完成真实人工回滚、人工提交执行中主动断开 SSH 并重新登录查询成功;三个场景各有对应事务与处置审计,不互相替代。该结果不扩展恢复权限:仍不接管 running,不重放原处置,不补造旧基线。两条无可信基线历史事务继续待处置;本批使用同一张有效证书,不同版本证书回滚仍需单独验收。
## 2026年10月3日23:58 独立重新核查设计已实现
原不确定处置不改写。通过受保护本机独立入口指定原处置编号,重新绑定身份、事务摘要和现场摘要,自动沿用原提交或回滚方向;普通准备入口不接受重新核查动作。
- 只接受已有完整开始、结束审计的 uncertain;不接管 running,不以等待时间代替执行者停止证据。
- 原事务必须处于对应 verified 阶段,文件符合原方向摘要,临时文件、备份和锁均不存在;严格 HTTPS 后再次核验现场,连接正常关闭才允许成功。
- 核查不执行远端写文件、重命名、删除、解锁、命令或服务重载。
- schema25 保存原处置关联;开始审计与占用交接原子提交,成功审计、原事务终态及占用释放原子提交。
- 核查拒绝或不确定时归还原占用;结束审计失败保留新 running 占用,不能自动重试或改为成功。
五包专项与竞态已通过,实库重开验证正在执行;本节说明实现边界,不代表新包已经部署或所有历史恢复问题已经解决。
## 2026年10月3日23:14 实机暴露的关闭与重新核查边界
真实人工提交已完成文件核验、备份删除、commit_verified 持久化和远端解锁,但 SSH 先主动关闭、SFTP 后关闭返回预期连接已关闭错误,导致执行器报告 uncertain。新增 Linux 真实协议回归已复现,修复限制为正常主动关闭后的 EOF 或连接已关闭,不吞掉既有断连、其他关闭错误或动作错误。重复和并发 Close 共享首次结果。
历史处置 `bc4099fd53c10ce0ae643ae2a89c2597fa48ed7ea6d6661fe4126f7f310b7007` 保持 uncertain,其占用继续阻止同服务器部署。不能因为修复了代码、当前站点正常或历史阶段为 commit_verified 就直接改写该处置、原事务或删除占用。
- [ ] 后续需要独立、明确授权的重新核查收尾流程,保留原不确定结果,并重新核验身份、历史证据、全量文件、临时文件、备份、锁与严格 HTTPS 后记录新审计。
- [ ] 该流程不能把超时视作执行者已停止,不能自动重放原动作或静默选择相反动作;同样需要并发、重启和审计失败验证。
本节记录新发现的缺口,不代表该收尾能力已经实现;已有三动作的成功实机验收仍未通过。
## 2026年10月3日22:44 无可信基线的实机拒绝
正式本机终端对有事务记录但 `previous_fingerprint` 为空的真实失败事务执行恢复基线请求,持久处置结果为 rejected。确认动作没有放宽执行器前置要求,目标文件和锁没有因该请求被变更,原事务仍为 recovery_required。
该场景验证的是拒绝边界,不是成功恢复。不得把后来导入的另一个域名、当前新证书或人工设置的指纹当作原事务的可信历史基线。成功提交、回滚和执行中断连场景继续待验。
## 2026年10月3日22:32 实机设计验证边界
- [✓] 第一台正式候选包迁移至 24,实际本机终端对真实失败事务完成准备、完整确认、仅记录执行和新终端查询,未使用测试夹具替代远端采样。
- [✓] 仅记录结果没有将原事务改为成功或回滚;仍保留三个归属匹配的锁,与只记录审计的设计一致。
- [!] 真实第二域名推送在 HTTPS 证书域名校验失败后报告恢复未确认,没有因文件已恢复而提前宣布服务恢复,未放宽证书验证。
- [ ] 提交与恢复基线的实际远端动作、执行中断连查询和历史无证据处置仍需直接证据;此处普通新终端查询不代表强制断连场景已通过。
处置编号及真实任务详见《Linux生产流程测试记录》22:32 节。未手动修改历史事务或删除锁。
## 2026年10月3日22:03 回归完成与发行边界
- [✓] 新增实库测试后的 SQLite 竞态、静态检查和后端全量均通过;同组 PostgreSQL/MySQL 专项通过,任务已正常结束。
- [~] 发行说明同步当前本机交互设计:不提供 HTTP/TCP 恢复入口、不使用验证码文件,断连只能按处置编号查询,禁止重放或手动删锁。
- [ ] 正式 Linux 包、真实终端及双机文件和 HTTPS 验证仍属于待完成门禁。
## 2026年10月3日21:48 外部持久化证据
- [✓] 本机接入五项回归已全部通过,包括 HTTP 全包竞态。
- [✓] 真实 PostgreSQL 14.24 和 MySQL 5.7.44 的产品执行器通过三动作、开始与结束审计故障、重开查询/占用和并发幂等;远端文件仍为测试实现。
- [✓] PostgreSQL 新迁移 22—24 在事务 DDL 执行后回滚,再次迁移可达到连续版本 24,并可重复迁移。
- [x] PostgreSQL 仅回环且 verify-full,临时集群随机凭据,业务连接不是超级用户;测试不接受现有实例连接串,不清理业务数据库。
- [ ] 正式安装包与真实 SSH 文件及 HTTPS 站点闭环仍需直接验证。
## 2026年10月3日21:32 本机接入实现
- [x] 准备确认对象仅留在服务端会话,终端只取得短期令牌和脱敏摘要;执行先清空确认,所有失败尝试均不能再次使用。
- [x] 请求动作字段互斥;准备、结果与只读分片不可混合。旧服务未广告能力时客户端拒绝执行类请求。
- [x] 终端要求完整确认事务与动作,不显示令牌。执行断连不等于未执行;新连接只能按处置编号查询持久状态,不自动重新准备或执行。
- [✓] 三包和本机 HTTP 专项竞态、真实 Unix socket 失去响应/跨会话测试、静态检查与普通全量通过。
- [~] HTTP 全包竞态尚未结束;外部实库和正式产品入口验证仍是独立门禁。
## 2026年10月3日21:00 本机接入边界
- [✓] 最新底层执行器完整 Linux 回归已通过。
- [~] 准备对象只保留在本机会话,终端只能取得令牌、处置编号和脱敏摘要;执行使用会话对象及对端身份,不能接受客户端自建意图或身份。
- [ ] 三类动作必须明确展示风险并确认;响应丢失只能按处置编号查询,不自动重放。协议、终端和正式包尚待验证。
## 2026年10月3日20:52 确认和执行器实现边界
- [x] 确认对象持有不可公开的准备绑定、令牌摘要和持久请求标识,副本共享原子消费状态;随机令牌不入库。有效期沿用一分钟,失败确认亦消费,不能重放。
- [x] 确认消费后等待共同操作门;持久化开始和占用成功后才重新核查。已有幂等记录只返回结果,不再次连接;准备变化只结束为拒绝,可能发生写入的失败结束为不确定并保留占用。
- [x] 提交必须重新验证新证书,回滚必须具有旧站点基线并重载、验证旧证书;历史已核验阶段也不能跳过本次验证。不使用按阶段自动选择方向的恢复入口,提交与回滚不互相回退。
- [x] 连接关闭和独立有界结束审计均在共同操作门内;审计失败不能返回成功。结果查询输出明确的处置标识、事务、服务器、动作、状态和时间,不输出请求键、绑定摘要或确认令牌。
- [x] 对全部目标推导临时路径,拒绝历史列表缺项掩盖的未知文件;回滚后再次核对基线和残留,避免解锁未知现场。
- [✓] 基础部署竞态、SQLite 三动作原子结束和两类审计失败/数据库重开通过;静态检查、后端全量通过一轮。
- [~] 最新安全查询和未知临时文件补充正在回归。本机协议/终端、PostgreSQL 等实库及正式生产门禁仍待完成,不开放半成品写入口。
## 2026年10月3日20:17 互斥接入状态
- [x] `Service` 的共同操作门覆盖普通部署、站点核验、异常回滚、提交收尾及自动恢复;等待可取消,异常退出先收尾再释放。
- [x] 自动恢复在解析服务器之前查询持久化占用;失败关闭且不改原事务。普通部署在连接之前检查同服务器及同地址端口别名占用。
- [x] 竞态、静态检查及数据库重开集成专项通过,最新全量运行中。
- [ ] 人工执行器必须加入同一操作门,消费一次性确认后建立持久化意图、重新核验准备绑定,并按动作执行真实文件/锁/严格 HTTPS 核验;失败不静默切换动作。
- [ ] 本机协议、终端、动作级不确定结果与重启矩阵、PostgreSQL 实库及正式生产门禁仍未闭环。
## 2026年10月3日20:04 实现与待接入边界
- [x] 持久化 MySQL 迁移十二场景、仓储三动作及审计失败回滚六场景通过。
- [~] 下一步把普通部署、HTTPS 核验、异常收尾和自动恢复纳入可取消的进程内互斥;人工执行器必须复用同一互斥。
- [~] 自动恢复遇到持久化占用或占用查询失败时不连接远端、不更新原事务,保留人工处置绑定及现场。
- [ ] 进程内互斥不替代数据库占用和远端文件锁;一次性确认、动作专属核验、协议接入及多进程/重启验证仍需完成。
## 2026年10月3日19:43 持久化基础实现状态
- [x] 准备与重新核验基础已通过原生 Linux 竞态;HTTP 全包竞态与完整静态检查通过,准备对象仍不代表执行授权。
- [x] 新增迁移 22—24:独立处置记录、事务唯一占用、开始/结束事件。每版仅一个表,兼容现有 MySQL DDL 中断后结构校验机制,不影响迁移 15 的专用回填。
- [x] 开始操作在同一事务内保存请求绑定、占用和开始事件,并核对原事务摘要。相同请求返回原记录且不重新授权;同一幂等键不同绑定拒绝。
- [x] 结束操作在同一事务内保存处置结果、必要的原事务终态和结束事件;任一步失败整体回滚。只读核查不改原事务;不确定结果保留占用;仅允许已核验阶段写入对应提交/回滚终态。
- [x] 第一轮仓储、数据库、部署三包竞态及完整静态检查通过;故障注入覆盖开始写入、结束结果、原事务、审计及占用释放。
- [~] 数据库关闭重开、准备摘要转换、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 中不存在处置入口。
- [ ] 第一台正式包部署与第二台实机推送分别留证,构建、单测和真实验收分开记录。