第 5 章 buster 中需要注意的问题

目录

5.1. 升级到 buster 时可能出现的问题
5.1.1. Procfs 不再支持 hidepid 挂载选项
5.1.2. ypbind 在使用 -no-dbus 时无法启动
5.1.3. sshd 认证失败
5.1.4. 守护进程启动失败或系统表现为在启动时挂起
5.1.5. 从旧有网络接口名称进行迁移
5.1.6. OpenSSL 默认版本和安全等级有所提高
5.1.7. 某些应用程序在 GNOME 与 Wayland 环境下无法工作
5.1.8. 值得注意的过时软件包
5.1.9. buster 的废弃组件
5.1.10. 升级后在重启前需要做的事
5.1.11. SysV init 相关的软件包不再标记为必须安装
5.2. 安全支持上的局限性
5.2.1. 网页浏览器及其渲染引擎的安全支持状态
5.2.2. 基于 Go 的软件包
5.3. 特定软件包的问题
5.3.1. su 工具使用环境变量的语义发生改变
5.3.2. 已有的 PostgreSQL 数据库需要被重新索引
5.3.3. mutt 和 neomutt

有时,新发行版本引入的变化会产生一些我们无法有效避免的副作用,或者是会导致系统在其它地方暴露问题。我们在此记述了一些我们所知道的问题。请同时参阅勘误表,相关软件包之说明文件,错误报告及其它在第 6.1 节 “扩展阅读”中所提及的信息。

5.1. 升级到 buster 时可能出现的问题

本节介绍从 stretch 升级到 buster 的相关问题。

5.1.1. Procfs 不再支持 hidepid 挂载选项

用于 /prochidepid 挂载选项已知和当前版本的 systemd 共同使用时会出现问题,且 systemd 上游将其视为不支持的配置项。已经修改 /etc/fstab 而启用这些选项的用户应当在升级之前将其禁用,以确保能在 buster 上正确登录会话。(维基的加固页面上简要介绍了重新启用该选项的可能途径。)

5.1.2. ypbind 在使用 -no-dbus 时无法启动

ypbind 的默认选项已经改变。然而,如果您修改过旧有的默认配置文件,升级将不会自动更新配置信息;您需要确保 /etc/default/nis 中的 YPBINDARGS= 选项不包含 -no-dbus。如果使用了 -no-dbusypbind 将启动失败,您可能无法登录系统。如需了解详细信息,请参阅 bug #906436

5.1.3. sshd 认证失败

sshd 软件包的 PubkeyAcceptedKeyTypes 和类似的 HostbasedAcceptedKeyTypes 选项的语义有所变化。它们现在用于指定相应的验证机制的可接受的签名算法,而以前则用于指定可接受的密钥类型。这个区别在使用 RSA/SHA2 签名算法,如 rsa-sha2-256rsa-sha2-512 和它们对应的证书时将体现出来。如果手工指定了这些选项但省略了算法名称则可能导致意料之外的验证失败。

如果使用默认选项,则无需特别调整配置。

5.1.4. 守护进程启动失败或系统表现为在启动时挂起

systemd 在系统启动时需要熵信息,且内核在可用熵较少时会阻塞相应的调用,所以系统启动时可能挂起数分钟至数小时,直至随机子系统充分得到初始化(random: crng init done)。对于支持 RDRAND 指令的 amd64 系统,Debian 的内核已可以避免这个问题因为内核默认将尝试使用该指令(CONFIG_RANDOM_TRUST_CPU)。

amd64 架构的系统和某些虚拟机可能需要从其它来源获取熵以保证快速启动。Debian 安装程序内部选择了 haveged 作为替代方案,在硬件熵不可用时,这可能是个可以使用的解决方案。在虚拟机上,请考虑经由 virtio_rng 将主机的熵转发至虚拟机中。

