Smail/docs/清库部署测试记录.md
smail 56d0688b5f
Some checks are pending
Security Checks / security (push) Waiting to run
收紧反代访问日志并记录云端安全恢复验收
2026-10-02 13:34:18 +08:00

7.7 KiB
Raw Blame History

清库部署测试记录

本文保留分日期的测试记录。不同环境、版本和日期的结果不可相互替代;最新云端续验见文末。

范围与状态

日期:2026 年 9 月 16 日。仅测试本机 D:\Desktop\Smail\yunx-test,使用正式构建包和嵌入前端,未启用开发模式或停用本机恢复通道。

  • [✓] 备份三份 SQLite 数据库和配置,校验备份后清空数据库对象,保留数据库文件。
  • [✓] 完整构建、部署及部署指纹校验通过。
  • 首轮通过浏览器完成数据库、超级管理员、域名、DNS 展示和手动证书初始化;正式业务服务未就绪。
  • [✓] 修复安装根地址认证探测失败,隔离浏览器直接访问根地址后自动进入中文安装向导。
  • [✓] 修复 HTTP、HTTPS 全局实例在停止期间被清空而导致的崩溃;启动任务发布前同步准备实例,关闭已准备但尚未监听的实例也能正常退出。
  • [✓] 全量自动回归与定向竞态检查通过。
  • [!] 正式登录、刷新会话、普通用户及管理员邮件恢复、旧密码与旧会话失效实机验收未完成。
  • [!] 超级管理员受保护本机恢复通道实机验收未完成。

实机证据

第一轮直接访问安装根地址出现“认证服务暂时不可用”。安装服务缺少 /api/v1/user/info 的初始化状态响应,前端未得到需要初始化的业务码。修复后,两个版本的认证探测路径均复用安装令牌和来源检查,只返回需要初始化状态,不执行账号或配置写入。

在全新隔离浏览器中访问 http://127.0.0.1:5201/,页面自动进入 /#/setup?redirect=/,显示中文六步安装向导,未再出现认证服务不可用。已查看页面快照和桌面截图;截图工具不允许写入当前工作区,因此截图仅保留在会话中,未声称落盘。

第一轮完成初始化后,Windows Named Pipe 在接受连接时返回 Access is denied,随后 HTTP 停止与启动并发导致空指针崩溃。最新构建重试相同权限环境后,保留明确权限错误并退出,未再发生空指针崩溃,监听端口已释放。

当前进程使用未提升的中等完整性令牌,管理员组仅用于拒绝检查。本机通道 ACL 仍限定 SYSTEM 与管理员,未放宽 ACL,未改成公开 HTTP 或 TCP 接口。

自动验证

  • go test ./listen/http_server ./res_init 通过。
  • node test/run.mjs all 通过:前端 166 项、部署 4 项以及全部后端包。部分未变更包使用 Go 测试缓存,不能据此认定受权限限制的 Windows IPC 用例已实机执行。
  • node test/run.mjs backend -race ./listen/http_server ./res_init 通过。
  • 新增覆盖:HTTP 和 HTTPS 停止先于监听、多个停止任务并发、HTTPS 准备失败清理 HTTP,以及安装状态接口的有效令牌、缺少令牌、来源限制、方法限制和初始化完成后拒绝访问。
  • git diff --check 通过,仅存在仓库已有换行策略提示。

首次误将构建与回归并行调度,触发工作区锁且导致竞态测试读取不到正在移动的嵌入资源。已改用串行调度重跑并通过,此次失败不作为产品回归结论。

备份与日志

以下路径包含本地测试数据或配置,均为忽略的运行产物,不提交仓库:

  • test-log/live-20260916-1938/backup/:清库前配置和数据库。
  • test-log/live-20260916-1938/reset-partition-config/:归档的旧分区配置。
  • test-log/live-20260916-1938/before-retest/:首轮初始化后、第二次清库前的配置和数据库。
  • test-log/live-20260916-1938/fresh.stderr.log:原始崩溃证据。
  • test-log/live-20260916-1938/fixed.stdout.log 与 fixed.stderr.log:修复后正式启动权限失败与退出证据。
  • test-log/live-20260916-1938/setup-retest.stdout.log:最新安装向导进程日志。
  • test-log/run-2026-09-16T11-49-49-921Z-5240/:成功的全量回归。
  • test-log/run-2026-09-16T11-51-52-136Z-29980/:成功的竞态检查。

