Smail/docs/管理员恢复事务验收记录.md
smail a725aac6a7
Some checks are pending
Security Checks / security (push) Waiting to run
补齐管理员恢复验收证据并严格校验反代跳转
2026-09-18 03:03:46 +08:00

56 lines
5.0 KiB
Markdown
Raw Permalink 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.

# 管理员恢复事务验收记录
## 范围与结论
测试只在 `47.108.78.12`、主机 `ikun2` 执行。本机仅做源码复审、交叉编译、Git 和文件传输,不运行测试。远程日期为 2026 年 9 月 18 日,时区为 Asia/Shanghai。
- [✓] 恢复服务 24 项、协议凭据服务 8 项顶层用例通过,零失败、零跳过;恢复服务包含四个撤销故障子用例。
- [✓] 真实 Unix Socket 请求完成真实 SQLite 事务,新密码可用、旧密码失效,管理员恢复及三协议凭据撤销,普通用户不受影响。
- [✓] 四个撤销阶段分别注入失败,要求命中指定错误并回滚密码、安全状态及凭据;多个超级管理员时安全拒绝。
- [✓] 测试单元最终退出成功;终态、持久日志、产物摘要和线上服务状态已核对。
- [!] 不等同于正式 `smail-admin` 密码代理交互验收,也没有验证浏览器旧会话、已建立邮件连接的运行态撤销或 MySQL 兼容性。
测试使用临时空 SQLite 数据库,不清理线上双库或其他项目数据;IPC 夹具仅信任测试进程 UID,不改变生产通道只允许 root 的权限要求。没有更改线上应用、证书、管理命令或续期任务,没有暂停共享服务。
## 新增覆盖
文件为 `backend/services/adminreset/reset_integration_linux_test.go`,中文基线提交 `4c9490c` 已推送。
1. `TestUnixResetCommitsPasswordAndRevokesAllProtocolCodes` 经 `SendReset`、Unix Socket、`ResetSuperAdmin` 完成重置。检查密码、安全版本、会话版本及改密状态;检查恢复码、密保、WebAuthn 和协议凭据撤销;通过实际凭据服务验证 SMTP、IMAP、POP3 旧授权码失效,普通用户的凭据仍可用。回调中重新查询数据库,确认运行态撤销回调在提交之后执行。
2. `TestResetSuperAdminRollsBackEveryRevocationStage` 在恢复码、密保、WebAuthn、协议凭据四个表的撤销操作上分别使用 SQLite 触发器注入失败。断言错误含 `injected revocation failure`,避免密码校验提前失败造成假通过;检查两用户状态及有效凭据数量未变,回调未执行。
3. `TestResetSuperAdminRejectsAmbiguousTargetWithoutChanges` 在存在两个超级管理员时要求返回明确歧义错误,不改变用户或凭据,不执行回调。
## 运行证据
最终目录为 `/var/tmp/smail-review-adminreset-final-20260918`,结果为 `results-20260918-024726/results.json`,每包完整日志在同目录。
| 测试包 | 通过 | 失败 | 跳过 | 用时 |
| --- | --- | --- | --- | --- |
| adminreset | 24 | 0 | 0 | 35.21 秒 |
| credentials | 8 | 0 | 0 | 55.62 秒 |
`smail-tests-20260918-024726.service` 于 02:47:26 启动、02:48:57 正常退出,退出码 0。墙钟时间 91.082 秒、CPU 时间 22.788 秒、峰值内存 78.1 MiB、交换空间为零。执行采用逐顶层用例独立进程、非 root、独立网络、192 MiB 内存硬上限,禁止访问线上目录。收尾确认 `inactive/dead`、`MainPID=0`;不能把此前运行中的 `Result=success` 当作终态。
本机及远程实际二进制 SHA-256 一致:
- adminreset:`df7b1ced593bbc49af82dbaa2eef6e165a312aa306f0ec8e26c72961e5291036`。
- credentials:`b6a79a99e0ae97a79850b762c3e4cc4e5fe3e4235ee31d0a987d8b3664ad1805`。
## 失败记录
首次 `smail-tests-20260918-024358` 因归档中的测试程序没有可执行权限,在用例执行前失败。仅修正对应测试二进制权限,没有修改线上程序权限。
第二次目录 `/var/tmp/smail-review-adminreset-20260918/results-20260918-024417` 保留原始失败:恢复服务 22 项通过、2 项失败,协议凭据 8 项通过。新测试密码夹具超过现有长度限制;随后改成符合限制的测试密码,并通过 `HashUserPassword` 创建夹具。回滚测试同时收紧为必须命中指定注入错误,避免将无关错误计作事务回滚成功。最终结果不能覆盖或隐藏这些失败记录。
## 线上收尾及下一门槛
02:56 的只读核查保存在最终目录 `terminal-review.json`、`terminal-transport.json`。双库完整性为 `ok`,管理 socket 权限 0600,未认证接口拒绝访问,无新增 OOM。四个线上服务保持运行,Smail PID 574584、Nginx PID 578671、Scert PID 589832、MySQL PID 589785,InvocationID 与前序记录一致。
七个 TLS/STARTTLS 入口通过系统信任和同证书检查。旧传输检查仍将内部 8001 跳向 8002 的情况记录为通过,该结论仅能支持原检查覆盖范围;随后的严格验收已将其标为失败,详见《反代跳转验收整改记录》。线上管理工具版本仍为 `review-2263779`,不得将测试候选当作已部署版本。
- [ ] 在受保护隔离部署中完成正式管理命令及系统密码代理交互。
- [ ] 验证新密码登录、旧密码拒绝、浏览器旧会话退出和真实协议连接及授权码撤销。
- [ ] 完成数据库兼容、候选可回退部署及原发布清单中的其他门槛。
整体生产放行仍不通过,不因本次后端集成回归而缩减验收范围。