如果您在阅读本篇文档之前已将远程的系统升级至 buster,请考虑经由网络持续 ping 远程系统,这样做可以向系统的随机池中添加熵,并最终使得系统可以重新通过 ssh 登录。

请参见 bug #916690 以了解详细信息,以及 DLange 对此问题的简述以了解其它解决方法。

5.1.5. 从旧有网络接口名称进行迁移

如果您的系统是从先前版本升级来的,且仍然使用旧式的,已经在 stretch 中弃用的网络接口名称(比如 eth0wlan0),您应当了解到 buster 中的 udev 已不再支持通过 /etc/udev/rules.d/70-persistent-net.rules 定义它们的名称。为了避免升级到 buster 后网络连接失效的风险,建议您事先迁移到新的命名方案(通常为类似 enp0s1wlp2s5 的名字,包含了 PCI 总线和插槽编号)。注意更新任何硬编码到防火墙或 ifupdown 等工具的配置文件中的名称。

替代方案是切换到一种受支持的能强制使用旧的命名方案的机制,比如 net.ifname=0 内核命令行选项,或者 systemd .link 文件(参见 systemd.link(5))。

要得到将被使用的新式接口名称,首先要得到相关接口的当前名称:

$ echo /sys/class/net/[ew]*
    

对这些名称中的每一个,检查它是否在配置文件中被使用,以及它在 udev 中的名称:

$ sudo rgrep -w eth0 /etc
$ udevadm test-builtin net_id /sys/class/net/eth0 2>/dev/null
    

这些信息对于制定迁移计划应该已经足够。(如果 udevadm 的输出包含一个 onboard 的名称,该名称优先;基于 MAC 的名称一般被视为备用名称,但对于 USB 网络硬件可能是必需的。)

一旦您准备好开始迁移,请重命名 70-persistent-net.rules 或注释掉其中单独的行,以禁用该文件。在虚拟机上您还需要删除 /etc/systemd/network/99-default.link 以及(如果你使用 virtio 网络设备)/etc/systemd/network/50-virtio-kernel-names.link。然后重新构建 initrd

$ sudo update-initramfs -u
    

然后重启。您的系统此时应当已改为使用新格式的网络接口名称。请调整遗留的配置文件信息并测试您的系统。

另请阅读上游文档以及 udevREADME.Debian 以了解更多信息。

5.1.6. OpenSSL 默认版本和安全等级有所提高

遵照多份不同的安全建议,默认的 TLS 最低版本要求从 TLSv1 提升到了 TLSv1.2。

默认的 TLS 连接安全级别也从 level 1 提高到了 level 2。这一改变将 80 位的安全级别提升到了 112 位,并将需要 2048 位或更长的 RSA 和 DHE 密钥,224 位或更长的 ECC 密钥,和 SHA-2。

这个系统级设定可以在 /etc/ssl/openssl.cnf 中修改。应用程序也可以用特定的方式覆盖默认值。

默认的 /etc/ssl/openssl.cnf 中包括 MinProtocolCipherString 行。通过 CipherString 也可以设定安全级别。关于安全级别的信息可以在 SSL_CTX_set_security_level(3ssl) 手册页中找到。最低协议版本的有效值的列表可以在 SSL_CONF_cmd(3ssl) 中找到。其他信息可以在 ciphers(1ssl)config(5ssl) 中找到。

要将 /etc/ssl/openssl.cnf 中的系统级默认值改回以前的值,可以设置:

        MinProtocol = None
        CipherString = DEFAULT
      

如果默认值引起了问题,建议你和联系。

5.1.7. 某些应用程序在 GNOME 与 Wayland 环境下无法工作

Buster 中的 GNOME 已经将默认的显示服务器从 Xorg 改为了 Wayland。有些应用程序,包括流行的软件包管理器 synaptic,默认的简体中文输入法 fcitx,以及大多数屏幕录制软件,还不能在 Wayland 上正常工作。要使用这些软件包,需要使用 GNOME on Xorg 会话登录。

