Debian 因 33 个 CVE 对 rsync 进行重大升级
摘要
Debian 安全维护者 Samuel Henrique 将 rsync 升级到 3.5.0,而不是回移补丁来修复 33 个 CVE,此举引入了行为变更,包括更严格的符号链接处理、更严格的 rsyncd 访问控制,以及 rsync-ssl 中的证书验证。
<strong>apt-listchanges --which=both -f text --since=3.4.1+ds1-5+deb13u4 <br>
/var/cache/apt/archives/rsync_3.5.0+ds1-0+deb13u1_amd64.deb
apt-listchanges: Reading changelogs...
apt-listchanges: News</strong>
<p>rsync (3.5.0+ds1-0+deb13u1) trixie-security; urgency=medium</p>
<p>为了修复 33 个 CVE,我决定将软件包升级到 3.5.0,而不是逐个回移所有补丁。在分析了此次升级带来的额外变更(这些变更不包含在 CVE 修复中)之后,我得出结论:与另一种方案相比,这种方法风险更低。</p>
<p>本次更新包含行为变更,所有变更均源自 CVE 修复本身,并非仅由版本升级引起。以下列出最可能导致现有配置失效的变更;完整列表见 /usr/share/doc/rsync/NEWS.md.gz。</p>
<p>运维人员提供的路径将不再通过不受信任的符号链接进行解析。目标目录以及 --backup-dir、--temp-dir、--partial-dir、--link-dest、--compare-dest、--copy-dest、--log-file、--password-file、--files-from、--include-from、--exclude-from、--write-batch、--read-batch 和 --filter 合并文件的参数,现在都按路径分量逐一解析,仅在符号链接属于 root 或运行 rsync 的用户时才跟随;属于其他任何用户的符号链接将被拒绝,并提示 "refusing to follow a symlink owned by an untrusted user"。--insecure-links 可恢复旧行为,但仅对本地生效,守护进程(daemon)永远不会遵循它。对于受信任的单一模块,请在该模块中设置 "insecure links = yes"。</p>
<p>rrsync 在每次调用时都会拒绝 --debug。当被限制在某个子目录内时,它还会拒绝 --copy-unsafe-links,传递新的 --confine-root 使服务器不会解析到该目录之外的客户端指定的 filter 合并文件,并在接收时传递 --drop-D,这样上传将无法在该目录中创建设备或特殊文件("skipping non-regular file")。除此之外,普通的 "rsync -a" 仍然可以正常工作。</p>
<p>--chmod=a+s 现在会同时设置 setuid 和 setgid 位,与 chmod(1) 保持一致;此前仅设置 setuid。</p>
<p>rsyncd 中可能改变谁能访问的变更:</p>
<ul>
<li>在没有 "proxy protocol hosts" 的情况下配置 "proxy protocol = true",现在会拒绝所有连接并在启动时发出警告,而不是信任客户端提供的 PROXY 头。</li>
<li>当已配置的主机名无法解析时(默认使用 "forward lookup"),"hosts deny" 现在会采取默认拒绝(fail closed)策略,因此之前被无法解析的拒绝条目放行的主机现在会被阻止。</li>
<li>以逗号开头的 "auth users" 值现在仅按逗号分隔,与文档一致,因此包含空格的组名在 deny 或 :ro 规则中此前被静默忽略,现在会生效。</li>
<li>"hosts allow" / "hosts deny" 的模式现在也会在 [...] 括号表达式内进行大小写折叠,因此类似 [A-Z]* 的规则可以匹配此前被遗漏的主机。</li>
<li>客户端请求的 --compress-threads 上限为 8。</li>
</ul>
<p>rsync-ssl 现在会验证服务器证书。默认的 openssl 后端还会将其绑定到所请求的主机名,因此对其他名称有效的证书现在会被拒绝。stunnel 和 gnutls 后端在设置 RSYNC_SSL_CA_CERT,或设置 RSYNC_SSL_ALLOW_INSECURE_STUNNEL=1 / RSYNC_SSL_ALLOW_INSECURE_GNUTLS=1 以选择退出之前,将拒绝运行。</p>
<p>-- Samuel Henrique <a href="mailto:[email protected]" rel="ugc">[email protected]</a> Tue, 15 Sep 2026 18:46:30 -0700</p>
查看缓存全文
缓存时间: 2026/10/01 02:19
# 因 33 个 CVE,Debian 进行了 rsync 大版本升级
来源:https://lobste.rs/s/sqyhgt/major_rsync_upgrade_debian_because_33
**apt-listchanges --which=both -f text --since=3.4.1+ds1-5+deb13u4 /var/cache/apt/archives/rsync_3.5.0+ds1-0+deb13u1_amd64.deb
apt-listchanges: 正在读取更新日志……
apt-listchanges: 新闻**
rsync (3.5.0+ds1-0+deb13u1) trixie-security;紧急程度:medium
为了修复 33 个 CVE,我决定将该软件包升级到 3.5.0,而不是逐个移植补丁。在分析了本次升级引入的、不包含在 CVE 修复中的额外变更后,我得出结论:与逐个移植补丁相比,这种做法的风险更低。
本次更新包含行为变更,而这些变更全部源自 CVE 修复本身,并非版本升级所独有。最有可能导致现有配置失效的变更列在此处;完整列表请参见 /usr/share/doc/rsync/NEWS.md.gz。
由操作者提供的路径不再跟随不可信的符号链接。目标目录以及 --backup-dir、--temp-dir、--partial-dir、--link-dest、--compare-dest、--copy-dest、--log-file、--password-file、--files-from、--include-from、--exclude-from、--write-batch、--read-batch 和 --filter 合并文件的参数,现在都按路径分量逐级解析;只有当符号链接的所有者是 root 或运行 rsync 的用户时才会跟随该链接;其他所有者拥有的符号链接将被拒绝,并提示 "refusing to follow a symlink owned by an untrusted user"。--insecure-links 可以恢复旧行为,但它仅对本地操作生效,守护进程永远不会遵循它。如果只有一个可信模块,请在该模块中设置 "insecure links = yes"。
rrsync 现在每次调用都会拒绝 --debug。当被限制在某个子目录时,它还会拒绝 --copy-unsafe-lintks,传递新的 --confine-root 以便服务端不会在该目录之外解析客户端指定的过滤合并文件,并在接收数据时传递 --drop-D,从而阻止上传在该目录中创建设备文件或特殊文件(提示 "skipping non-regular file")。普通的 "rsync -a" 则仍然可以正常工作。
--chmod=a+s 现在会同时设置 setuid 和 setgid 位,与 chmod(1) 保持一致;此前它只会设置 setuid。
可能影响谁能连接进来的 rsyncd 变更:
- 未配置 "proxy protocol hosts" 时使用 "proxy protocol = true",现在会拒绝所有连接并在启动时发出警告,而不是信任客户端提供的 PROXY 头。
- 当配置的主机名无法解析时(默认情况下为 "forward lookup"),"hosts deny" 现在会采用 fail-closed 策略,因此此前因 deny 条目无法解析而被放行的主机现在会被阻止。
- 以逗号开头的 "auth users" 值现在按照文档说明仅以逗号分隔,因此此前被静默忽略的、针对名称中包含空格的组所设置的 deny 或 :ro 规则现在会生效。
- "hosts allow" / "hosts deny" 的模式匹配现在对 [...] 括号表达式内的内容也会进行大小写折叠,因此像 [A-Z]* 这样的规则会匹配到它过去所遗漏的主机。
- 客户端请求的 --compress-threads 上限为 8。
rsync-ssl 现在会验证服务器证书。默认的 openssl 后端还会将证书与所请求的主机名绑定,因此适用于其他名称的证书现在会被拒绝。stunnel 和 gnutls 后端除非设置了 RSYNC_SSL_CA_CERT,或设置 RSYNC_SSL_ALLOW_INSECURE_STUNNEL=1 / RSYNC_SSL_ALLOW_INSECURE_GNUTLS=1 来显式放弃安全检查,否则拒绝运行。
—— Samuel Henrique [[email protected]](mailto:[email protected])
2026 年 9 月 15 日星期二 18:46:30 -0700
相似文章
我的极简、内存安全的Go rsync如何规避漏洞
深入探讨极简、内存安全的Go实现的rsync如何避免原始C版本中存在的十几个漏洞,并与OpenBSD的openrsync及纵深防御技术进行对比。
rsync 与愤怒
Rsync 维护者 Andrew Tridgell 为其使用 AI 工具(Claude, Codex, Gemini)以提升安全性并重写测试套件的行为进行辩护,回应了来自开源社区的强烈反对。
Linux 内核中发现多个漏洞
Debian 发布了安全公告 DSA-6528-1,针对其 Linux 内核软件包,公开并修补了大量涵盖 2024 年至 2026 年的 CVE 漏洞。此次更新修复了众多内核漏洞,建议用户及时应用该安全修复。
OpenSSH 10.6 发布
OpenSSH 10.6(10.6p1)已于 2026-10-06 发布,包含多项安全修复、对 scp -R 和旧平台 sshd 支持的弃用通知,以及更严格的用户名和路径校验。开发团队特别指出 AI 辅助安全漏洞报告数量激增,并表示 AI 发现的漏洞往往会被独立地再次发现,因此他们将更频繁地发布版本,以便更快地推出修复。
Openrsync:由OpenBSD团队开发的rsync实现
Openrsync是OpenBSD团队采用BSD许可重新实现的rsync,兼容现代rsync协议并支持Unix系统。