第二次清库后保留安装向导运行于 127.0.0.1:5201,数据库为空、配置未初始化,证书与业务密钥未删除。没有将旧账号备份恢复到当前运行库。

后续条件

后续正式流程需要符合项目部署要求的 Windows 权限环境或受支持的 Linux 部署环境。当前会话无法提供已提升的 Windows 令牌,不通过绕过权限限制推进验收。

在具备权限的环境中重新完成初始化并确认服务稳定后,再验证登录、会话刷新和邮箱恢复。邮件恢复还需要确定实际可接收验证码的外部测试邮箱;验证码收到、恢复页面打开或接口返回成功均不单独构成完整验收。

2026 年 10 月 2 日云端续验

范围

本段时间为 13:17 至 13:30,继续当天已经完成的全新部署验收,不重复清库或恢复历史数据。业务操作使用浏览器页面;交互式 SSH 仅检查运行状态、修改 Smail 专用 Nginx 日志配置和权限。未调用业务接口代替页面测试,未新建测试脚本,未修改 Go 或前端业务代码。

本段结果

  • [✓] 普通用户使用恢复后的临时密码登录成功,原邮件可读;随后通过安全设置恢复指定测试密码并再次登录,收件箱邮件仍在。本文不记录密码或安全码。
  • [✓] 密码恢复后的安全设置显示不存在有效安全码,公共恢复入口不再提供安全码验证;源码确认恢复事务会撤销整批凭据。因页面已经撤销整批安全码,本段未单独提交第二枚旧码,不能称为逐码重放实测。
  • [✓] 修改密码后页面退出登录,明确提示原安全凭据已失效。
  • [✓] 超级管理员在公共找回页面被明确拒绝重置,提示使用安全中心或部署端本机通道;未执行超级管理员本机重置。
  • [✓] 基础配置页面显示单一 MySQL 数据库和数据库用户均为 smail;页面域名与本次部署确认值一致。
  • [✓] SSL 页面显示手动配置、不自动续期,直接引用 Nginx 使用的同组证书文件路径。
  • [✓] Smail 专用 Nginx 配置改为不含查询参数、来源页及认证头的访问日志格式;配置语法检查通过并平滑加载。通过浏览器打开带无敏感信息测试参数的登录页后,新访问日志仅包含路径,测试参数匹配数为零。
  • [✓] Smail 专用访问日志及错误日志权限均已设为 0640;现有日志轮转配置也使用 0640,未改动其他项目日志。
  • [✓] 调整后 Smail、Nginx 均运行正常;Smail 启动时间仍为当天 11:58:26,自动重启次数为零,本段未重启 Smail。
  • 部署模板同步专用访问日志格式,反代部署说明校正证书路径引用与热加载行为;本地差异检查通过。完整占位符模板尚未在另一套全新实例重新部署。

尚未关闭的验收项

  • [!] 自动证书续期、证书更新后网页及各邮件协议加载闭环尚未实测通过,手动配置和热加载不能替代自动续期验收。
  • [!] 外域双向收发、真实 SMTP/IMAP/POP3 客户端、反中继及通知凭据协议隔离仍待完成。
  • [!] 外部邮箱恢复、超级管理员本机恢复、附件上传及其他安全功能尚未全部覆盖。
  • [!] 本次全新环境的微信、Telegram 配置与真人绑定尚未完成,不继承历史成功结果。
  • [!] 历史日志未删除;应用日志、错误日志及其他日志的敏感信息检查仍待完成,不能以访问日志格式修改代替全部日志审计。
  • [!] 本轮临时账号、分组和其他验收数据保留用于后续测试,发布前仍需按确认范围完成清理。

以上不构成全项目验收通过或上线签收。