PGSTY SILO 博客
-
SILO Console 2.4.1 发布
SILO Console v2.4.1 于 2026 年 9 月 16 日发布,源码为 1360e26d976d。 本版接入 pkg v3.14.1 与 mcli 20260916,收紧匿名分享代理,支持多对象流式 ZIP 下载,并提供带签名和构建溯源的发布制品。 共享下载 #52 的修复将匿名代理限制为 配置的 S3 源站上的对象内容 GET 请求,拒绝重定向、系统路径和通过查询参数选择的非下载操作。 公开对象、预签名链接和指定版本下载继续可用。不需要新增一个关闭分享的环境变量。 感谢 …
SILO Console v2.4.1 于 2026 年 9 月 16 日发布,源码为 1360e26d976d。 本版接入 pkg v3.14.1 与 mcli 20260916,收紧匿名分享代理,支持多对象流式 ZIP 下载,并提供带签名和构建溯源的发布制品。 共享下载 #52 的修复将匿名代理限制为 配置的 S3 源站上的对象内容 GET 请求,拒绝重定向、系统路径和通过查询参数选择的非下载操作。 公开对象、预签名链接和指定版本下载继续可用。不需要新增一个关闭分享的环境变量。 感谢 …
-
silo-pkg 3.14.1 发布
v3.14.1 从 fa657ef4 发布。 这是 github.com/pgsty/silo-pkg/v3 的依赖与工具更新; 相对 v3.14.0 的差异没有修改包的 Go 源码或公开 API。 依赖变化 JWX 从 v3.2.0 升至 v3.3.0。上游发布说明 将自定义 JSON 字段名编码时缺少转义的问题标识为 GHSA-4cf7-xm37-g63h。可利用性取决于是否接受攻击者控制的自定义 claim 名称; 本包 env 的 JWT 路径使用已注册的 claim 名称,仅有依赖关系 …
v3.14.1 从 fa657ef4 发布。 这是 github.com/pgsty/silo-pkg/v3 的依赖与工具更新; 相对 v3.14.0 的差异没有修改包的 Go 源码或公开 API。 依赖变化 JWX 从 v3.2.0 升至 v3.3.0。上游发布说明 将自定义 JSON 字段名编码时缺少转义的问题标识为 GHSA-4cf7-xm37-g63h。可利用性取决于是否接受攻击者控制的自定义 claim 名称; 本包 env 的 JWT 路径使用已注册的 claim 名称,仅有依赖关系 …
-
Go 1.27 TLS 默认值与 OIDC Discovery 故障形态
SILO 工具链迁移到 Go 1.27 后,Server TLS 修复 48e184652 (“fix(tls): honor Go key exchange defaults across transports”)移除了显式曲线覆盖。本文记录 TLS 层的变化、issue #154 调查中形成的按阶段诊断方法,以及管理员在身份系统启动即失踪时需要的事实。 发布边界,截至 2026-09-16: Server 20260903 已使用 Go 1.27.1,但不包含 48e184652;后者是 …
SILO 工具链迁移到 Go 1.27 后,Server TLS 修复 48e184652 (“fix(tls): honor Go key exchange defaults across transports”)移除了显式曲线覆盖。本文记录 TLS 层的变化、issue #154 调查中形成的按阶段诊断方法,以及管理员在身份系统启动即失踪时需要的事实。 发布边界,截至 2026-09-16: Server 20260903 已使用 Go 1.27.1,但不包含 48e184652;后者是 …
-
请求头截止时间:绝对头部上限与滚动的正文空闲超时
本文记录 Server HTTP 读取截止时间的修复,作为 PR #196 的一部分合入 main(修复 055030ea5)。 截至 2026-09-16: 修复在核验过的 main 40220bd836cb 上;不在已发布的 Server 20260903 中。 证据类别: 合成实验——直接 TCP 对照(头部限 100 ms、头部用 400 ms 完成,标准 Go 拒绝而旧 SILO 返回 204),以及真实单盘进程探针(flag 与环境变量两种入口都拒绝 400 ms 慢头,且健康请求继 …
本文记录 Server HTTP 读取截止时间的修复,作为 PR #196 的一部分合入 main(修复 055030ea5)。 截至 2026-09-16: 修复在核验过的 main 40220bd836cb 上;不在已发布的 Server 20260903 中。 证据类别: 合成实验——直接 TCP 对照(头部限 100 ms、头部用 400 ms 完成,标准 Go 拒绝而旧 SILO 返回 204),以及真实单盘进程探针(flag 与环境变量两种入口都拒绝 400 ms 慢头,且健康请求继 …
-
副本元数据归一化:可信复制不得重新注入什么
本文记录可信复制接收端如何为副本恢复元数据的修复,合入 Server main 为 PR #194(修复 4fcdf37ce,合并为 9f3037e941)。 截至 2026-09-16: 修复在核验过的 main 40220bd836cb 上;不在已发布的 Server 20260903 中。 来源: 生产逻辑采纳 Mikhail Khadarenka 的 PR #187;合并后的改动保留其作者身份,并把范围收敛到经评审验证的边界。 证据类别: 针对真实单盘与 16 盘纠删后端的 64 叶 …
本文记录可信复制接收端如何为副本恢复元数据的修复,合入 Server main 为 PR #194(修复 4fcdf37ce,合并为 9f3037e941)。 截至 2026-09-16: 修复在核验过的 main 40220bd836cb 上;不在已发布的 Server 20260903 中。 来源: 生产逻辑采纳 Mikhail Khadarenka 的 PR #187;合并后的改动保留其作者身份,并把范围收敛到经评审验证的边界。 证据类别: 针对真实单盘与 16 盘纠删后端的 64 叶 …
-
复制标签排序:修订时间戳、墓碑与复活
本文记录对象标签在复制中如何保序的两个缺陷的分析与修复,分别合入 Server main 为 PR #193(修复 03027727d)与 PR #196(修复 680eac66e)。 截至 2026-09-16: 两个修复均已在核验过的 main 40220bd836cb 上;不在已发布的 Server 20260903 中,请用链接的 PR 识别包含它们的构建。 交付边界: 仅源码级验收(回归测试 + R4–R8 集成运行,PR #196 的 11 项检查全部通过)。本记录不确立任何 …
本文记录对象标签在复制中如何保序的两个缺陷的分析与修复,分别合入 Server main 为 PR #193(修复 03027727d)与 PR #196(修复 680eac66e)。 截至 2026-09-16: 两个修复均已在核验过的 main 40220bd836cb 上;不在已发布的 Server 20260903 中,请用链接的 PR 识别包含它们的构建。 交付边界: 仅源码级验收(回归测试 + R4–R8 集成运行,PR #196 的 11 项检查全部通过)。本记录不确立任何 …
-
联邦 CopyObject:保持目标对象契约
2026-09-16 源码状态:本文记录 main 中 #157、#159、#163、#177 和 #179 的 CopyObject 修复,Server 20260903 尚未包含。讨论对象是把复制作为 PutObject 转发到另一部署的旧 etcd 存储桶联邦路径,不是桶/站点复制调度器。 转发一次逻辑字节,由目标端加密 代理读取源的逻辑字节,按需解密和解压,并向目标声明逻辑长度。不能先在本地加密/压缩,又要求远端再做一次。SSE-C 源读取仍需源密钥及安全传输。新对象由客户端显式 SSE …
2026-09-16 源码状态:本文记录 main 中 #157、#159、#163、#177 和 #179 的 CopyObject 修复,Server 20260903 尚未包含。讨论对象是把复制作为 PutObject 转发到另一部署的旧 etcd 存储桶联邦路径,不是桶/站点复制调度器。 转发一次逻辑字节,由目标端加密 代理读取源的逻辑字节,按需解密和解压,并向目标声明逻辑长度。不能先在本地加密/压缩,又要求远端再做一次。SSE-C 源读取仍需源密钥及安全传输。新对象由客户端显式 SSE …
-
多池对象一致性
2026-09-16 源码状态:#178 修复多池修改顺序,随后 #207 把当前对象选择扩展到条件 PUT。它们已合入 main,但不在 Server 20260903 中,关闭了 #133 与 #144 跟踪的源码缺陷;这不构成新发布产物的验收。 一个键可以有多份物理副本 扩池、退役或中断的清理可能在不同池留下同一个键的副本。逐 set 锁不能与选择另一池的写入串行化;读取第一个副本也不能证明其 ETag、标签或保留期代表逻辑对象。 相关失败包括:旧 ETag 错误满足条件写入或删除,较新的 …
2026-09-16 源码状态:#178 修复多池修改顺序,随后 #207 把当前对象选择扩展到条件 PUT。它们已合入 main,但不在 Server 20260903 中,关闭了 #133 与 #144 跟踪的源码缺陷;这不构成新发布产物的验收。 一个键可以有多份物理副本 扩池、退役或中断的清理可能在不同池留下同一个键的副本。逐 set 锁不能与选择另一池的写入串行化;读取第一个副本也不能证明其 ETag、标签或保留期代表逻辑对象。 相关失败包括:旧 ETag 错误满足条件写入或删除,较新的 …
-
持久化 IAM 撤销
2026-09-16 源码状态:#191 与 #192 已合入 main,但不在已发布的 Server 20260903 中。它们改变 IAM 持久状态,要求协调升级。执行时使用升级恢复手册,安全边界见 SN-2026-013。 SILO 保留已删除 IAM 记录的版本,使离线站点重新连接后不能恢复旧身份或旧授权。覆盖内置用户、服务账号、组、策略文档,以及用户、STS 父身份和组各自命名空间中的策略映射。内置用户删除后,即使有意重建同名用户,旧服务账号、STS 凭证与组授权也不能因此复活。 排序 …
2026-09-16 源码状态:#191 与 #192 已合入 main,但不在已发布的 Server 20260903 中。它们改变 IAM 持久状态,要求协调升级。执行时使用升级恢复手册,安全边界见 SN-2026-013。 SILO 保留已删除 IAM 记录的版本,使离线站点重新连接后不能恢复旧身份或旧授权。覆盖内置用户、服务账号、组、策略文档,以及用户、STS 父身份和组各自命名空间中的策略映射。内置用户删除后,即使有意重建同名用户,旧服务账号、STS 凭证与组授权也不能因此复活。 排序 …
-
SSE-C 副本完整性
2026-09-16 源码状态:#122、#123、#124、#126 和 #134 已在 main,但不在已发布的 Server 20260903 中。此前零字节/属性读取认证与目标密钥 checksum 响应修复已随 20260903 发布;不能把所有 SSE-C 修复当作同一次发布。 密文与信任 普通 SSE-C 请求提供客户密钥,操作明文。经过授权的副本传输可以携带原始密文和保留原对象所需的密封对象密钥元数据。目标必须原样存储这些字节,再加密一次会产生不可读的双重加密对象。内部标记本身不 …
2026-09-16 源码状态:#122、#123、#124、#126 和 #134 已在 main,但不在已发布的 Server 20260903 中。此前零字节/属性读取认证与目标密钥 checksum 响应修复已随 20260903 发布;不能把所有 SSE-C 修复当作同一次发布。 密文与信任 普通 SSE-C 请求提供客户密钥,操作明文。经过授权的副本传输可以携带原始密文和保留原对象所需的密封对象密钥元数据。目标必须原样存储这些字节,再加密一次会产生不可读的双重加密对象。内部标记本身不 …
-
Object Lock 复制排序
2026-09-16 发布边界:f4c1286c9 已随 Server 20260903 发布。后续仅时间戳删除、SSE-C 重传和跨池修复见 #129、#134、#178,它们在 main 中,但不在该发布中。公告台账 记录原始排序缺陷。 重建元数据前保留旧状态 副本 COPY 曾在比较保留期和 legal hold 时间戳之前,就用入站请求重建元数据。旧时间戳因此丢失,旧请求看起来也能成为权威更新;legal hold 时间戳还写错到保留期时间戳键。第一批修复在重建目标 map 前捕获已存状 …
2026-09-16 发布边界:f4c1286c9 已随 Server 20260903 发布。后续仅时间戳删除、SSE-C 重传和跨池修复见 #129、#134、#178,它们在 main 中,但不在该发布中。公告台账 记录原始排序缺陷。 重建元数据前保留旧状态 副本 COPY 曾在比较保留期和 legal hold 时间戳之前,就用入站请求重建元数据。旧时间戳因此丢失,旧请求看起来也能成为权威更新;legal hold 时间戳还写错到保留期时间戳键。第一批修复在重建目标 map 前捕获已存状 …
-
九月安全修复:载荷完整性、IAM 撤销与 Console 分享
本文记录截至 9 月 16 日的三项修复及交付边界。编号属于 SILO 本地安全台账,不是 CVE,也不代表已分配 CVSS 分数。 持续维护的索引见安全公告台账。 发现 修复源码 9 月 16 日的发布状态 SN-2026-012:预签名载荷完整性 Server c4b5e1cb4,PR #177 不在 Server RELEASE.2026-09-03T13-18-01Z 中,等待后续 Server 发布 SN-2026-013:持久 IAM 撤销 Server PR #191 / #192 …
本文记录截至 9 月 16 日的三项修复及交付边界。编号属于 SILO 本地安全台账,不是 CVE,也不代表已分配 CVSS 分数。 持续维护的索引见安全公告台账。 发现 修复源码 9 月 16 日的发布状态 SN-2026-012:预签名载荷完整性 Server c4b5e1cb4,PR #177 不在 Server RELEASE.2026-09-03T13-18-01Z 中,等待后续 Server 发布 SN-2026-013:持久 IAM 撤销 Server PR #191 / #192 …
-
mcli 20260916 发布
版本: RELEASE.2026-09-16T00-00-00Z · 软件包: 20260916000000.0.0 · 源码: e952aa78f10a。 相对 20260913 的变化 接入 silo-pkg v3.14.1、上游 minio-go v7.3.1-0.20260915093545-32e1f32cb176 和 JWX v3.3.0。CopyObject 会重试并报告 HTTP 200 响应内嵌的 S3 错误,避免复制失败后授权 mv 删除源对象;JWX 正确转义输出 JSON …
版本: RELEASE.2026-09-16T00-00-00Z · 软件包: 20260916000000.0.0 · 源码: e952aa78f10a。 相对 20260913 的变化 接入 silo-pkg v3.14.1、上游 minio-go v7.3.1-0.20260915093545-32e1f32cb176 和 JWX v3.3.0。CopyObject 会重试并报告 HTTP 200 响应内嵌的 S3 错误,避免复制失败后授权 mv 删除源对象;JWX 正确转义输出 JSON …
-
mcli 20260913 发布
版本: RELEASE.2026-09-13T00-00-00Z · 软件包: 20260913000000.0.0 · 源码: 4f609a4d。 相对 20260903 的变化 mirror --remove --watch 保留目标端历史版本。 服务重启的 dry run 只显示计划,不执行重启;明确非交互环境行为。 传输与 S3 Select 出错时返回失败;空上传遵守显式校验和参数;quiet 模式下仍输出 pipe JSON。 布尔环境变量接受 on/off,修复跨平台 …
版本: RELEASE.2026-09-13T00-00-00Z · 软件包: 20260913000000.0.0 · 源码: 4f609a4d。 相对 20260903 的变化 mirror --remove --watch 保留目标端历史版本。 服务重启的 dry run 只显示计划,不执行重启;明确非交互环境行为。 传输与 S3 Select 出错时返回失败;空上传遵守显式校验和参数;quiet 模式下仍输出 pipe JSON。 布尔环境变量接受 on/off,修复跨平台 …
-
silo-pkg 3.14.0 发布
v3.14.0 于 2026-09-13 发布, 源码为 827f8109。 消费者直接引用 github.com/pgsty/silo-pkg/v3。 密码策略迁移 本版改变授权语义。 公共方法 Policy.IsAllowedActions 默认报告 admin:ChangeMyPassword,除非被明确拒绝; admin:CreateUser 必须显式授权。配套 Server/Console 中,单独拒绝 CreateUser 不再锁定调用者自己的密码, 拒绝 …
v3.14.0 于 2026-09-13 发布, 源码为 827f8109。 消费者直接引用 github.com/pgsty/silo-pkg/v3。 密码策略迁移 本版改变授权语义。 公共方法 Policy.IsAllowedActions 默认报告 admin:ChangeMyPassword,除非被明确拒绝; admin:CreateUser 必须显式授权。配套 Server/Console 中,单独拒绝 CreateUser 不再锁定调用者自己的密码, 拒绝 …
-
SN-2026-011:修复与发布状态
截至 2026-09-13: SN-2026-011 已在 Server 主分支修复,起始提交为 123325430。 最新公开 Server RELEASE.2026-09-03T13-18-01Z 及此前公开版本仍受影响。 pkg v3.14.0、mcli 20260913 发布不代表已经发布修复版 Server。 持有签名 PUT 请求的一方可以添加未签名的 x-amz-copy-source,将获准写入变成对签名密钥有权读取的其他对象的复制。 如果目标允许匿名读取,被复制的私有内容可能因 …
截至 2026-09-13: SN-2026-011 已在 Server 主分支修复,起始提交为 123325430。 最新公开 Server RELEASE.2026-09-03T13-18-01Z 及此前公开版本仍受影响。 pkg v3.14.0、mcli 20260913 发布不代表已经发布修复版 Server。 持有签名 PUT 请求的一方可以添加未签名的 x-amz-copy-source,将获准写入变成对签名密钥有权读取的其他对象的复制。 如果目标允许匿名读取,被复制的私有内容可能因 …
-
桶配置复制:来源时间、删除与确定性收敛
#77 是已复现的站点复制正确性问题。接收端把来源时间改成到达时间,可能拒绝真正较新的删除;部分配置删除后不再导出时间,断线期间遗漏的删除也无法被 heal 找回。单独补一个 DELETE 分支不能解决这两个问题。 合并状态(2026-09-12): 修复与研究归档已通过 PR #180 合入 main(48ec10312),#77 已关闭。合并前 9 项 CI 检查全部通过。 评审边界: 计划经过四轮 Claude Code Opus 5 Max 审查,最后两轮通过;实现完整审查、修正复审和最 …
#77 是已复现的站点复制正确性问题。接收端把来源时间改成到达时间,可能拒绝真正较新的删除;部分配置删除后不再导出时间,断线期间遗漏的删除也无法被 heal 找回。单独补一个 DELETE 分支不能解决这两个问题。 合并状态(2026-09-12): 修复与研究归档已通过 PR #180 合入 main(48ec10312),#77 已关闭。合并前 9 项 CI 检查全部通过。 评审边界: 计划经过四轮 Claude Code Opus 5 Max 审查,最后两轮通过;实现完整审查、修正复审和最 …
-
复制可靠性:删除完成、MRF 可见性与 resync 取消
本文记录 #153、#152、#137 的分析、方案取舍、评审与实施结论。三者属于同一组复制可靠性问题,但分别发生在操作分类、后台恢复可见性和任务生命周期上,不能靠一个统一的重试补丁解决。 截至 2026-09-09: PR #162 已合并为 d1105bbb,三个 issue 均已关闭。被测 PR head 的八项检查与合并后主干的 Go CI、VulnCheck 全部通过。 第二轮,2026-09-16: PR #196(修复 0c61128d2,验证记录 aea3882c9)修复了复制 …
本文记录 #153、#152、#137 的分析、方案取舍、评审与实施结论。三者属于同一组复制可靠性问题,但分别发生在操作分类、后台恢复可见性和任务生命周期上,不能靠一个统一的重试补丁解决。 截至 2026-09-09: PR #162 已合并为 d1105bbb,三个 issue 均已关闭。被测 PR head 的八项检查与合并后主干的 Go CI、VulnCheck 全部通过。 第二轮,2026-09-16: PR #196(修复 0c61128d2,验证记录 aea3882c9)修复了复制 …
-
未签名的 Header 不属于请求
本文记录 SILO 的未签名头覆盖修复,核心提交为 123325430,已通过 PR #173 合并,台账编号 SN-2026-011。该问题由 Oren Yomtov 针对已发布版本报告,并在本地两条签名路径上均已复现。 2026-09-11 状态: 原始修复已推送,并通过 PR #173 合并。下文的后续签名与正文校验修复也已通过 PR #177 合并,8 项 PR 检查全部通过。源码验证与正式发布分别计数:当前已发布的 9 月 3 日 Server 版本尚未包含这些修复。 范围: …
本文记录 SILO 的未签名头覆盖修复,核心提交为 123325430,已通过 PR #173 合并,台账编号 SN-2026-011。该问题由 Oren Yomtov 针对已发布版本报告,并在本地两条签名路径上均已复现。 2026-09-11 状态: 原始修复已推送,并通过 PR #173 合并。下文的后续签名与正文校验修复也已通过 PR #177 合并,8 项 PR 检查全部通过。源码验证与正式发布分别计数:当前已发布的 9 月 3 日 Server 版本尚未包含这些修复。 范围: …
-
SILO Console 2.4.0 发布
v2.4.0 于 2026-09-08 发布, 源码为 c103d08e。 9 月 16 日更新: 当前版本为 Console v2.4.1。本篇保留 v2.4.0 的行为与依赖记录。 已发布行为 对象目录默认每页 100 条,可选 50、100、250、500、1000。每页只发一次 S3 continuation-token 请求;排序、筛选和选择作用于当前页,不扫描整个目录,没有无限制的“全部”模式。 版本删除绑定选定对象,目录删除限制在其前缀内。生命周期编辑保留独立动作和界面未暴露的字段 …
v2.4.0 于 2026-09-08 发布, 源码为 c103d08e。 9 月 16 日更新: 当前版本为 Console v2.4.1。本篇保留 v2.4.0 的行为与依赖记录。 已发布行为 对象目录默认每页 100 条,可选 50、100、250、500、1000。每页只发一次 S3 continuation-token 请求;排序、筛选和选择作用于当前页,不扫描整个目录,没有无限制的“全部”模式。 版本删除绑定选定对象,目录删除限制在其前缀内。生命周期编辑保留独立动作和界面未暴露的字段 …