56 lines
5.0 KiB
Markdown
56 lines
5.0 KiB
Markdown
# 管理员恢复事务验收记录
|
||
|
||
## 范围与结论
|
||
|
||
测试只在 `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`,不得将测试候选当作已部署版本。
|
||
|
||
- [ ] 在受保护隔离部署中完成正式管理命令及系统密码代理交互。
|
||
- [ ] 验证新密码登录、旧密码拒绝、浏览器旧会话退出和真实协议连接及授权码撤销。
|
||
- [ ] 完成数据库兼容、候选可回退部署及原发布清单中的其他门槛。
|
||
|
||
整体生产放行仍不通过,不因本次后端集成回归而缩减验收范围。
|