跳转到主要内容

PGSTY SILO 博客

  • silo-pkg 3.14.0 发布

    发布于 发布注记

    Releasepkg

    Featured Image for silo-pkg 3.14.0 发布

    v3.14.0 于 2026-09-13 发布,源码提交为 827f8109,模块导入路径为 github.com/pgsty/silo-pkg/v3。 密码策略迁移 本版调整了密码修改的授权语义: 公共方法 Policy.IsAllowedActions 默认放行 admin:ChangeMyPassword(除非策略显式 Deny),而创建或管理他人的 admin:CreateUser 仍必须显式 Allow。在配套升级后的 Server 与 Console 中,仅拒绝 …

    v3.14.0 于 2026-09-13 发布,源码提交为 827f8109,模块导入路径为 github.com/pgsty/silo-pkg/v3。 密码策略迁移 本版调整了密码修改的授权语义: 公共方法 Policy.IsAllowedActions 默认放行 admin:ChangeMyPassword(除非策略显式 Deny),而创建或管理他人的 admin:CreateUser 仍必须显式 Allow。在配套升级后的 Server 与 Console 中,仅拒绝 …

  • SN-2026-011:修复与发布状态

    发布于 安全编年史

    SecuritySilo

    Featured Image for SN-2026-011:修复与发布状态

    SN-2026-011 于 2026-09-13 在 Server 主分支修复(起始提交 123325430),并已随 Server 20260916 正式发布。Server RELEASE.2026-09-03T13-18-01Z 及更早版本均受影响(同期发布的 silo-pkg v3.14.0 与 mcli 20260913 属于依赖库与客户端版本,不包含服务端二进制修复)。 在未修复版本中,持有合法签名 PUT 请求的调用方可以追加未签名的 x-amz-copy-source 请求头,将该 …

    SN-2026-011 于 2026-09-13 在 Server 主分支修复(起始提交 123325430),并已随 Server 20260916 正式发布。Server RELEASE.2026-09-03T13-18-01Z 及更早版本均受影响(同期发布的 silo-pkg v3.14.0 与 mcli 20260913 属于依赖库与客户端版本,不包含服务端二进制修复)。 在未修复版本中,持有合法签名 PUT 请求的调用方可以追加未签名的 x-amz-copy-source 请求头,将该 …

  • 桶配置复制:来源时间、删除与确定性收敛

    发布于 设计

    设计复制S3

    Featured Image for 桶配置复制:来源时间、删除与确定性收敛

    #77 是已在 Server 20260916(PR #180,提交 48ec10312)中修复的站点复制正确性缺陷。修复前,接收站点将对端事件的来源时间改写为本地到达时间(UTCNow),导致后续真正较新的删除请求因早于本地到达时间而被当作旧事件拒绝;同时部分配置在删除后不再导出时间戳,断连期间遗漏的删除也无法通过自愈(heal)恢复。仅补一个 DELETE 分支无法同时解决这两类问题,确定性收敛必须同时具备来源时间保留、持久化删除墓碑(tombstone)、规范化内容比较键以及整桶元数据锁。 …

    #77 是已在 Server 20260916(PR #180,提交 48ec10312)中修复的站点复制正确性缺陷。修复前,接收站点将对端事件的来源时间改写为本地到达时间(UTCNow),导致后续真正较新的删除请求因早于本地到达时间而被当作旧事件拒绝;同时部分配置在删除后不再导出时间戳,断连期间遗漏的删除也无法通过自愈(heal)恢复。仅补一个 DELETE 分支无法同时解决这两类问题,确定性收敛必须同时具备来源时间保留、持久化删除墓碑(tombstone)、规范化内容比较键以及整桶元数据锁。 …

  • 复制可靠性:删除完成、MRF 可见性与 resync 取消

    发布于 设计

    设计复制S3评审

    Featured Image for 复制可靠性:删除完成、MRF 可见性与 resync 取消

    本文记录随 Server 20260916 交付的三轮复制可靠性修复的问题分析、方案取舍与验收结论: 第一轮(PR #162,合并为 d1105bbb): 修复 #153、#152 与 #137,分别涉及请求入口的操作分类、后台恢复队列的可观测性以及任务取消生命周期。 第二轮(PR #196,提交 0c61128d2): 修复复制工作协程(worker)的删除出口、外层状态聚合与持久化 MRF 标记恢复路径(见第二轮小节)。 第三轮(提交 eb4f5e5b3、254b19ac0 与 …

    本文记录随 Server 20260916 交付的三轮复制可靠性修复的问题分析、方案取舍与验收结论: 第一轮(PR #162,合并为 d1105bbb): 修复 #153、#152 与 #137,分别涉及请求入口的操作分类、后台恢复队列的可观测性以及任务取消生命周期。 第二轮(PR #196,提交 0c61128d2): 修复复制工作协程(worker)的删除出口、外层状态聚合与持久化 MRF 标记恢复路径(见第二轮小节)。 第三轮(提交 eb4f5e5b3、254b19ac0 与 …

  • SigV4 签名头覆盖边界:拒绝未签名的 x-amz-* 请求头

    发布于 设计

    设计安全SigV4CopyObjectPresigned兼容性

    Featured Image for 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 一个请求头签名。此前 …

  • SILO Console 2.4.0 发布

    发布于 发布注记

    ReleaseConsole

    Featured Image for SILO Console 2.4.0 发布

    v2.4.0 于 2026-09-08 发布, 源码为 c103d08e。 已发布行为 对象目录默认每页 100 条,可选 50、100、250、500、1000。每页只发一次 S3 continuation-token 请求;排序、筛选和选择作用于当前页,不扫描整个目录,没有无限制的“全部”模式。 版本删除绑定选定对象,目录删除限制在其前缀内。生命周期编辑保留独立动作和界面未暴露的字段,复制规则删除统一保存。 暂时网络故障不清空会话;处理空版本控制状态、损坏的侧栏偏好与过时的下拉选择。 …

    v2.4.0 于 2026-09-08 发布, 源码为 c103d08e。 已发布行为 对象目录默认每页 100 条,可选 50、100、250、500、1000。每页只发一次 S3 continuation-token 请求;排序、筛选和选择作用于当前页,不扫描整个目录,没有无限制的“全部”模式。 版本删除绑定选定对象,目录删除限制在其前缀内。生命周期编辑保留独立动作和界面未暴露的字段,复制规则删除统一保存。 暂时网络故障不清空会话;处理空版本控制状态、损坏的侧栏偏好与过时的下拉选择。 …

  • mcli 20260903 正式发布

    发布于 发布注记

    发布mcli

    Featured Image for mcli 20260903 正式发布

    发布日期: 2026-09-03 · 版本: RELEASE.2026-09-03T07-13-05Z · 源码: a2ef95c0 距离 mcli 20260806 二十八天,本次发布汇总了客户端此后积累的全部变更。工具链升级到 Go 1.27.1,共享依赖栈与 SILO 家族对齐,silo-pkg 以自有模块路径导入,go.mod 如实描述二进制的构建来源。fork 以来第一个真正的新命令 —— mcli checksum verify —— 到来了,它对端点实际返回的字节只读地核验存储的 …

    发布日期: 2026-09-03 · 版本: RELEASE.2026-09-03T07-13-05Z · 源码: a2ef95c0 距离 mcli 20260806 二十八天,本次发布汇总了客户端此后积累的全部变更。工具链升级到 Go 1.27.1,共享依赖栈与 SILO 家族对齐,silo-pkg 以自有模块路径导入,go.mod 如实描述二进制的构建来源。fork 以来第一个真正的新命令 —— mcli checksum verify —— 到来了,它对端点实际返回的字节只读地核验存储的 …

  • Silo 20260903 正式发布

    发布于 发布注记

    ReleaseSilo

    Featured Image for Silo 20260903 正式发布

    版本日期: 2026-09-03 · 正式发布: 2026-09-04 · 版本: RELEASE.2026-09-03T13-18-01Z · 上一版本: RELEASE.2026-08-06T00-00-00Z SILO 20260903 是首个完整使用 Silo 品牌的版本之后的一次安全与正确性发布,重点收紧核心服务端不变量:客户端 header 不能凭空获得复制权限;浏览器 Origin 不能在鉴权前触发桶元数据 I/O;并发桶配置写入不能彼此静默覆盖;授权与校验和行为进一步对齐 AWS …

    版本日期: 2026-09-03 · 正式发布: 2026-09-04 · 版本: RELEASE.2026-09-03T13-18-01Z · 上一版本: RELEASE.2026-08-06T00-00-00Z SILO 20260903 是首个完整使用 Silo 品牌的版本之后的一次安全与正确性发布,重点收紧核心服务端不变量:客户端 header 不能凭空获得复制权限;浏览器 Origin 不能在鉴权前触发桶元数据 I/O;并发桶配置写入不能彼此静默覆盖;授权与校验和行为进一步对齐 AWS …

  • SILO Server 20260903 发布前复审

    发布于 设计

    DesignReviewSecurityCompatibilityRelease

    Featured Image for SILO Server 20260903 发布前复审

    本文记录 SILO 20260903(RELEASE.2026-09-03T13-18-01Z,对应提交 9b11dc9469e650815b775cb47b039610644f5da4,候选复审提交 6e112d1856d4f3655f30fc81ee47e9f43d50d8f3,对比基线 RELEASE.2026-08-06T00-00-00Z 即 3be10fcc1a44f6620ded0bd303461f9d688cca23)的发布前工程复审:第二轮复审发现了哪些遗漏缺陷、修复边界如何收 …

    本文记录 SILO 20260903(RELEASE.2026-09-03T13-18-01Z,对应提交 9b11dc9469e650815b775cb47b039610644f5da4,候选复审提交 6e112d1856d4f3655f30fc81ee47e9f43d50d8f3,对比基线 RELEASE.2026-08-06T00-00-00Z 即 3be10fcc1a44f6620ded0bd303461f9d688cca23)的发布前工程复审:第二轮复审发现了哪些遗漏缺陷、修复边界如何收 …

  • SILO 20260903 安全说明:SN-2026-006 至 010

    发布于 安全编年史

    安全S3SSE-CReplicationIAM

    Featured Image for SILO 20260903 安全说明:SN-2026-006 至 010

    本公告汇总随 SILO Server 20260903(RELEASE.2026-09-03T13-18-01Z)发布的五项服务端安全修复,涵盖客户端提供密钥加密(SSE-C)、客户端可控复制请求头、管理端账户/组状态变更鉴权以及显式对象版本删除。SN-2026-006 至 SN-2026-010 为 SILO 安全说明编号,对应从上游 minio/minio 代码基线继承并在发布前审计中修复的权限与密码学边界缺陷。 摘要 编号 触发前置条件 缺陷表现 20260903 修复后行为 …

    本公告汇总随 SILO Server 20260903(RELEASE.2026-09-03T13-18-01Z)发布的五项服务端安全修复,涵盖客户端提供密钥加密(SSE-C)、客户端可控复制请求头、管理端账户/组状态变更鉴权以及显式对象版本删除。SN-2026-006 至 SN-2026-010 为 SILO 安全说明编号,对应从上游 minio/minio 代码基线继承并在发布前审计中修复的权限与密码学边界缺陷。 摘要 编号 触发前置条件 缺陷表现 20260903 修复后行为 …

  • 显式版本删除现在要求 DeleteObjectVersion

    发布于 发布注记

    发布安全IAMS3兼容性

    Featured Image for 显式版本删除现在要求 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 不授予权限

    发布于 设计

    设计安全CORSReplicationSSE-C兼容性

    Featured Image for 鉴权前不做 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 第一段路径当成存储桶名称,并在身份认证之前同步从磁盘加载该桶的元数据。 任何携带 …

  • ListMultipartUploads 行为契约与设计权衡

    发布于 设计

    Featured Image for ListMultipartUploads 行为契约与设计权衡

    本文记录 ListMultipartUploads 在完整工程生命周期中的设计与演进:Server 20261018 当前采用的 MinIO 兼容契约、16 盘纠删集容量压测后于 10 月 18 日执行的部分回滚、10 月 17 日无条件磁盘扫描尝试(#243,合入提交 7e9454456)、9 月 16 日可选 strict 模式(#198),以及 8 月 30 日的原始根因分析。 Server 20261018 当前行为契约 Server 20261018 在 main 分支上恢复了传统的 …

    本文记录 ListMultipartUploads 在完整工程生命周期中的设计与演进:Server 20261018 当前采用的 MinIO 兼容契约、16 盘纠删集容量压测后于 10 月 18 日执行的部分回滚、10 月 17 日无条件磁盘扫描尝试(#243,合入提交 7e9454456)、9 月 16 日可选 strict 模式(#198),以及 8 月 30 日的原始根因分析。 Server 20261018 当前行为契约 Server 20261018 在 main 分支上恢复了传统的 …

  • silo-pkg 3.13.0 正式发布

    发布于 发布注记

    发布pkg

    Featured Image for silo-pkg 3.13.0 正式发布

    发布日期: 2026-08-30 · 版本: v3.13.0 · 提交: 215f116 · 仓库: pgsty/silo-pkg 3.13.0 是一个破坏性版本:本模块正式启用独立导入路径 github.com/pgsty/silo-pkg/v3,同时退役 pgsty/silo-go 分支,直接依赖上游 minio-go。维护栈各组件(silo、silo-console 与 mcli)均已在 2026-09-03 / v2.4.0 版本波次完成新路径迁移,详见组件版本矩阵。 版本速览 已发布: …

    发布日期: 2026-08-30 · 版本: v3.13.0 · 提交: 215f116 · 仓库: pgsty/silo-pkg 3.13.0 是一个破坏性版本:本模块正式启用独立导入路径 github.com/pgsty/silo-pkg/v3,同时退役 pgsty/silo-go 分支,直接依赖上游 minio-go。维护栈各组件(silo、silo-console 与 mcli)均已在 2026-09-03 / v2.4.0 版本波次完成新路径迁移,详见组件版本矩阵。 版本速览 已发布: …

  • 只读 Checksum 审计与可靠的 CLI 输出契约

    发布于 设计

    设计S3兼容性Checksummcli

    Featured Image for 只读 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 响应

    发布于 设计

    设计S3SSE-CChecksum兼容性

    Featured Image for 两把 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 脚本

    发布于 设计

    设计配置兼容性运维

    Featured Image for 配置环境文件不是 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 校验和契约

    发布于 设计

    设计S3兼容性校验和

    Featured Image for 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 快捷路径不能把不存在的桶伪装成空桶

    发布于 设计

    设计S3兼容性ListObjects

    Featured Image for 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) 对不存在的桶执行普通 …

  • 一个端点,两种权限:彻底分离用户与组状态

    发布于 设计

    设计IAM安全兼容性

    Featured Image for 一个端点,两种权限:彻底分离用户与组状态

    本文记录 上游议题 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 处理函数过去无论目标状态是什么,都固定 …