5.0 KiB
管理员恢复事务验收记录
范围与结论
测试只在 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 已推送。
TestUnixResetCommitsPasswordAndRevokesAllProtocolCodes经SendReset、Unix Socket、ResetSuperAdmin完成重置。检查密码、安全版本、会话版本及改密状态;检查恢复码、密保、WebAuthn 和协议凭据撤销;通过实际凭据服务验证 SMTP、IMAP、POP3 旧授权码失效,普通用户的凭据仍可用。回调中重新查询数据库,确认运行态撤销回调在提交之后执行。TestResetSuperAdminRollsBackEveryRevocationStage在恢复码、密保、WebAuthn、协议凭据四个表的撤销操作上分别使用 SQLite 触发器注入失败。断言错误含injected revocation failure,避免密码校验提前失败造成假通过;检查两用户状态及有效凭据数量未变,回调未执行。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,不得将测试候选当作已部署版本。
- 在受保护隔离部署中完成正式管理命令及系统密码代理交互。
- 验证新密码登录、旧密码拒绝、浏览器旧会话退出和真实协议连接及授权码撤销。
- 完成数据库兼容、候选可回退部署及原发布清单中的其他门槛。
整体生产放行仍不通过,不因本次后端集成回归而缩减验收范围。