5.4 KiB
运行时安全升级与回滚
范围
| 组件 | 本次目标 | 边界 |
|---|---|---|
| 素材库 Web、独立渲染进程 | Node 22.23.4,固定官方镜像清单 SHA-256 | 重新编译 Canvas / Sharp,保留现有应用、权限与存储契约 |
| 通知中心 | Node 22.23.4 | 独立仓库;临时 SQLite 回归,不发送真实通知 |
| 本机 Pi | Node 24.22.1 或同一 24.x 线后续安全版本 | 随客户端打包;主入口、SDK 入口、打包均拒绝旧版本 |
| 原生客户端 HTTPS | rustls-webpki 0.103.16、webpki-root-certs 1.0.10 | 保留 Rustls 校验,不关闭 TLS 验证 |
| MinIO | 原 2025-04-22 源码,Go 1.26.10 重编译 | 原协议、命令、数据卷与版本格式不变 |
| frpc | 原 0.67.0 源码,Go 1.26.10 重编译 | 配置不变,四个入口逐个切换、逐个检查 |
| TrueNAS 自带 Docker、系统 rclone | 另行安排 NAS 维护 | 用户已确认分开处理,本轮不改只读系统、不重启 Docker / NAS,不宣称已修复 |
生产链路没有 PHP / PHP-FPM;不为本次更新新增 PHP。 不修改其他项目的全局 Node、操作系统配置或模型上游。
依据与可重建性
Go 源码的提交、归档哈希和版本在 scripts/security-runtime/go-sources.json;
构建镜像、参数和上游许可证保留在 go-rebuild.Dockerfile 的构建结果中。
GOTOOLCHAIN=local 防止模块声明把工具链降回旧版本。自编译包不冒充上游新发行版。
node scripts/security-runtime/prepare-go-context.mjs output/security-go-build
docker build --target artifacts -f output/security-go-build/Dockerfile output/security-go-build
tls-probe.go 只执行 TLS 握手:正常站点必须通过,两个失信证书样例必须被证书验证拒绝;
DNS、超时和网络错误不能算修复通过。不发送 HTTP、API Key 或业务数据。
本机 Node 使用相同的正反例验证;Rust 的显式联网验收测试默认 ignored,须单独执行。
历史 Dockerfile.base 改为按锁文件重新安装原生依赖,禁止导入 Node 18 的二进制缓存。
旧 setup-build-cache.ps1 不是当前生产链路;新基础镜像构建不读取它生成的缓存。
开发 Compose 与本地验收 Compose 也固定同一安全版本,避免参数覆盖回旧 Node。
本地兼容门禁
已完成:
- Node 22 下账号、素材权限、分片上传、下载、原图和报告外部接口、Agent 规则与异常恢复:15 个套件、155 项通过。
- 渲染器:中文字体、图片比例、PNG、长图、可编辑 PSD、非法输入等 6 项通过。
- Pi:31 项回归;客户端主程序:182 项通过、严格 Clippy 通过、31 个 crate 分层检查通过。
- 真实本地 1440 × 12337 多屏文件:中文编辑、撤销重做、保存重开、分层 PSD 重读通过。
- 更新后的本地客户端恢复原账户、56 条对话及原画布;原生模型桥只读检查通过。没有新增模型请求。
- MinIO 在同一隔离测试卷上依次运行原版、修复版、回退原版;图片、PDF、ZIP、RAR 的逐字节校验、Range、分页、元数据均通过。
- frpc 0.67.0 的配置校验、TLS、Token 鉴权和 TCP 转发在隔离网络通过。
- Node、Rust、Go 均通过正常 HTTPS / 失信证书正反例。实际生产替换后须再次核对运行版本与证书行为。
图形界面和模型调用流程不在本次重写。没有用新的付费调用代替兼容回归;未知请求不重发。
数据保护与生产切换
备份位于生产机私有目录:
/mnt/PoolOne/apps/youyidian-3d/security-upgrade-20261022/backup。
PostgreSQL 使用一致性逻辑备份并验证 TOC;通知 SQLite 使用在线备份并通过完整性检查。
MinIO 数据集和上传素材数据集均建立 security-upgrade-20261022 快照并加 hold。
环境、容器配置和原镜像保留供回滚;不得把这些敏感备份纳入 Git 或日志输出。
- 只打包已提交的源代码,不把工作区无关改动混入发布。
- 镜像归档逐份校验哈希、Linux/amd64、真实 config ID 与版本标签。
- 记录 DB / Redis 容器身份、素材挂载、队列及未知请求指纹;有活动任务先等待。
- MinIO 与通知中心分别替换,故障立即切回原容器;禁止两个 MinIO 同时写生产数据卷。
- frpc 先用原服务环境校验配置,再逐个重启;每个入口核对原业务健康,失败恢复原二进制。
- Web 按现有增量发布流程部署。无数据库迁移、数据恢复、素材清理或自动补发模型。
- 检查公网页面、权限、健康端点、真实素材读取 / Range、通知队列、Node 和 Go 身份。
回滚优先恢复程序和镜像,不能自动回滚素材 ZFS 快照,避免覆盖切换后新增的用户文件。 数据库引擎、库结构和用户文件均不属于本次修改范围。
本地构建与验收原始证据保留在 output/security-upgrade-20261022/。
客户端包为本机未签名开发包,不能当作已签名正式安装程序分发。