Smail/docs/密码恢复实机验收.md
smail 8288fcd105
Some checks are pending
Security Checks / security (push) Waiting to run
记录管理员登录恢复与公网密码恢复入口修复验收
2026-09-18 16:47:22 +08:00

5.1 KiB
Raw Blame History

密码恢复实机验收

本轮需求

  • [~] 管理员、普通用户通过已验证外部邮箱及离线安全凭据恢复密码。
  • [~] 超级管理员登录后通过外部安全邮箱验证码修改密码。
  • [~] 超级管理员通过部署端受保护本机通道重置密码。
  • 管理员、普通用户的一次性恢复页面复用现有 Web 域名和 HTTPS 证书,固定入口为 https://Web域名/rest/。

当前实现边界

  • 普通用户邮箱恢复通过后可以设置新密码。
  • 管理员邮箱恢复通过后仍需要未使用的离线恢复码。
  • 离线恢复需要密保问题、密保答案和离线恢复码,不是只填写一个安全码。
  • 超级管理员不能通过公开忘记密码接口恢复。登录后安全中心使用已验证外部邮箱验证码改密。
  • 公开恢复邮件由 no-reply@主邮件域名 发送,邮件中的一次性链接使用 Web 域名,不再配置独立恢复域名或额外证书。
  • 旧 adminRecovery 配置仅保留兼容读取,不在配置页面展示,也不参与恢复路由和证书域名计算。
  • 改密成功会使旧会话和相关恢复、客户端凭据失效;测试后需要重新配置下一轮所需凭据。

Linux 本机通道部署整改

  • 部署根目录为 /opt/smail,配置、证书、数据和日志保持原位置。
  • 主服务使用 smail 系统账户,低端口仅通过 CAP_NET_BIND_SERVICE 授权。
  • smail-admin 使用 root 和系统服务上下文,仅通过 /run/smail/admin-control.sock 通信。
  • 恢复服务不允许开机自动运行,且只允许向本机密码代理临时目录写入交互请求。
  • 安装前拒绝覆盖运行中程序,旧程序和服务文件备份到 /var/backups,不覆盖业务配置、数据库或证书。

部署人员在可信终端执行 systemctl start smail-admin,并按密码代理提示无回显输入两次新密码;如终端没有收到提示,可在另一个可信终端执行 systemd-tty-ask-password-agent --query。不得把密码放到命令行、环境变量或日志里。

验收说明

Web 功能使用 MCP 模拟键鼠测试;终端用于源码检查、构建、部署、授权范围内的数据备份清理以及本机重置工具本身的交互,不调用业务 API 代替页面验收。2026 年 9 月 16 日用户已授权清理测试数据,本轮限定在 yunx-test,先备份所有测试数据库再清空,保留数据库文件并重新执行初始化。不得将此授权扩大到其他部署环境。

具体测试结果记录到 test-log/日期/测试log;收到验证码、页面提示请求已受理、构建成功均不单独等于密码恢复闭环完成。

本轮结果见《清库部署测试记录》。

2026-09-18 正式管理员登录恢复

本次需求是诊断用户反馈的账号密码错误和后端无响应,恢复正式实例登录,并复核刷新后的会话。正式部署位于 47.108.78.12:/opt/smail,网页为 https://mail.solit.cn/。此次属于现有实例故障恢复,保留业务数据库和邮件,不执行首次安装清库流程。

  • [✓] 核对实际运行进程打开的数据库为 /opt/smail/data/smail.db。用户表只有 admin(超级管理员)和 remotecheck(普通用户),没有反馈中的 xuans。
  • [✓] 浏览器提交反馈账号时,登录请求约 293 毫秒返回 HTTP 200、业务错误 100、账号或密码错误。现有管理员使用用户提供的密码也失败。现场证据支持账号及密码不匹配,未观察到后端无响应。
  • [✓] 重置前使用 SQLite 在线备份保存至 /var/backups/smail-login-recovery-20260918-0xb3EO/smail.db,完整性检查为 ok。目录权限 0700,备份权限 0600。
  • [✓] 使用项目现有 smail-admin 服务及系统密码代理,无回显输入两次用户提供的新密码。通过受保护本机通道恢复现有超级管理员,服务结果 success、退出码 0;会话和安全版本递增至 2,旧会话及相关安全凭据按既有规则撤销。
  • [✓] 浏览器用 admin 和用户提供的密码重新登录,显示超级管理员及收件箱。最终再次登录约 393 毫秒,邮件列表约 47 毫秒;忽略缓存刷新后仍保持登录,用户信息和邮件列表均返回 HTTP 200。
  • [✓] Smail 与 Nginx 均持续 active,Smail PID 605706,自动重启次数为 0。未清库、未改用户名、未创建替代账号、未引入部署或续期脚本。

公网恢复入口修复

通过已登录管理员的配置页面,将公网 HTTPS 端口由未设置改为 443,保留 HTTP 8001、HTTPS 8002 及 direct 模式。页面执行候选配置保存和应用,应用接口业务错误码为 0,正式配置代次从 2 升至 3,磁盘配置确认 http.publicHttpsPort=443。

浏览器访问 /public-password-recovery,成功跳转至 https://mail.solit.cn/rest/#/forgot-password,显示中文找回密码表单,返回登录按钮正常。服务器探测入口返回 302,目标为不含内部端口的 https://mail.solit.cn/rest/。本次验证覆盖入口及页面,没有发送恢复邮件,不代表外部邮箱改密闭环完成;超级管理员仍通过受保护本机通道恢复。