185 lines
18 KiB
Markdown
185 lines
18 KiB
Markdown
# 部署事务人工处置设计
|
||
|
||
## 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 中不存在处置入口。
|
||
- [ ] 第一台正式包部署与第二台实机推送分别留证,构建、单测和真实验收分开记录。
|