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

5.0 KiB
Raw Permalink Blame History

管理员恢复事务验收记录

范围与结论

测试只在 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,不得将测试候选当作已部署版本。

  • 在受保护隔离部署中完成正式管理命令及系统密码代理交互。
  • 验证新密码登录、旧密码拒绝、浏览器旧会话退出和真实协议连接及授权码撤销。
  • 完成数据库兼容、候选可回退部署及原发布清单中的其他门槛。

整体生产放行仍不通过,不因本次后端集成回归而缩减验收范围。