跳转到主要内容

PGSTY SILO 博客

  • 条件 DELETE:一个条件对应一个逻辑对象

    发布于 设计

    设计S3兼容性DELETE

    Featured Image for 条件 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 发布说明

    发布于 发布注记

    发布Console

    Featured Image for 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 评审记录

    发布于 设计

    设计S3兼容性校验和

    Featured Image for 为什么 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 兼容性

    发布于 设计

    设计S3兼容性Checksum

    Featured Image for 可选校验和,强制失败:修复 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 正式发布

    发布于 发布注记

    发布pkg安全

    Featured Image for 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 …

  • 总量未知时,进度条应该说什么

    发布于 设计

    设计Console下载

    Featured Image for 总量未知时,进度条应该说什么

    在 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 的兼容性边界

    发布于 设计

    设计通知兼容性

    Featured Image for 数据库通知统一连接串:#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 文本预览设计

    发布于 设计

    设计Console预览安全

    Featured Image for 只预览文本,绝不执行: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 发布

    发布于 发布注记

    发布Silo

    Featured Image for 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 发布

    发布于 发布注记

    发布mcli

    Featured Image for 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 发布

    发布于 发布注记

    发布Console

    Featured Image for 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 发布

    发布于 发布注记

    发布Silo

    Featured Image for 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:通知子系统配置键注册缺失与校验报错脱敏

    发布于 安全编年史

    SecurityNotificationsConfigurationNATSAMQPPostgreSQLMySQLSilo

    Featured Image for 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 加固

    发布于 安全编年史

    SecurityIAMNetworkReverse Proxyaws:SourceIpAuditSilo

    Featured Image for 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:对象级策略授权越界命中桶级变更操作

    发布于 安全编年史

    SecurityIAMBucket PolicyS3AuthorizationSilo

    Featured Image for 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 条件求值缺陷与请求条件隔离加固

    发布于 安全编年史

    SecurityIAMS3VersioningBucket PolicySilo

    Featured Image for 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 依然无条件写入了 …

  • mcli 20260804 发布

    发布于 发布注记

    发布mcli

    Featured Image for mcli 20260804 发布

    发布日期: 2026-08-04 · 版本: RELEASE.2026-08-04T00-00-00Z 这是 pgsty/mc 社区分支自 20260417 以来的首次发布。本次更新修复了一处调试日志泄密问题,彻底切断了客户端与上游发布渠道之间的所有连接,将容器与软件包完全改由本分支自建,并把打包体系从 MinIO 的 pkger 迁移到标准 nFPM,同时首次为 RPM 包提供 GPG 签名。 上游 minio/mc 仓库已于 2026 年 7 月归档。其最后一个提交 77f82e18 正是本 …

    发布日期: 2026-08-04 · 版本: RELEASE.2026-08-04T00-00-00Z 这是 pgsty/mc 社区分支自 20260417 以来的首次发布。本次更新修复了一处调试日志泄密问题,彻底切断了客户端与上游发布渠道之间的所有连接,将容器与软件包完全改由本分支自建,并把打包体系从 MinIO 的 pkger 迁移到标准 nFPM,同时首次为 RPM 包提供 GPG 签名。 上游 minio/mc 仓库已于 2026 年 7 月归档。其最后一个提交 77f82e18 正是本 …

  • Silo Pkg 3.11.0 发布

    发布于 发布注记

    发布pkg

    Featured Image for Silo Pkg 3.11.0 发布

    发布日期: 2026-08-04 · 版本: v3.11.0 · 提交: d8b1fa7 · 仓库: pgsty/silo-pkg 这是本分支的 第一个定版。它恢复了上游 minio/minio#20449 所报告的 IAM 桶/对象资源边界:策略条件键绕过修复、三个 LDAP 连接缺陷、证书监听器泄漏、有种子 RNG 的缺陷,以及模块真实的最低 Go 版本。 警告 升级前需要确认两件事 本版本收紧了鉴权。 十二个桶级写操作不再能通过 arn:aws:s3:::bucket/* 这样的对象级资源 …

    发布日期: 2026-08-04 · 版本: v3.11.0 · 提交: d8b1fa7 · 仓库: pgsty/silo-pkg 这是本分支的 第一个定版。它恢复了上游 minio/minio#20449 所报告的 IAM 桶/对象资源边界:策略条件键绕过修复、三个 LDAP 连接缺陷、证书监听器泄漏、有种子 RNG 的缺陷,以及模块真实的最低 Go 版本。 警告 升级前需要确认两件事 本版本收紧了鉴权。 十二个桶级写操作不再能通过 arn:aws:s3:::bucket/* 这样的对象级资源 …

  • Silo Console 2.0.0 发布

    发布于 发布注记

    发布Console

    Featured Image for Silo Console 2.0.0 发布

    发布日期: 2026-08-04 · 版本: v2.0.0 · 仓库: pgsty/silo-console SILO Console 2.0.0 是这套对象存储管理控制台以独立项目身份发布的第一个主版本。它从 georgmangold/console 的 v1.9.1 维护线继续演进,完成了三件事: 建立独立身份——产品名称、视觉系统、文档入口、源码归属与发布链路全部迁移到 SILO 项目体系,同时保留 Go 模块路径、环境变量等兼容契约; 重塑用户界面——登录页、主题系统、仪表盘与全站细节按 …

    发布日期: 2026-08-04 · 版本: v2.0.0 · 仓库: pgsty/silo-console SILO Console 2.0.0 是这套对象存储管理控制台以独立项目身份发布的第一个主版本。它从 georgmangold/console 的 v1.9.1 维护线继续演进,完成了三件事: 建立独立身份——产品名称、视觉系统、文档入口、源码归属与发布链路全部迁移到 SILO 项目体系,同时保留 Go 模块路径、环境变量等兼容契约; 重塑用户界面——登录页、主题系统、仪表盘与全站细节按 …

  • CompleteMultipartUpload 重复分片号漏洞分析与修复

    发布于 安全编年史

    S3Multipart UploadCorrectnessSilo

    Featured Image for CompleteMultipartUpload 重复分片号漏洞分析与修复

    在 S3 API 的 CompleteMultipartUpload 请求中,协议要求完成清单 XML 中的分片号(PartNumber)必须严格递增。直到 Server 20260725 为止,SILO 一直使用 sort.SliceIsSorted 配合严格小于号 < 来校验这一不变量——但这套写法实际上校验的是“非递减序”,会放行 [1, 1] 这类包含相邻重复分片号的列表,导致同一个底层分片在最终对象中被重复拼接。Server 20260804(pgsty/silo#49)将其替换为显式 …

    在 S3 API 的 CompleteMultipartUpload 请求中,协议要求完成清单 XML 中的分片号(PartNumber)必须严格递增。直到 Server 20260725 为止,SILO 一直使用 sort.SliceIsSorted 配合严格小于号 < 来校验这一不变量——但这套写法实际上校验的是“非递减序”,会放行 [1, 1] 这类包含相邻重复分片号的列表,导致同一个底层分片在最终对象中被重复拼接。Server 20260804(pgsty/silo#49)将其替换为显式 …