Smail/docs/超级管理员重置与邮箱验证码测试矩阵.md
smail dd04bdb49e
Some checks are pending
Security Checks / security (push) Waiting to run
完成安全整改、配置重构与邮件认证优化
2026-08-28 14:33:13 +08:00

77 lines
5.8 KiB
Markdown
Raw 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.

# 超级管理员重置与邮箱验证码测试矩阵
> 文档编号:AD-005
>
> 编写日期:2026-08-27
>
> 适用范围:`smail-admin` 本机超级管理员重置、普通用户和管理员密码恢复、登录二次验证、外部安全邮箱验证码、离线恢复码、WebAuthn、审计和限流。
>
> 本矩阵区分“本机自动化通过”和“真实环境待验证”。没有真实 Ubuntu、Windows 服务、SMTP Relay、MySQL 或 PostgreSQL 证据时,不把对应项目标记为最终验收通过。
## 1. 状态定义
| 标记 | 含义 |
|---|---|
| 自动化通过 | 当前 Windows 开发环境可以重复执行并通过 |
| 待真实环境 | 需要真实平台、服务、网络或外部依赖,不能用单元测试替代 |
| 阻塞 | 关键安全边界尚未得到完整证据,发布前必须关闭 |
## 2. 需求到测试映射
| 需求范围 | 测试或审计入口 | 当前结果 | 仍需补充 |
|---|---|---|---|
| AD-001~AD-004 | `server/cmd/smail-admin/main_test.go`、`services/adminreset/*_test.go`、安全威胁模型 | 自动化通过 | Ubuntu、Windows 交互实机审计 |
| AD-005 | 本文件、配置系统测试基线、CI 安全工作流 | 自动化通过 | 将本矩阵接入发布检查 |
| AD-006~AD-008 | 管理程序命令、危险参数、受信进程和密码代理测试 | 自动化通过 | 真实 systemd 和 Windows 令牌 |
| AD-009、AD-010 | `deploy/systemd/*`、安装脚本和平台适配测试 | 部分通过 | Ubuntu 22.04/24.04、Windows Service 和 ACL |
| AD-011、AD-015 | 版本、原子升级、配置权限和文件权限测试 | 部分通过 | 两个 Ubuntu 版本和 Windows 安装升级 |
| AD-012~AD-021 | `services/adminreset` 协议、Unix Socket、Named Pipe 和重置事务测试 | 自动化通过 | 跨平台实机 IPC 抢占、权限篡改和端口扫描 |
| AD-022~AD-031 | `services/recovery`、`credentials`、`webauthn` 和安全凭据测试 | 自动化通过 | 真实浏览器 WebAuthn 和故障注入 |
| AD-032~AD-038 | `services/verification`、外部邮箱和投递测试 | 自动化通过 | 真实 SMTP Relay、退信和证书校验 |
| AD-039~AD-047 | 登录二次验证、恢复状态机、重发和失效测试 | 自动化通过 | 真实浏览器端到端和多实例 |
| AD-048~AD-052 | Controller、CSRF、V1 API、Session 和统一认证测试 | 自动化通过 | 浏览器网络面板与生产代理行为 |
| AD-053~AD-059 | 外部邮箱生命周期、管理权限和恢复码提示测试 | 部分通过 | 前端页面真实操作和首次登录场景 |
| AD-060 | `go test ./... -race` 及安全回归 | 自动化通过 | 持续集成环境重复执行 |
| AD-061 | 三数据库迁移和集成测试 | SQLite 自动化通过 | 配置 MySQL/PostgreSQL DSN 后真实执行 |
| AD-062 | Unix Socket、systemd 安装和 Linux 安全测试 | 未验证 | Ubuntu 22.04 与 24.04 实机 |
| AD-063 | Named Pipe、Windows Service、ACL 和令牌测试 | 部分通过 | Windows 提权/非提权/服务账户实机 |
| AD-064 | 浏览器视口、恢复页面、登录二次验证和敏感信息检查 | 未完成 | 1440×900、低高度、移动视口和主流 Chromium |
| AD-065~AD-066 | 负向测试、泄露扫描、发布评审 | 未完成 | 依赖 AD-061~AD-064 的真实环境证据 |
## 3. 必须覆盖的安全负向矩阵
| 场景 | 预期结果 | 自动化入口 |
|---|---|---|
| 普通用户调用超级管理员重置 | 拒绝,不建立网络重置路径 | `services/adminreset` 授权测试 |
| HTTP 或 localhost TCP 触发超级管理员重置 | 不存在或拒绝 | HTTP 路由安全测试、部署审计 |
| 重放已消费 nonce | 拒绝 | `protocol_test.go`、传输测试 |
| 过期 nonce 或超时会话 | 拒绝 | SessionGuard 测试 |
| `--password`、密码环境变量或密码文件 | 拒绝 | 管理程序参数和密码代理测试 |
| 普通标准输入重定向 | 拒绝,不降级读取 | 密码代理平台测试 |
| 外部邮箱验证码关闭 | 不显示或不允许降级恢复 | 恢复 Controller 测试 |
| 错误验证码重复尝试 | 计数并限流 | verification service/store 测试 |
| 并发消费同一验证码或恢复码 | 只允许一次成功 | 并发测试和数据库事务测试 |
| 验证码跨账号、用途、资源或浏览器上下文复用 | 拒绝 | verification 绑定测试 |
| 超级管理员通过普通 Web 忘记密码 | 拒绝并引导本机通道 | reset entry 测试 |
| 重置后旧 Session、WebAuthn、恢复码和票据 | 全部失效 | credentials/recovery/webauthn 测试 |
| 审计、日志、响应、备份和浏览器存储出现敏感值 | 不得出现 | 敏感字段和泄露扫描 |
## 4. 数据库和平台执行记录
| 环境 | 命令或检查 | 当前状态 |
|---|---|---|
| Windows 开发环境 | `cd server; go test ./... -count=1` | 通过 |
| Windows 开发环境 | `cd server; go vet ./...` | 通过 |
| Windows 开发环境 | `cd fe; yarn.cmd build` | 通过 |
| SQLite | 迁移、事务、并发和恢复测试 | 通过 |
| MySQL | `SMAIL_TEST_MYSQL_DSN` 集成测试 | 未配置,未验证 |
| PostgreSQL | `SMAIL_TEST_POSTGRES_DSN` 集成测试 | 未配置,未验证 |
| Ubuntu 22.04 | systemd、Unix Socket、安装升级和端口扫描 | 未验证 |
| Ubuntu 24.04 | systemd、Unix Socket、安装升级和端口扫描 | 未验证 |
| Windows 生产服务 | Named Pipe、ACL、令牌和 Service 生命周期 | 未验证 |
| 真实 SMTP Relay | 投递、证书、失败降级和敏感信息检查 | 未验证 |
| 真实浏览器 | 恢复、登录二次验证和移动视口 | 未完成 |
## 5. 发布判定
在 MySQL、PostgreSQL、Ubuntu 22.04、Ubuntu 24.04、Windows 生产服务、真实 SMTP 和真实浏览器证据补齐前,AD-065、AD-066 以及配置系统的最终验收不得标记为复审通过。自动化测试通过只说明当前代码在隔离测试环境下满足已覆盖的行为,不代表跨平台和生产边界已经闭合。