5.1.8. 值得注意的过时软件包

以下是已知的和值得注意的过时软件包的列表(有关过时软件包的描述,请参阅第 4.8 节 “过时的软件包”)。

        TODO: 使用 change-release 信息并根据 popcon 排序

         这需要根据真实的升级日志(jfs)复查

         一个替代的信息源是 UDD
         'not-in-testing' 页面:
         https://udd.debian.org/bapase.cgi?t=testing
      

过时的软件包包括:

  • mcelog 软件包无法与大于 4.12 版本的内核共同工作。rasdaemon 可以作为其替代品。

  • revelation 软件包用于存储密码,它未包含于 buster。keepass2 可以导入之前从 revelation 导出的 XML 密码文件。请确保在升级前从 revelation 导出数据,以避免无法访问您的密码。

  • phpmyadmin 软件包未包含于 buster。

  • ipsec-toolsracoon 已在 buster 中被移除,因为它们的源码已经不能适应新的威胁。

    我们推荐用户迁移到 libreswan,它有更广泛的协议兼容性,且上游仍在积极维护。

    libreswan 应当在通讯协议上是完全兼容的,因为它支持的协议是 racoon 的超集。

  • 简单的邮件传输代理 ssmtp 在 buster 中被删除,因为它目前不验证 TLS 证书;参见 bug #662960

  • ecryptfs-utils 不包含于 buster,因为它存在一个未修复的严重 bug(#765854)。截至写这段文字时,除了不升级以外,还没有针对 eCryptfs 用户的明确建议。

5.1.9. buster 的废弃组件

随着下一个版本的 Debian 11(代号为 Bullseye)发布,某些功能将被弃用。用户需要迁移到其他替代方案,以防止在更新到 Debian 11 时出现问题。

这包括以下功能:

  • Python 2 上游会在2020年1月1日停止对其的支持。Debian 希望在 11 中移除 python-2.7。如果您有依赖 python 的程序,您应当准备好迁移至 python3

  • Icinga 1.x 自 2018-12-31 起已处于 EOL 状态;虽然 icinga 软件包仍然存在,用户应当在 buster 的支持周期中迁移到 Icinga 2(icinga2 软件包)以及 Icinga Web 2(icingaweb2 软件包)。icinga2-classicui 软件包仍然存在,以支持在 Icinga 2 中使用 Icinga 1.x 的 CGI web 接口,但该支持将在 Icinga 2.11 中被移除。应当转而使用 Icinga Web 2。

  • Mailman 邮件列表管理器套件的版本 3 在该发布版中可用。Mailman 已经被分割成了不同组件;核心组件在软件包 mailman3 中,完整的套装可以通过 mailman3-full 元软件包获得。

    旧版的 Mailman 2.1 在该发布版中仍然以软件包 mailman 的形式提供,所以您可以在现有安装中按您自己的计划迁移。Mailman 2.1 软件包在可预见的未来仍然可以正常工作,但不会有任何的重大更新或改进。它将在 Mailman 上游停止支持该分支后的第一个 Debian 发布版本中被移除。

    建议所有人尽快升级到 Mailman 3,这是更现代的一个发布版本,其开发也处于活跃状态。

  • 软件包 spf-milter-pythondkim-milter-python 上游的开发不再活跃,但它们的功能更丰富的替代品,pyspf-milterdkimpy-milter,在 buster 中可用。用户应当在旧的软件包从 bullseye 中被移除之前迁移到新的软件包。

5.1.10. 升级后在重启前需要做的事

apt full-upgrade 完成时,形式上的升级就完成了。对于向 buster 的升级而言,重启前没有什么特别的操作需要完成。

apt full-upgrade 完成时,形式上的升级就完成了,但还有一些其他的事情应该在下一次重启之前予以关注。


      在此添加项目列表
      
    

5.1.11. SysV init 相关的软件包不再标记为必须安装

[注意]注意

如果您决定继续使用 sysvinit-core,本节内容对您不适用。

在 Jessie 将默认初始化系统切换至 systemd,以及 Stretch 的进一步优化之后,系统应当已经不再需要安装 SysV 相关的软件包。您可以使用如下命令安全地进行卸载和清除

apt purge initscripts sysv-rc insserv startpar

5.2. 安全支持上的局限性

有一些软件包,Debian 不能保证针对安全漏洞提供最小的向后移植。这些将在以下小节中介绍。

[注意]注意

debian-security-support 软件包可帮助跟踪已安装软件包的安全支持状态。

5.2.1. 网页浏览器及其渲染引擎的安全支持状态

Debian 10 包含几个浏览器引擎,长期以来安全漏洞断续发生。高比例的漏洞,加上上游对长期分支支持不力,使得向后移植这些浏览器的安全补丁非常困难。此外,库的相互依赖性使得无法更新到较新的上游版本。因此,构建在(包括但不限于)webkit 和 khtml 引擎[6]上的浏览器在 buster 中有包含,但不提供安全支持。这些浏览器不应用于不受信任的网站。webkit2gtk 源软件包提供安全支持。

对于通用网页浏览器,我们推荐 Firefox 和 Chromium。这些软件将使用最新的 ESR 版本持续在 stable 中予以更新。这同样适用于 Thunderbird。

5.2.2. 基于 Go 的软件包

Debian 基础架构目前不能很好地支持大规模地重新编译静态链接到其他包的一部分的软件包。在 buster 之前,这在实践中不是一个问题,但随着 Go 生态系统的增长,这意味着直到基础架构改进到能够管理它们之前,基于 Go 的软件包将不提供常规安全支持。

如果更新被批准,它们只能通过常规的小版本升级提供,可能推送会比较慢。

5.3. 特定软件包的问题

在大多数情况下,软件包应会在 stretch 和 buster 之间平滑升级。在升级之前或期间,有少数包可能需要进行手动干预;下面会对每个包的情况进行阐述。

5.3.1. su 工具使用环境变量的语义发生改变

su 在 buster 中修改了语义并不再保留用户环境变量 DISPLAYXAUTHORITY。如果您需要使用 su 运行图形应用程序,您需要显式对其进行设置以允许其访问显示器。请阅读 bug #905409 以了解详细的讨论内容。

5.3.2. 已有的 PostgreSQL 数据库需要被重新索引

在从 stretch 升级到 buster 时,glibc 的 locale 数据得到了更新。特别地,这些修改会导致 PostgreSQL 对文本索引排序时的行为发生改变。为避免数据库损坏,已有的索引需要在升级了 localeslocales-all 软件包之后、将已有数据库上线之前立刻进行重新索引(REINDEX)。

建议的命令:

sudo -u postgres reindexdb --all

一个替代方案是,使用 pg_upgradecluster 将数据库升级到 PostgreSQL 11。(该命令默认使用 pg_dump,这将重建所有的索引。使用 -m upgrade 或者 pg_upgrade安全的,因为这将保留索引顺序,而该顺序将变为错误的。)

如需了解更多信息,请参见 PostgreSQL 维基

5.3.3. mutt 和 neomutt

在 stretch 中,mutt 软件包使用了来自 https://neomutt.org 的补丁。从 buster 开始,提供 /usr/bin/mutt 的软件包将会基于原始的来自 http://www.mutt.org 的源代码,而由一个单独的 neomutt 软件包提供 /usr/bin/neomutt

这意味着原先由 mutt 所提供的某些功能将不再可用。如果这样的行为破坏了您的配置,您可以转而安装 neomutt 进行替代。



[6] 这些引擎在多个不同的源软件包中提供,该问题适用于提供这些引擎的所有包。该问题也适用于此处未明确提及的网页渲染引擎,但 webkit2gtk 除外。