目录
有时,新发行版本引入的变化会产生一些我们无法有效避免的副作用,或者是会导致系统在其它地方暴露问题。我们在此记述了一些我们所知道的问题。请同时参阅勘误表,相关软件包之说明文件,错误报告及其它在第 6.1 节 “扩展阅读”中所提及的信息。
本节介绍从 stretch 升级到 buster 的相关问题。
用于 /proc
的 hidepid
挂载选项已知和当前版本的
systemd 共同使用时会出现问题,且 systemd 上游将其视为不支持的配置项。已经修改
/etc/fstab
而启用这些选项的用户应当在升级之前将其禁用,以确保能在 buster
上正确登录会话。(维基的加固页面上简要介绍了重新启用该选项的可能途径。)
ypbind
的默认选项已经改变。然而,如果您修改过旧有的默认配置文件,升级将不会自动更新配置信息;您需要确保
/etc/default/nis
中的 YPBINDARGS=
选项不包含 -no-dbus
。如果使用了
-no-dbus
,ypbind
将启动失败,您可能无法登录系统。如需了解详细信息,请参阅 bug
#906436。
The default behavior of rpcbind
has
changed to no longer answer remote calls from NIS clients. On NIS servers
you will need to add the (Debian-specific) -r
flag to the
command line options of rpcbind, otherwise users will not
be able to log into your NIS client machines. For more info see bug #935492.
sshd
软件包的
PubkeyAcceptedKeyTypes
和类似的
HostbasedAcceptedKeyTypes
选项的语义有所变化。它们现在用于指定相应的验证机制的可接受的签名算法,而以前则用于指定可接受的密钥类型。这个区别在使用 RSA/SHA2 签名算法,如
rsa-sha2-256
、rsa-sha2-512
和它们对应的证书时将体现出来。如果手工指定了这些选项但省略了算法名称则可能导致意料之外的验证失败。
如果使用默认选项,则无需特别调整配置。
因 systemd
在系统启动时需要熵信息,且内核在可用熵较少时会阻塞相应的调用,所以系统启动时可能挂起数分钟至数小时,直至随机子系统充分得到初始化(random:
crng init done
)。对于支持 RDRAND
指令的
amd64
系统,Debian
的内核已可以避免这个问题,因为内核默认将尝试使用该指令(CONFIG_RANDOM_TRUST_CPU
)。
非 amd64
架构的系统和某些虚拟机可能需要从其它来源获取熵以保证快速启动。Debian 安装程序内部选择了
haveged
作为替代方案,在硬件熵不可用时,这可能是个可以使用的解决方案。在虚拟机上,请考虑经由 virtio_rng
将主机的熵转发至虚拟机中。
如果您在阅读本篇文档之前已将远程的系统升级至 buster,请考虑经由网络持续 ping 远程系统,这样做可以向系统的随机池中添加熵,并最终使得系统可以重新通过 ssh 登录。
请参见维基以及 DLange 对此问题的简述以了解其它解决方法。
如果您的系统是从先前版本升级来的,且仍然使用旧式的,已经在 stretch 中弃用的网络接口名称(比如 eth0
或 wlan0
),您应当了解到 buster 中的 udev
官方已不再支持通过
/etc/udev/rules.d/70-persistent-net.rules
定义它们的名称(虽然某些情况下仍可工作)。为了避免升级到 buster 后网络连接失效的风险,建议您事先迁移到新的命名方案(通常为类似
enp0s1
或 wlp2s5
的名字,包含了 PCI
总线和插槽编号)。注意更新任何硬编码到防火墙或 ifupdown
等工具的配置文件中的接口名称。
The alternative is to switch to a supported mechanism for enforcing the old
naming scheme, such as a systemd .link
file (see systemd.link(5)). The
net.ifnames=0
kernel commandline option might also work
for systems with only one network interface (of a given type).
要得到将被使用的新式接口名称,首先要得到相关接口的当前名称:
$ echo /sys/class/net/[ew]*
对这些名称中的每一个,检查它是否在配置文件中被使用,以及它在 udev
中的名称:
$ sudo rgrep -weth0
/etc $ udevadm test-builtin net_id /sys/class/net/eth0
2>/dev/null
This should give enough information to devise a migration plan. (If the
udevadm
output includes an “onboard” or
“slot” name, that takes priority; MAC-based names are normally
treated as a fallback, but may be needed for USB network hardware.)
一旦您准备好开始迁移,请重命名 70-persistent-net.rules
或注释掉其中单独的行,以禁用该文件。在虚拟机上您还需要删除
/etc/systemd/network/99-default.link
以及(如果您使用 virtio
网络设备)/etc/systemd/network/50-virtio-kernel-names.link
。然后重新构建
initrd
:
$ sudo update-initramfs -u
然后重启。您的系统此时应当已改为使用新格式的网络接口名称。请调整遗留的配置文件信息并测试您的系统。
See the wiki, upstream
documentation, and the udev
README.Debian
for further information.
使用 binding 和/或 dummy 接口的系统,例如作为路由器配置的机器,在升级到 buster 时可能遇到问题。新版 systemd
在系统中安装了
/lib/modprobe.d/systemd.conf
文件(目的是简化
systemd-networkd 的配置),其中包含了以下的配置行
options bonding max_bonds=0 options dummy numdummies=0
需要更改配置的系统管理员需要确保自定义的配置优先级高于系统默认配置。/etc/modprobe.d
目录下的文件会覆盖掉 /lib/modprobe.d
目录下相同名称的文件,但各个文件以字母顺序处理,所以
/lib/modprobe.d/systemd.conf
会在
/etc/modprobe.d/dummy.conf
之后被解析并覆盖掉后者。请确保本地配置文件名在字母排序上位于
“systemd.conf
” 之后,例如
“/etc/modprobe.d/zz-local.conf
”。
遵照多份不同的安全建议,默认的 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
中包括
MinProtocol
和 CipherString
行。通过
CipherString
也可以设定安全级别。关于安全级别的信息可以在 SSL_CTX_set_security_level(3ssl)
手册页中找到。最低协议版本的有效值的列表可以在 SSL_CONF_cmd(3ssl) 中找到。其他信息可以在
ciphers(1ssl) 和 config(5ssl) 中找到。
要将 /etc/ssl/openssl.cnf
中的系统级默认值改回以前的值,可以设置:
MinProtocol = None CipherString = DEFAULT
如果默认值引起了问题,建议您和远程网站联系。
Buster 中的 GNOME 已经将默认的显示服务器从 Xorg 改为了 Wayland(参见 第 2.2.11 节 “GNOME 默认使用 Wayland”)。有些应用程序,包括流行的软件包管理器 synaptic
,默认的简体中文输入法 fcitx
,以及大多数屏幕录制软件还不能在 Wayland
上正常工作。如需使用这些软件,用户需要使用 GNOME on Xorg
会话登录。
以下是已知的和值得注意的过时软件包的列表(有关过时软件包的描述,请参阅第 4.8 节 “过时的软件包”)。
过时的软件包包括:
revelation
软件包用于存储密码,它未包含于
buster。keepass2
可以导入之前从
revelation
导出的 XML 密码文件。请确保在升级前从
revelation 导出数据,以避免无法访问您的密码。
ipsec-tools
和 racoon
已在 buster 中被移除,因为它们的源码已经不能适应新的威胁。
简单的邮件传输代理 ssmtp
在 buster
中被删除,因为它目前不验证 TLS 证书;参见 bug #662960。
ecryptfs-utils
不包含于
buster,因为它存在一个未修复的严重 bug(#765854)。截至写这段文字时,除了不升级以外,还没有针对 eCryptfs
用户的明确建议。
随着下一个版本 Debian 11(代号为 Bullseye)的发布,某些功能将被弃用。用户需要迁移到其他替代方案,以防止在更新到 Debian 11 时出现问题。
这包括以下特性:
Python 2 上游会在2020年1月1日停止对其的支持。Debian
希望在 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-python
和 dkim-milter-python
上游的开发不再活跃,但它们的功能更丰富的替代品,pyspf-milter
和 dkimpy-milter
,在 buster
中可用。用户应当在旧的软件包从 bullseye 中被移除之前迁移到新的软件包。
有一些软件包,Debian 不能保证针对安全漏洞提供最小的向后移植。这些将在以下小节中介绍。
Debian 10
包含几个浏览器引擎,长期以来安全漏洞断续发生。高比例的漏洞,加上上游对长期分支支持不力,使得向后移植这些浏览器的安全补丁非常困难。此外,库的相互依赖性使得无法更新到较新的上游版本。因此,构建在(包括但不限于)webkit
和 khtml 引擎[6]上的浏览器在 buster
中有包含,但不提供安全支持。这些浏览器不应用于不受信任的网站。webkit2gtk
源软件包提供安全支持。
对于通用网页浏览器,我们推荐 Firefox 和 Chromium。这些软件将使用最新的 ESR 版本持续在 stable 中予以更新。这同样适用于 Thunderbird。
在大多数情况下,软件包应会在 stretch 和 buster 之间平滑升级。在升级之前或期间,有少数包可能需要进行手动干预;下面会对每个包的情况进行阐述。
从 glibc
2.26 开始,它依赖于 Linux 内核 3.2
或更新版本。为避免破坏您的系统,libc6
软件包的 preinst
脚本会进行安装时检查。如果检查失败,软件包安装将中止,升级也无法完成。如果系统正运行在小于 3.2 版本的内核之上,请在升级发行版之前升级内核。
su
在 buster 中修改了语义并不再保留用户环境变量
DISPLAY
和 XAUTHORITY
。如果您需要使用
su
运行图形应用程序,您需要显式对其进行设置以允许其访问显示器。请阅读 bug #905409 以了解详细的讨论内容。
在从 stretch 升级到 buster 时,glibc
的
locale 数据得到了更新。特别地,这些修改会导致 PostgreSQL 对文本索引排序时的行为发生改变。为避免数据库损坏,已有的索引需要在升级了
locales
或 locales-all
软件包之后、将已有数据库上线之前立刻进行重新索引(REINDEX
)。
建议的命令:
sudo -u postgres reindexdb --all
一个替代方案是,使用 pg_upgradecluster 将数据库升级到 PostgreSQL
11。(该命令默认使用 pg_dump,这将重建所有的索引。使用 -m
upgrade
或者 pg_upgrade
是不安全的,因为这将保留索引顺序,而该顺序将变为错误的。)
如需了解更多信息,请参见 PostgreSQL 维基。
在 stretch 中,mutt
软件包使用了来自 https://neomutt.org 的补丁。从 buster 开始,提供
/usr/bin/mutt
的软件包将会基于原始的来自 http://www.mutt.org 的源代码,而由一个单独的
neomutt
软件包提供
/usr/bin/neomutt
。
这意味着原先由 mutt
所提供的某些功能将不再可用。如果这样的行为破坏了您的配置,您可以转而安装 neomutt
进行替代。
如果没有指针设备,用户不能直接改变 gnome-control-center
提供的 GNOME
设置的配置。备用方案是按下右方向键两次以从侧边栏导航至主内容。如需回到侧边栏,您可以使用 Ctrl+F
的键位组合启动搜索,随便输入一些内容,然后按下 Esc
键取消搜索。这时,您可以使用上方向键和下方向键在侧边栏中导航。使用键盘无法选中搜索结果。
Users of the initial buster release images should not change the LUKS
password of encrypted disks with the GNOME graphical interface for disk
management. The gnome-disk-utility
package in buster had a very nasty bug
(#928893) when used to change the LUKS password: it deleted the old
password but failed to correctly set the new one, making all data on the
disk inaccessible. This has been fixed in the first point release.
使用 evolution
邮件客户端,并使用 evolution-ews
连接到 Exchange、Office 365 或 Outlook
服务器的用户,不应当在没有提前备份数据并寻找替代解决方案的情况下升级到 Buster,因为 evolution-ews 由于 bug (#926712)
的缘故已经被废弃,使用这些服务器的收件箱、日历、联系人列表和任务将会被删除并无法通过 Evolution 访问。
The evolution-ews
package has been
reintroduced via buster-backports. Users upgrading from stretch to buster
can enable buster-backports after the upgrade and then they will be able to
reinstall evolution-ews
.
当使用 Calamares 安装程序(第 2.2.13 节 “来自 Debian Live 团队的新闻”)从 Live 介质安装 Debian,并选择全盘加密功能时,磁盘的解密密钥会被保存在所有用户可读的 initramfs 中。这将允许具有本地文件系统访问权限的用户读取私钥,并在将来再次访问文件系统。
可以添加 UMASK=0077
到
/etc/initramfs-tools/conf.d/initramfs-permissions
文件,并运行update-initramfs -u 以暂时解决该问题。这将重建一个普通用户没有读权限的
initramfs。
对安装程序的修复工作正在进行中(参见 bug #931373),并将被上传到 debian-security。这段时间内使用全盘加密的用户应当使用上述的临时解决方案。
When using s3ql
with Amazon S3
buckets, the configuration needs updating for a change in the URL. The new
format is:
s3://<region>/<bucket>/<prefix>
The shipped configurations for /var/log/btmp
and
/var/log/wtmp
have been split from the main
configuration file (/etc/logrotate.conf
) into separate
standalone files (/etc/logrotate.d/btmp
and
/etc/logrotate.d/wtmp
).
If you have modified /etc/logrotate.conf
in this
regard, make sure to re-adjust the two new files to your needs and drop any
references to (b|w)tmp from the main file, since duplicate definitions can
cause errors.