Smail/docs/晚间验收复测记录.md
smail 4ea034298f
Some checks are pending
Security Checks / security (push) Waiting to run
记录晚间远程验收复测与共享Nginx续期风险
2026-09-17 23:41:38 +08:00

5.6 KiB
Raw Blame History

晚间验收复测记录

范围与基线

  • 日期:2026-09-17,远程检查开始于北京时间 23:30。
  • 目标:47.108.78.12,主机名 ikun2。所有应用与回归测试仅在该服务器执行。
  • 本轮基线提交:a0e373d,已推送。仅复测现有部署,不修改应用源码,不重新编译或替换线上程序。
  • 测试对象仍为 review-2263779,主程序和管理程序摘要与上一轮相同。
  • 本轮只读检查线上状态,续期回归使用模拟依赖和独立网络,不登录、不发信、不写业务数据库。因此未清库、未进行首次安装,不计入最新构建清洁部署验收。
  • 证据目录:/var/tmp/smail-review-night-20260917-233135,权限 0700。保留失败日志与重试结果,不删除历史证据。

任务清单

  • [✓] 核实当前工作树、程序摘要及服务状态。
  • [✓] 可信 TLS、内部 25/587 STARTTLS、HTTP 跳转及未知 Host/SNI 拒绝复测。
  • [✓] 六项隔离续期回归及线上脚本摘要核对。
  • [✓] 备份摘要、证书有效期、私钥权限与本地恢复 socket 权限检查。
  • [✓] 非特权用户实际连接本地恢复 socket 被拒绝。
  • [✓] 五分钟资源采样与结束时服务复核,共 11 次采样通过;仅覆盖本轮短时观察。
  • [!] 真实远程浏览器业务验收、首次安装及发信闭环未执行。
  • [!] Nginx 共用后的续期维护影响待处理,未触发真实续期。

已取得证据

检查 结果与边界
443、8002、465、993、995 系统信任链与主机名校验通过,使用同一叶证书
内部 25、587 STARTTLS 通过,明文阶段不公布 AUTH,未执行邮件投递
80、8001 HTTP 跳转通过,公网 80 不泄露内部 8002
未知 Host/SNI HTTP 拒绝、TLS 握手拒绝通过
Nginx 配置 nginx -t 通过,未重载服务
续期脚本回归 六项通过;验证未到期、到期失败及超时恢复、成功路径、权限、证书信任和密钥匹配相关行为
线上脚本一致性 两个续期部署脚本分别与本轮上传副本 SHA256 一致
已有一致性备份 smail-state.tar.gz 摘要仍为 29bd3deb4b498ee873d83cd5986cfd37b2c2c3cf08347a6b913e0c9ea8b41965,未执行恢复
证书 五域名 SAN 完整,有效期至 2026-12-16 13:54:39 UTC,超过 30 天
私钥与恢复入口 应用私钥 0600、ACME 目录 0700、ACME 私钥 0600、恢复 socket 0600;不代表完整恢复撤销通过
本地 IPC 访问边界 以 nobody 用户、UID 65534 连接恢复 socket,得到预期 EACCES;没有发送业务请求或修改账户,证据为 ipc-access-boundary.json
UFW IPv4/IPv6 的 8001:8002 优先拒绝规则存在,未执行独立外网扫描

续期回归使用 systemd 独立网络、私有临时目录、只读系统和脚本挂载;禁止访问生产应用、恢复 socket、ACME 目录及备份。限制为 64 MiB 内存、零交换、25% CPU、32 个任务和 90 秒运行时间。

首次启动时,PrivateTmp 隐藏了 /var/tmp 中的脚本,Python 以退出码 2 结束,尚未运行任何用例。随后将本轮脚本目录只读挂载至 /opt/smail-night-code 后重试成功;没有关闭隔离或扩大资源上限。失败日志为 renewal-regression.log,成功日志为 renewal-regression-retry.log。

成功回归的 systemd 输出记录运行时间 485 ms、峰值内存约 15 MiB;结束后再次查询 MemoryPeak 为未设置,因此不能将后一次空值解释为零内存。

资源与结束复核

资源采样时间为北京时间 23:32:30 至 23:37:31,共 11 次,跨度约 301.49 秒,每次均按原 128 MiB 保留预算通过。

指标 实测结果
主机可用内存 772,050,944 至 813,060,096 字节
Smail 当前内存采样峰值 35,913,728 字节,约 34.3 MiB
Smail 增长至硬上限后的最小主机余量 270,471,168 字节,约 258 MiB,大于 128 MiB 保留预算
进程与 OOM 同一 InvocationID,OOM 和 OOM kill 均为零
结束时 Smail active,PID 574584,NRestarts 0
结束时 Nginx active,PID 575746,NRestarts 0
同机服务 Scert、MySQL、PostgreSQL 的进程与监听在结束复核时仍存在,PID 与本轮开始一致
结束时传输层 transport-final.json 再次通过

逐次证据为 resource-00.json 至 resource-10.json,汇总为 resource-summary-retry.json,服务状态为 service-final.txt。首次汇总将 resource-summary.json 自身匹配为样本,误报缺少样本并退出;重试改为显式读取 11 个编号文件后通过,空的首次汇总文件保留,原始采样没有被覆盖。

此观察期间没有持续业务负载,不能据此推导并发用户数、邮件吞吐量或长期稳定性,汇总中的 productionApproved 保持 false。

新发现与剩余阻塞

当前 /etc/nginx/conf.d/scert-apmmk.conf 为 Scert 提供 8003/8004 入口,与 Smail 共用同一个 Nginx。现有续期脚本会停止整个 Nginx 服务,因而存在跨项目中断风险。此结论来自现场配置与续期源码核对,没有通过停止服务制造故障。需要明确共用服务维护窗口或调整挑战部署方式,并完成对应远程演练。

服务器未检测到 Chromium、Chrome 或 Node/npm 可执行文件,本轮没有启动本机浏览器代替远程浏览器验收。代理客户端 IP、恢复公网端口、管理员恢复与撤销、凭据轮换、持久投递故障恢复、真实续期告警、容量和异机恢复仍未通过。本轮结果不能用于签署整体生产放行。