跳转到主要内容

SILO 20261015:已替代草稿记录

20261015 历史候选源码与制品验收记录;已被正式版 20261018 替代。

状态:已被正式版 Server 20261018 替代。 RELEASE.2026-10-15T00-00-00Z 曾于 2026-10-15 13:52:28(UTC+8)短暂公开,随后撤回为 Draft 并由包含完整十月修复栈的 20261018 接替。本页归档该候选版的源码范围与制品验收记录,新部署与升级请直接使用 20261018。

对象锁修复

  • SN-2026-015 — 保留期修改授权(#234):每次 PutObjectRetention 请求在读取对象状态前,必须携带请求体中的 Object Lock 条件键通过 s3:PutObjectRetention 鉴权。缩短、清除未到期 GOVERNANCE 保留期或改变其模式时,必须同时具备显式 bypass 请求头与 s3:BypassGovernanceRetention 权限(不能绕过基础 s3:PutObjectRetention 的 Deny)。清除保留期按剩余 0 天求值,远期日期计算不再溢出饱和。
  • SN-2026-016 — 保护已有版本免受原位覆写(#235):客户端指定写入 versionId 必须具备可信复制权限(s3:ReplicateObject)。目录 null 版本与持久化分片上传目标在实际覆写前、持有目标写锁时复查锁状态(覆盖升级前创建或从旧暂存状态恢复的分片上传),确保既有 GOVERNANCE、COMPLIANCE 与 Legal Hold 保护生效;锁状态读取失败时拒绝写入。
  • 发行前置门禁(#237):发行构建流水线新增 Object Lock 竞态回归前置检查,覆盖慢请求体目录覆写、预检读取失败、旧分片完成覆写 COMPLIANCE 以及恢复上传 UUID 碰撞。

详见安全公告与修复设计。

20260916 以来的其他改动

改动 用户可见效果
#233 解码复用的旧版 xl.meta 头部时清除缺失字段,并使扫描更新与最终响应字段互斥(见结构体复用修复记录)。
#225 对齐 S3 校验和错误文案(含 Content-MD5 拼写)。
#220 修复 Lambda 目标集合 TargetIDSet.IsEmpty 判空逻辑,并补充空集合与非空集合回归测试。
fa565ec9f 升级至 Go 1.27.2、golangci-lint 与 golang.org/x/net v0.60.0,同步模块要求与固定 digest 的 Docker 构建阶段。

组件身份

组件 选用版本
Server RELEASE.2026-10-15T00-00-00Z(包版本 20261015000000.0.0)
内嵌 Console v2.4.1(源码 1360e26d976d)
mcli RELEASE.2026-09-16T00-00-00Z(源码 e952aa78f10a)
共享包 github.com/pgsty/silo-pkg/v3 v3.14.1
上游 S3 SDK github.com/minio/minio-go/v7 v7.3.1-0.20260915093545-32e1f32cb176
Go 工具链 Go 1.27.2

升级要求

  1. 全节点与复制站点升级:升级全部 Server 进程及所有接受 S3 写入的复制站点,避免未修复节点继续放行未授权的保留期修改或原位覆写。
  2. 核对策略权限:仅授予 s3:BypassGovernanceRetention 而未授予 s3:PutObjectRetention、或依赖 bypass 绕过保留期条件键的请求将返回 403 AccessDenied。
  3. 指定 versionId 写入限制:普通 S3 客户端写入(含 root 签名请求)不得指定目标 versionId;可信复制保留版本 ID,mcli batch replicate 写入 SILO 时目标凭据需具备 s3:ReplicateObject。
  4. 锁状态不可读时拒绝覆写:已锁定的目录对象与已有分片目标不可被覆写;若底层锁元数据读取失败,需先恢复存储盘健康再重试。
  5. 历史数据排查:升级前已发生的异常保留期变更或覆写不会自动回滚,请结合审计日志核查(从 20260916 之前版本升级时请一并参考九月版升级要求)。

候选制品验收记录

针对候选源码 7a3ca0f82100cce06289a465f54139da2639f642 的流水线与本地核验结果如下:

检查项 结果 流水线记录
主分支 Go CI 通过 Run 38686240587
漏洞检查(VulnCheck) 通过 Run 38686240625
发行构建与 Object Lock 前置门禁 通过 Run 38686425467
发行软件包定稿 通过 Run 38687734395
  • 静态制品核验:36 个发行制品、34 份制品来源证明、Linux/macOS/Windows 的 amd64/arm64 共 6 个平台二进制静态身份、6 个 RPM/DEB/APK 安装包载荷与 2 个 RPM 签名全部核验通过(参考历史归档校验和与安装包校验和)。
  • macOS arm64 二进制运行验收(110/110 通过):
场景 结果
全新安装完整 Object Lock API 验收 49/49
基于官方 20260916 数据目录原地升级验收 12/12
升级后再次运行完整 Object Lock API 验收 49/49

(其中 65 次预期拒绝操作均未改变目标对象的任何内容或元数据状态;Windows 与 macOS amd64 为静态身份核验。)

Docker 镜像验收

Docker 发布工作流 38689158028 构建的 linux/amd64 与 linux/arm64 多平台镜像摘要及 OCI 来源证明均核验通过:

镜像变体 版本标签 多平台 Index Digest
Classic RELEASE.2026-10-15T00-00-00Z sha256:aaac6bce13eb99316b3c88bd20143fc3c38ab607585256a411a095c44ee57f62
Distroless RELEASE.2026-10-15T00-00-00Z-distroless sha256:70cac541c5a928be5cd16d6b8732d85ac06e891a0e3d9956a745381330692fc6

四个平台单架构镜像(容器内 /usr/bin/silo 与官方 Linux 归档二进制逐字节一致)均通过 /minio/health/ready 探针与 Object Lock API 套件(196/196 通过,其中 120 次预期拒绝操作均保持对象版本、ETag、保留期、Legal Hold 与版本列表完整不变):

镜像 运行环境 API 验收 二进制比对
Classic linux/arm64 Docker Desktop ARM64 原生 49/49 与官方 Linux arm64 归档一致
Classic linux/amd64 Docker Desktop ARM64 仿真 49/49 与官方 Linux amd64 归档一致
Distroless linux/arm64 Docker Desktop ARM64 原生 49/49 与官方 Linux arm64 归档一致
Distroless linux/amd64 Docker Desktop ARM64 仿真 49/49 与官方 Linux amd64 归档一致

连同 macOS arm64 原生安装与升级测试,候选制品运行验收合计 306/306 通过。