兼容性
17 篇-
Tier free version 是内部清理记录
本文记录 issue #263 与 PR #264 的审查结论,本文已按 #276 后的 main 0fc5a0b5 更新;#264 的合入提交记录为 0cfca29c。这个 PR 的三个提交是一组相互配合的修复,不是三个互不相关的 workaround。 先说结论 问题成立。free version 是 SILO 在删除 tier 远端对象期间留在 xl.meta 中的内部清理记录。它带有 delete-marker 类型和被删除版本的时间,但它不是用户版本。GET 已经忽略它,若干批处理路径 …
本文记录 issue #263 与 PR #264 的审查结论,本文已按 #276 后的 main 0fc5a0b5 更新;#264 的合入提交记录为 0cfca29c。这个 PR 的三个提交是一组相互配合的修复,不是三个互不相关的 workaround。 先说结论 问题成立。free version 是 SILO 在删除 tier 远端对象期间留在 xl.meta 中的内部清理记录。它带有 delete-marker 类型和被删除版本的时间,但它不是用户版本。GET 已经忽略它,若干批处理路径 …
-
存储池迁移完整性审查:#261、#263 与 #265
本文审查 #261、#263、#265 及其对应的修复 #262、#264、#266,并记录维护者后续修复 #276。这是设计与审查记录,不是发布说明。本文已更新到 2026-11-02 的 #276 合入后 main。#264、#266、#276 已合入,#262 已被取代并关闭。 先看结论 问题 是否成立 对应 PR 的判断 建议处理 #261 成立。可读的混合 EC 对象可能从迁移列表消失,旧池删除后丢失。 窄范围修复已通过维护者 PR #267 合入;#262 已被取代。 已由 #267 …
本文审查 #261、#263、#265 及其对应的修复 #262、#264、#266,并记录维护者后续修复 #276。这是设计与审查记录,不是发布说明。本文已更新到 2026-11-02 的 #276 合入后 main。#264、#266、#276 已合入,#262 已被取代并关闭。 先看结论 问题 是否成立 对应 PR 的判断 建议处理 #261 成立。可读的混合 EC 对象可能从迁移列表消失,旧池删除后丢失。 窄范围修复已通过维护者 PR #267 合入;#262 已被取代。 已由 #267 …
-
Alias 区域:小配置改动的兼容性边界
2026-10-23 决策:mcli PR #44 已在 91006a587 合入 main。我们接受按 alias 配置区域的方案,保留小范围生产实现并补充回归覆盖。本文记录当时的设计决定。该能力已包含在正式发布的 mcli 20261109 中;以下配置边界按该版本源码复核。 原始补丁和测试由 mr javad seydi 贡献,解决的是上游 issue #5268 所报告的配置能力缺口。 缺少的究竟是什么 原始报告中的内部 S3 服务不实现 GetBucketLocation,调用时返回 …
2026-10-23 决策:mcli PR #44 已在 91006a587 合入 main。我们接受按 alias 配置区域的方案,保留小范围生产实现并补充回归覆盖。本文记录当时的设计决定。该能力已包含在正式发布的 mcli 20261109 中;以下配置边界按该版本源码复核。 原始补丁和测试由 mr javad seydi 贡献,解决的是上游 issue #5268 所报告的配置能力缺口。 缺少的究竟是什么 原始报告中的内部 S3 服务不实现 GetBucketLocation,调用时返回 …
-
写死 TLS 参数与握手兼容性
Go TLS 默认值修复 48e184652 随 Server 20260916 发布后,issue #154 的报告人在该版本复测,OIDC discovery 仍然报同一条 connection reset by peer。与此同时,上游 Go 社区的同类 issue 将完全一致的症状定位到检查 signature_algorithms_cert 扩展并发送重置的 TLS 中间设备(见上游的同款案例)。本文在《Go 1.27 TLS 默认值与 OIDC Discovery 故障形态》的基础上 …
Go TLS 默认值修复 48e184652 随 Server 20260916 发布后,issue #154 的报告人在该版本复测,OIDC discovery 仍然报同一条 connection reset by peer。与此同时,上游 Go 社区的同类 issue 将完全一致的症状定位到检查 signature_algorithms_cert 扩展并发送重置的 TLS 中间设备(见上游的同款案例)。本文在《Go 1.27 TLS 默认值与 OIDC Discovery 故障形态》的基础上 …
-
SigV4 签名头覆盖边界:拒绝未签名的 x-amz-* 请求头
本文记录 SILO 的未签名请求头覆盖修复(核心提交 123325430,经 PR #173 合入,安全通告编号 SN-2026-011)以及 PR #177 中的后续签名与载荷校验修复(安全通告编号 SN-2026-012)。上述修复已随 Server 20260916 发布。该漏洞由 Oren Yomtov 报告,并在本地预签名与 Authorization 请求头两条 SigV4 路径上复现。 核心结论(TL;DR) 预签名 PUT URL 可以只对 host 一个请求头签名。此前 …
本文记录 SILO 的未签名请求头覆盖修复(核心提交 123325430,经 PR #173 合入,安全通告编号 SN-2026-011)以及 PR #177 中的后续签名与载荷校验修复(安全通告编号 SN-2026-012)。上述修复已随 Server 20260916 发布。该漏洞由 Oren Yomtov 报告,并在本地预签名与 Authorization 请求头两条 SigV4 路径上复现。 核心结论(TL;DR) 预签名 PUT URL 可以只对 host 一个请求头签名。此前 …
-
显式版本删除现在要求 DeleteObjectVersion
自 Server 20260903 起(pgsty/silo#104,对应 Issue #58),SILO 按照删除请求实际执行的操作类型选择所需权限: 请求 所需权限 未携带 versionId s3:DeleteObject 版本 UUID s3:DeleteObjectVersion 显式 versionId=null s3:DeleteObjectVersion DeleteObjects 对每个 XML 条目独立应用映射 此前所有情况均要求 s3:DeleteObject,而 …
自 Server 20260903 起(pgsty/silo#104,对应 Issue #58),SILO 按照删除请求实际执行的操作类型选择所需权限: 请求 所需权限 未携带 versionId s3:DeleteObject 版本 UUID s3:DeleteObjectVersion 显式 versionId=null s3:DeleteObjectVersion DeleteObjects 对每个 XML 条目独立应用映射 此前所有情况均要求 s3:DeleteObject,而 …
-
鉴权前不做 I/O,Header 不授予权限
本文记录通过 PR #101(提交 938603458 至 04b097fd9)合入 SILO、编号为 SN-2026-008 并随 Server 20260903 发布的 CORS 热路径与复制请求信任边界修复。 概览 两个表面上互不相关的缺陷,实际上源于同一个架构层面的设计失误: 任何携带 Origin 请求头的 HTTP 请求都会促使最外层 CORS 中间件把 URL 第一段路径当成存储桶名称,并在身份认证之前同步从磁盘加载该桶的元数据。 任何携带 …
本文记录通过 PR #101(提交 938603458 至 04b097fd9)合入 SILO、编号为 SN-2026-008 并随 Server 20260903 发布的 CORS 热路径与复制请求信任边界修复。 概览 两个表面上互不相关的缺陷,实际上源于同一个架构层面的设计失误: 任何携带 Origin 请求头的 HTTP 请求都会促使最外层 CORS 中间件把 URL 第一段路径当成存储桶名称,并在身份认证之前同步从磁盘加载该桶的元数据。 任何携带 …
-
只读 Checksum 审计与可靠的 CLI 输出契约
本文记录 MCLI 只读 checksum 校验工作流,以及发布复核阶段发现的 non-TTY 输出缺陷 pgsty/mc#5 的设计与实现。该命令经由 pgsty/mc 的 pull request #8 与 #13 合入主干,并随 mcli 20260903 正式发布(已内置于 Server 20260903 容器镜像)。 核心概览 历史版本的 CopyObject 实现可能在压缩或加密后的底层存储字节上计算附加校验和(additional checksum),而非在 S3 GET 返回给客 …
本文记录 MCLI 只读 checksum 校验工作流,以及发布复核阶段发现的 non-TTY 输出缺陷 pgsty/mc#5 的设计与实现。该命令经由 pgsty/mc 的 pull request #8 与 #13 合入主干,并随 mcli 20260903 正式发布(已内置于 Server 20260903 容器镜像)。 核心概览 历史版本的 CopyObject 实现可能在压缩或加密后的底层存储字节上计算附加校验和(additional checksum),而非在 S3 GET 返回给客 …
-
两把 SSE-C 密钥,一份 CopyObject 响应
本文记录提交 e73436c99(已随 Server 20260903 发布)中的 CopyObject SSE-C 校验和响应修复。该修复仅作用于目标对象成功提交后的 CopyObject XML 与 HTTP 响应生成阶段;已存储的对象字节、校验和元数据、加密格式、源对象解密、联邦复制与站点复制均保持不变。 概览 一次 SSE-C CopyObject 请求可以同时携带两套相互独立的客户端加密密钥: 角色 请求头 用途 源对象 …
本文记录提交 e73436c99(已随 Server 20260903 发布)中的 CopyObject SSE-C 校验和响应修复。该修复仅作用于目标对象成功提交后的 CopyObject XML 与 HTTP 响应生成阶段;已存储的对象字节、校验和元数据、加密格式、源对象解密、联邦复制与站点复制均保持不变。 概览 一次 SSE-C CopyObject 请求可以同时携带两套相互独立的客户端加密密钥: 角色 请求头 用途 源对象 …
-
配置环境文件不是 Shell 脚本
本文定义 MINIO_CONFIG_ENV_FILE 的启动解析契约,并记录提交 2aea7fe9c(已随 Server 20260903 发布)中的兼容性修复。该文件是 SILO 的专用输入格式;为方便运维而支持可选的 export 前缀,并不意味着它是一段 POSIX shell 脚本。 概览 SILO 支持在启动时从指定文件加载环境变量: export MINIO_CONFIG_ENV_FILE=/etc/default/silo silo server /data 解析器接受如下形式的键 …
本文定义 MINIO_CONFIG_ENV_FILE 的启动解析契约,并记录提交 2aea7fe9c(已随 Server 20260903 发布)中的兼容性修复。该文件是 SILO 的专用输入格式;为方便运维而支持可选的 export 前缀,并不意味着它是一段 POSIX shell 脚本。 概览 SILO 支持在启动时从指定文件加载环境变量: export MINIO_CONFIG_ENV_FILE=/etc/default/silo silo server /data 解析器接受如下形式的键 …
-
BadDigest、InvalidRequest 与 CompleteMultipartUpload 校验和契约
#48 与 #50 的修复已随 Server 20260903 发布,流式校验和后续修复(PR #143)已随 Server 20260916 发布。本文取代八月早期提案中“暂时保留 CRC64NVME 静默规范化”的结论。 20261018:消息文字与提交失败 Server 20261018 包含 #225、#229 与 #238 的消息格式修复:Content-MD5 大小写对齐 S3 规范、PutObject 与 UploadPart 校验失败时显示已知算法名,以及移除 …
#48 与 #50 的修复已随 Server 20260903 发布,流式校验和后续修复(PR #143)已随 Server 20260916 发布。本文取代八月早期提案中“暂时保留 CRC64NVME 静默规范化”的结论。 20261018:消息文字与提交失败 Server 20261018 包含 #225、#229 与 #238 的消息格式修复:Content-MD5 大小写对齐 S3 规范、PutObject 与 UploadPart 校验失败时显示已知算法名,以及移除 …
-
ListObjects 快捷路径不能把不存在的桶伪装成空桶
随 SILO Server 20260903 发布的 PR #37(PR 提交 e9c5340be,合并提交 49c8aeac4,关闭 SILO #32),修复了 ListObjects、ListObjectsV2 与 ListObjectVersions 中三条提前返回(early-return)快捷路径在目标桶不存在时错误返回 HTTP 200 OK 空列表、而非 HTTP 404 NoSuchBucket 的 S3 兼容性回归。 太长不看(TL;DR) 对不存在的桶执行普通 …
随 SILO Server 20260903 发布的 PR #37(PR 提交 e9c5340be,合并提交 49c8aeac4,关闭 SILO #32),修复了 ListObjects、ListObjectsV2 与 ListObjectVersions 中三条提前返回(early-return)快捷路径在目标桶不存在时错误返回 HTTP 200 OK 空列表、而非 HTTP 404 NoSuchBucket 的 S3 兼容性回归。 太长不看(TL;DR) 对不存在的桶执行普通 …
-
一个端点,两种权限:彻底分离用户与组状态
本文记录 上游议题 minio/minio#21478、SILO PR #73(提交 58735ee38 / 2e2377d1c)以及 set-group-status 组状态权限善后提交(229fe2b3c)的鉴权设计与验证记录。上述修复已随 Server 20260903 发布。 太长不看(TL;DR) SILO 同时定义了 admin:EnableUser 与 admin:DisableUser 两项策略权限,但共用的 set-user-status 处理函数过去无论目标状态是什么,都固定 …
本文记录 上游议题 minio/minio#21478、SILO PR #73(提交 58735ee38 / 2e2377d1c)以及 set-group-status 组状态权限善后提交(229fe2b3c)的鉴权设计与验证记录。上述修复已随 Server 20260903 发布。 太长不看(TL;DR) SILO 同时定义了 admin:EnableUser 与 admin:DisableUser 两项策略权限,但共用的 set-user-status 处理函数过去无论目标状态是什么,都固定 …
-
条件 DELETE:一个条件对应一个逻辑对象
单对象条件删除(DeleteObject 上的 If-Match)由 PR #145 引入,随后 PR #178 修复了多池串行化与跨池清理。这两项改动均已随 Server 20260916 发布。 八月围绕 PR #12 的早期方案曾设想更宽的范围——包括批量 DeleteObjects 拒绝保护、额外的 s3:GetObject 读取授权检查,以及“仅比较当前版本”规则——但实际合入的实现并未采纳这些扩展。本文记录 f99ed829b 中已交付的契约,并阐述为什么前置条件判断必须位于单池存储 …
单对象条件删除(DeleteObject 上的 If-Match)由 PR #145 引入,随后 PR #178 修复了多池串行化与跨池清理。这两项改动均已随 Server 20260916 发布。 八月围绕 PR #12 的早期方案曾设想更宽的范围——包括批量 DeleteObjects 拒绝保护、额外的 s3:GetObject 读取授权检查,以及“仅比较当前版本”规则——但实际合入的实现并未采纳这些扩展。本文记录 f99ed829b 中已交付的契约,并阐述为什么前置条件判断必须位于单池存储 …
-
为什么 CompleteMultipartUpload 必须返回 ChecksumType:PR #57 评审记录
Shooks(@Dansyuqri)贡献的 PR #57 修复了 #47,并已随 Server 20260903 发布。当对象保存了附加 S3 校验和时,CompleteMultipartUpload 的 XML 响应现在会一并返回已存储的 ChecksumType 元素。 缺陷与范围 对 @cbornet 报告的 #31 的调查拆出了两个独立缺陷。CRC32 分片上传完成阶段的数据计算路径已由提交 c8590413f 与 3e14733f1 修复。但在分片上传成功完成后,虽然底层对象元数据保存 …
Shooks(@Dansyuqri)贡献的 PR #57 修复了 #47,并已随 Server 20260903 发布。当对象保存了附加 S3 校验和时,CompleteMultipartUpload 的 XML 响应现在会一并返回已存储的 ChecksumType 元素。 缺陷与范围 对 @cbornet 报告的 #31 的调查拆出了两个独立缺陷。CRC32 分片上传完成阶段的数据计算路径已由提交 c8590413f 与 3e14733f1 修复。但在分片上传成功完成后,虽然底层对象元数据保存 …
-
可选校验和,强制失败:修复 UploadPart 与 UploadPartCopy 兼容性
本文记录 SILO #46(合并提交 7fea6d5a5,随 Server 20260903 发布,后续延伸修复见 #63 与 #64)的设计与实现:如何围绕 S3 分片上传的可选校验和请求头,同时理顺分片合并(completion)语义、复制响应、压缩与加密数据流以及兼容性基线守卫。 太长不看(TL;DR) 分片上传(Multipart Upload,简称 MPU)会将大对象切分为多个分片(part)分别上传。AWS S3 允许客户端在上传每个分片时附带校验和(checksum),但将其定义为 …
本文记录 SILO #46(合并提交 7fea6d5a5,随 Server 20260903 发布,后续延伸修复见 #63 与 #64)的设计与实现:如何围绕 S3 分片上传的可选校验和请求头,同时理顺分片合并(completion)语义、复制响应、压缩与加密数据流以及兼容性基线守卫。 太长不看(TL;DR) 分片上传(Multipart Upload,简称 MPU)会将大对象切分为多个分片(part)分别上传。AWS S3 允许客户端在上传每个分片时附带校验和(checksum),但将其定义为 …
-
数据库通知统一连接串:#53 的兼容性边界
随 SILO Server 20260903 发布的提交 f1ba68358 修复了 SILO #53,明确了 PostgreSQL 与 MySQL 桶通知目标的兼容性边界、旧配置迁移行为与启动期错误处理契约。 最终决策 SILO 保留 PostgreSQL 与 MySQL 通知目标(notification target),但每种数据库仅支持单一的规范配置键: PostgreSQL 必须提供完整的 connection_string; MySQL 必须提供完整的 dsn_string。 …
随 SILO Server 20260903 发布的提交 f1ba68358 修复了 SILO #53,明确了 PostgreSQL 与 MySQL 桶通知目标的兼容性边界、旧配置迁移行为与启动期错误处理契约。 最终决策 SILO 保留 PostgreSQL 与 MySQL 通知目标(notification target),但每种数据库仅支持单一的规范配置键: PostgreSQL 必须提供完整的 connection_string; MySQL 必须提供完整的 dsn_string。 …