PGSTY SILO 博客
-
配置环境文件不是 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 中已交付的契约,并阐述为什么前置条件判断必须位于单池存储 …
-
Silo Console 2.2.0 发布说明
发布日期: 2026-08-26 · 版本: v2.2.0(7dc4258a6)· 仓库: pgsty/silo-console SILO Console 2.2.0 新增面向日志与结构化文本的有界预览,收紧下载错误处理以防止截断的压缩包被当作完整文件交付,修复数据表格行操作的权限门控,将用户启停状态与用户组变更拆分为独立 API,并在写入前校验数据库通知 DSN 与 IAM 策略文档。 在底层,依赖栈迁移到 Go 1.27.0,并切换到 SILO 维护的组件:pgsty/silo-pkg …
发布日期: 2026-08-26 · 版本: v2.2.0(7dc4258a6)· 仓库: pgsty/silo-console SILO Console 2.2.0 新增面向日志与结构化文本的有界预览,收紧下载错误处理以防止截断的压缩包被当作完整文件交付,修复数据表格行操作的权限门控,将用户启停状态与用户组变更拆分为独立 API,并在写入前校验数据库通知 DSN 与 IAM 策略文档。 在底层,依赖栈迁移到 Go 1.27.0,并切换到 SILO 维护的组件:pgsty/silo-pkg …
-
为什么 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),但将其定义为 …
-
silo-pkg 3.12.0 正式发布
发布日期: 2026-08-24 · 版本: v3.12.0 · 提交: 2b087a1 · 仓库: pgsty/silo-pkg 3.12.0 是直接从主线发布的中版本,包含两条主线:第一,为“只有 ARN 命名空间前缀、却没有指定任何资源”的策略增加严格写入保护;第二,把维护基线推进到 Go 1.27 与 etcd 3.7。它新增两个导出的检查/校验方法,将验证过的消费者下限提高到 Go 1.26;同时也是第一个由 SILO 服务端(eee05a17c,SN-2026-005,随 SILO …
发布日期: 2026-08-24 · 版本: v3.12.0 · 提交: 2b087a1 · 仓库: pgsty/silo-pkg 3.12.0 是直接从主线发布的中版本,包含两条主线:第一,为“只有 ARN 命名空间前缀、却没有指定任何资源”的策略增加严格写入保护;第二,把维护基线推进到 Go 1.27 与 etcd 3.7。它新增两个导出的检查/校验方法,将验证过的消费者下限提高到 Go 1.26;同时也是第一个由 SILO 服务端(eee05a17c,SN-2026-005,随 SILO …
-
总量未知时,进度条应该说什么
在 SILO Console v2.1.1 中下载文件夹时,Downloads / Uploads(下载/上传)抽屉会显示 NaN%。尽管后端的流式 ZIP 归档仍在正常传输、底层存储对象也完好无损,但进度条却从“总量未知”错误地跳入了确定进度(determinate)渲染状态——导致运维人员误以为下载已卡死或失败,进而反复点击 Download。 该修复已随 Console 2.2.0(提交 16960f7ab,跟踪议题 #62)发布,并自 Server 20260903(edc8be6ed) …
在 SILO Console v2.1.1 中下载文件夹时,Downloads / Uploads(下载/上传)抽屉会显示 NaN%。尽管后端的流式 ZIP 归档仍在正常传输、底层存储对象也完好无损,但进度条却从“总量未知”错误地跳入了确定进度(determinate)渲染状态——导致运维人员误以为下载已卡死或失败,进而反复点击 Download。 该修复已随 Console 2.2.0(提交 16960f7ab,跟踪议题 #62)发布,并自 Server 20260903(edc8be6ed) …
-
数据库通知统一连接串:#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。 …
-
只预览文本,绝不执行:SILO Console 文本预览设计
SILO Console 支持预览图片、PDF、音频和视频,但在 v2.1.1 中却无法直接查看日常运维最常检查的小型日志、纯文本、JSON 与 XML 对象。即使对象保存了准确的 Content-Type,前端也会在选择预览渲染器之前将其判定为不支持。 恢复旧版浏览器原生 <iframe> 预览虽然简单,却是错误的修法。存储桶中的对象内容完全由上传者控制;一旦将其作为同源 HTML 或 XML 文档加载,一个便利的预览功能就会退化为同源脚本执行边界。 随 Console 2.2.0 交付的设计 …
SILO Console 支持预览图片、PDF、音频和视频,但在 v2.1.1 中却无法直接查看日常运维最常检查的小型日志、纯文本、JSON 与 XML 对象。即使对象保存了准确的 Content-Type,前端也会在选择预览渲染器之前将其判定为不支持。 恢复旧版浏览器原生 <iframe> 预览虽然简单,却是错误的修法。存储桶中的对象内容完全由上传者控制;一旦将其作为同源 HTML 或 XML 文档加载,一个便利的预览功能就会退化为同源脚本执行边界。 随 Console 2.2.0 交付的设计 …
-
Silo 20260806 发布
版本: RELEASE.2026-08-06T00-00-00Z · 提交: 3be10fcc1a44f6620ded0bd303461f9d688cca23 SILO 20260806 是 首个以 Silo 之名发布的版本。上一个版本 20260804 是以 pgsty/minio 名义交付的最后一版;本版本完成了向 github.com/pgsty/silo 的切换,重命名了每一个交付表面——二进制、软件包、容器镜像、systemd 服务、Helm chart——同时刻意原样保留了 …
版本: RELEASE.2026-08-06T00-00-00Z · 提交: 3be10fcc1a44f6620ded0bd303461f9d688cca23 SILO 20260806 是 首个以 Silo 之名发布的版本。上一个版本 20260804 是以 pgsty/minio 名义交付的最后一版;本版本完成了向 github.com/pgsty/silo 的切换,重命名了每一个交付表面——二进制、软件包、容器镜像、systemd 服务、Helm chart——同时刻意原样保留了 …
-
mcli 20260806 发布
发布日期: 2026-08-06 · 版本: RELEASE.2026-08-06T00-00-00Z 距离 mcli 20260804 仅两天,本次发布完成了客户端向 Silo 身份的整体切换。这是一次刻意保持「纯品牌与封闭」性质的发布:--version 与 --help 现在以 Silo 客户端的身份呈现,所有残余的 MinIO SUBNET 外联路径在构建期被关闭,诊断工具链中内置的厂商加密公钥被移除,贡献政策改为无 CLA + 强制 DCO 签署。本周期 零依赖变更、零协议变更 —— …
发布日期: 2026-08-06 · 版本: RELEASE.2026-08-06T00-00-00Z 距离 mcli 20260804 仅两天,本次发布完成了客户端向 Silo 身份的整体切换。这是一次刻意保持「纯品牌与封闭」性质的发布:--version 与 --help 现在以 Silo 客户端的身份呈现,所有残余的 MinIO SUBNET 外联路径在构建期被关闭,诊断工具链中内置的厂商加密公钥被移除,贡献政策改为无 CLA + 强制 DCO 签署。本周期 零依赖变更、零协议变更 —— …
-
Silo Console 2.1.0 发布
发布日期: 2026-08-06 · 版本: v2.1.0 · 仓库: pgsty/silo-console SILO Console 2.1.0 是独立发布 2.0.0 之后的第一个功能版本,主要包含三项改进: 双语界面——全部控制台页面、帮助条目与文档链接支持中英文切换,切换按钮出现在每一页,且不引入新的运行时依赖; Metrics V3 仪表盘——仪表盘从 MinIO Metrics V2 指标迁移到 V3,并针对 V3 改变的底层语义做了显式适配; 边界场景正确性修复——全选框与批量操作 …
发布日期: 2026-08-06 · 版本: v2.1.0 · 仓库: pgsty/silo-console SILO Console 2.1.0 是独立发布 2.0.0 之后的第一个功能版本,主要包含三项改进: 双语界面——全部控制台页面、帮助条目与文档链接支持中英文切换,切换按钮出现在每一页,且不引入新的运行时依赖; Metrics V3 仪表盘——仪表盘从 MinIO Metrics V2 指标迁移到 V3,并针对 V3 改变的底层语义做了显式适配; 边界场景正确性修复——全选框与批量操作 …
-
Silo 20260804 发布
版本: RELEASE.2026-08-04T00-00-00Z · 提交: d88f46ccee345a9c2fabe2d221d9a9e56bc11aec SILO 20260804 是 pgsty/minio 社区分支的一次安全、正确性与发布工程更新。该版本完成 CVE-2026-42600 所开启的节点间存储边界治理,阻止客户端输入冒充服务端计算出的 S3/IAM 策略条件值,恢复流式响应 flush 语义,修复多项 multipart 与版本控制边界问题,加固通知配置迁移,将构建基线升 …
版本: RELEASE.2026-08-04T00-00-00Z · 提交: d88f46ccee345a9c2fabe2d221d9a9e56bc11aec SILO 20260804 是 pgsty/minio 社区分支的一次安全、正确性与发布工程更新。该版本完成 CVE-2026-42600 所开启的节点间存储边界治理,阻止客户端输入冒充服务端计算出的 S3/IAM 策略条件值,恢复流式响应 flush 语义,修复多项 multipart 与版本控制边界问题,加固通知配置迁移,将构建基线升 …
-
SN-2026-019:通知子系统配置键注册缺失与校验报错脱敏
SN-2026-019 涵盖了 Server 20260804(提交 162ded343 与 672c07a0f,pgsty/silo#39)修复的一类通知子系统配置缺陷:通知解析器与旧版配置迁移代码读写了未在 Default*KVS 中注册的配置键,CheckValidKeys 在校验失败时将包含敏感凭据的原始 key=value 拼入错误消息,且 FetchEnabledTargets 在遇到首个校验错误时会直接中止全部通知目标的加载。随后在 Server …
SN-2026-019 涵盖了 Server 20260804(提交 162ded343 与 672c07a0f,pgsty/silo#39)修复的一类通知子系统配置缺陷:通知解析器与旧版配置迁移代码读写了未在 Default*KVS 中注册的配置键,CheckValidKeys 在校验失败时将包含敏感凭据的原始 key=value 拼入错误消息,且 FetchEnabledTargets 在遇到首个校验错误时会直接中止全部通知目标的加载。随后在 Server …
-
SN-2026-018:客户端源地址信任边界、转发头欺骗与 aws:SourceIp 加固
SN-2026-018 修复了 silo-pkg v3.12.0(提交 62f326d)与 Server 20260804(00a8171cb,pgsty/silo#41)中影响 aws:SourceIp IAM 条件求值、审计日志、桶事件通知及管理端 HTTP 追踪的客户端源 IP 欺骗问题:handlers.GetSourceIP 此前默认无条件信任任意 TCP 对端发来的 X-Forwarded-For、X-Real-IP 与 RFC 7239 Forwarded 请求头;即便管理员显式设 …
SN-2026-018 修复了 silo-pkg v3.12.0(提交 62f326d)与 Server 20260804(00a8171cb,pgsty/silo#41)中影响 aws:SourceIp IAM 条件求值、审计日志、桶事件通知及管理端 HTTP 追踪的客户端源 IP 欺骗问题:handlers.GetSourceIP 此前默认无条件信任任意 TCP 对端发来的 X-Forwarded-For、X-Real-IP 与 RFC 7239 Forwarded 请求头;即便管理员显式设 …
-
SN-2026-004:对象级策略授权越界命中桶级变更操作
SN-2026-004 修复了 silo-pkg v3.11.0(提交 3c24ad1、1f97549、d8b1fa7)与 Server 20260804(97b7d2804;上游参考 minio/minio#20449)中的一处 IAM 资源匹配缺陷:在评估桶级 S3 请求(args.ObjectName == "")时,Statement.IsAllowed 会固定在桶名末尾拼接 '/' 生成 "bucket/" 作为待匹配资源字符串,导致原本仅面向桶内对象的通配授权(如 Allow …
SN-2026-004 修复了 silo-pkg v3.11.0(提交 3c24ad1、1f97549、d8b1fa7)与 Server 20260804(97b7d2804;上游参考 minio/minio#20449)中的一处 IAM 资源匹配缺陷:在评估桶级 S3 请求(args.ObjectName == "")时,Statement.IsAllowed 会固定在桶名末尾拼接 '/' 生成 "bucket/" 作为待匹配资源字符串,导致原本仅面向桶内对象的通配授权(如 Allow …
-
SN-2026-003:s3:versionid 条件求值缺陷与请求条件隔离加固
SN-2026-003 与 SN-2026-005 涵盖了随 Server 20260804(提交 80c2c9d03、2f55347f7、eee05a17c 以及 silo-pkg v3.12.0 提交 2b087a1;pgsty/silo#40、pgsty/silo#53)发布的一组 S3 IAM 策略求值加固: SN-2026-003(80c2c9d03):当请求未携带 versionId 时,getConditionValues 依然无条件写入了 …
SN-2026-003 与 SN-2026-005 涵盖了随 Server 20260804(提交 80c2c9d03、2f55347f7、eee05a17c 以及 silo-pkg v3.12.0 提交 2b087a1;pgsty/silo#40、pgsty/silo#53)发布的一组 S3 IAM 策略求值加固: SN-2026-003(80c2c9d03):当请求未携带 versionId 时,getConditionValues 依然无条件写入了 …