5.4. 程序错误修复
这部分论述了在 Red Hat Enterprise Linux 8.2 中修复的对用户有严重影响的错误。
5.4.1. 安装程序和镜像创建
使用 版本
或 inst.version
内核引导参数不再停止安装程序
在以前的版本中,使用 version
或 inst.version
引导参数从内核命令行引导安装程序可打印该版本,如 anaconda 30.25.6
,并停止安装程序。
在这个版本中,当安装程序从内核命令行引导时,版本
和 inst.version
参数会被忽略,因此安装程序不会被停止。
(BZ#1637472)
支持安装程序中的 s390x 安全引导
在以前的版本中,RHEL 8.1 支持准备引导磁盘,以便在 IBM Z 环境中使用,这些磁盘强制使用安全引导。安装期间使用的服务器和虚拟机监控程序的功能决定了生成的磁盘上格式是否包含安全引导支持。安装期间无法影响磁盘格式。因此,如果您在一个支持安全引导的环境中安装了 RHEL 8.1,则该系统无法在移到一个缺乏安全引导支持的环境中引导,例如在有些故障转移中完成的操作。
有了这个更新,您现在可以配置 zipl
工具的安全引导选项。要做到这一点,您可以使用:
-
Kickstart
zipl
命令及其选项之一,例如:--secure-boot
、--no-secure-boot
和--force-secure-boot
。 - 在 GUI 中的 安装概述 窗口中,您可以选择 System > Installation Destination > Full disk summary 和 boot loader 链接并设置引导设备。因此,现在可以在缺乏安全引导支持的环境中引导安装。
(BZ#1659400)
安全引导功能现在可用
在以前的版本中,secure =
引导选项的默认值没有被设置为 auto,因此无法使用安全引导功能。在这个版本中,除非之前配置了,否则默认值被设置为 auto,安全引导功能现在可用。
(BZ#1750326)
/etc/sysconfig/kernel
文件不再引用 new-kernel-pkg
脚本
在以前的版本中,/etc/sysconfig/kernel
文件引用 new-kernel-pkg
脚本。但是,RHEL 8 系统中没有包括 new-kernel-pkg
脚本。在这个版本中,对 new-kernel-pkg
脚本的引用已从 /etc/sysconfig/kernel
文件中被删除。
安装不会超过 boot-device NVRAM
变量中允许设备的最大数量
在以前的版本中,RHEL 8 安装程序在 boot-device NVRAM
变量中设置大于允许设备的最大数量。因此,在设备数量超过最大设备的系统中安装会失败。在这个版本中,RHEL 8 安装程序会检查最大设备设置,且只添加允许的设备数量。
(BZ#1748756)
安装适用于在非网络位置的 Kickstart 文件中使用 URL 命令的镜像位置
在以前的版本中,当镜像远程位置触发的网络激活在非网络位置的 Kickstart 文件中通过 URL 命令指定时,安装过程会在早期失败。在这个版本中解决了这个问题,以及使用位于非网络位置的 Kickstart 文件中的 URL 命令提供镜像位置的安装(如 CD-ROM 或本地块设备)可以正常工作。
(BZ#1649359)
RHEL 8 安装程序只检查 ECKD DASD 的未格式化设备
在以前的版本中,当检查未格式化的设备时,安装程序会检查所有 DASD 设备。但是,安装程序应该只检查了 ECKD DASD 设备。因此,当使用带有 SWAPGEN 的 FBA DASD 设备时,安装会失败。在这个版本中,安装程序不会检查 FBA DASD 设备,安装可以成功完成。
(BZ#1715303)
5.4.2. 软件管理
yum repolist
不再以第一个不可用存储库结束
在以前的版本中,存储库配置选项 skip_if_unavailable
默认设置为如下:
skip_if_unavailable=false
此设置强制 yum repolist 命令以
第一个不可用存储库结束,并显示错误并退出状态 1。因此,yum repolist
不会继续列出可用的软件仓库。
有了这个更新,yum repolist
已被修复,不再需要任何下载。因此,yum repolist
不会提供任何需要元数据的输出,命令现在继续按预期列出可用的存储库。
请注意,可用软件包的数量仅由 yum repolist --verbose
或 yum repoinfo
返回,后者仍需要可用元数据。因此,这些命令将结束第一个不可用存储库。
(BZ#1697472)
5.4.3. Shell 和命令行工具
ReaR
更新
RHEL 8.2 对 Relax-and-Recover(ReaR
)程序引入了多个更新。
构建目录处理已被更改。在以前的版本中,如果 ReaR
失败,构建目录会临时保留。在这个版本中,构建目录默认在非交互式运行中删除,以防止消耗磁盘空间。
KEEP_BUILD_DIR
配置变量的语义经过增强,以包含新的 错误
值。您可以将 KEEP_BUILD_DIR
变量设置为以下值:
-
在
出错
时保留构建目录以用于调试的错误(之前的行为) -
y
(true
)以始终保留构建目录 -
N
(false
)永不保留构建目录
默认值为空字符串,其含义为以交互方式(在终端中)执行 ReaR
时 的错误
;如果以非交互方式执行 ReaR
,则默认 值为 false
。请注意,KEEP_BUILD_DIR
在调试模式(-d
)和 debugscript 模式(-D
)中自动设置为 true
;此行为尚未更改。
主要程序错误修复包括:
- 修复了对 NetBackup 8.0 的支持。
-
Rear 不再
会中止 bash 错误与xrealloc 类似的问题:无法分配给
每个组有大量用户、组和用户的系统。 -
bconsole
命令现在显示其提示,这可让您在使用 Bacula 集成时执行恢复操作。 -
当
docker
服务正在运行,但没有定义docker
root 目录,或者无法确定docker
服务的状态时,ReaR
现在可以正确地备份文件。 - 当使用精简池或在 Migration Mode 中恢复系统时,恢复不再会失败。
-
在使用 LVM 的恢复过程中,
initramfs
的重建非常慢。 -
现在,在使用 UEFI 引导装载程序时,Re
ar 在 AMD 和 Intel 64 位构架中创建一个可引导 ISO 镜像。在这个设置中引导救援镜像不再在 Grub 中中止,并显示错误消息Unknown command 'configfile'(…)Entering rescue mode…
。此设置中对 GRUB_RESCUE 的支持(之前因为缺少 XFS 文件系统支持而失败)也已被修复。
mlocate-updatedb.timer
现在在 mlocate
软件包安装过程中启用
在以前的版本中,文件数据库重新索引不会被自动执行,因为 mlocate-updatedb.timer
计时器在 mlocate
软件包安装后被禁用。在这个版本中,mlocate-updatedb.timer
定时器现在是 90-default.preset
文件的一部分,在 mlocate
软件包安装后默认启用。因此,文件数据库会自动更新。
5.4.4. 基础架构服务
dnsmasq
现在可以正确地处理非递归 DNS 查询
在以前的版本中,dnsmasq
将所有非递归查询转发到上游服务器,这会导致不同的响应。在这个版本中,对本地已知名称(如 DHCP 主机租用名称或从 /etc/hosts
文件读取的主机)的非递归查询由 dnsmasq
处理,且不会转发到上游服务器。因此,返回与对已知名称的递归查询相同的响应。
在系统时间更改后,dhclient
不再无法续订 IP 地址
在以前的版本中,如果系统时间更改,系统可能会因为内核删除而丢失分配的 IP 地址。在这个版本中,dhclient
使用单调计时器检测向后时间跳转,并在系统时间停止跳转时发出 DHCPREQUEST
消息用于租用扩展。因此,系统不会在上述场景中丢失 IP 地址。
ipcalc
现在返回正确的 /31
网络的广播地址
在这个版本中,ip calc
工具被正确遵循 RFC 3021 标准。因此,当接口中使用 /31
前缀时,ip calc
会返回正确的广播地址。
(BZ#1638834)
/etc/services
现在包含正确的 NRPE 端口定义
在这个版本中,在 /etc/services
文件中添加了正确的 Nagios Remote Plug-in Executor(NRPE)服务端口定义。
postfix
DNS 解析器代码现在使用 res_search
而不是 res_query
在 postfix
中的上一更新之后,DNS 解析器代码使用 res_query
功能而不是 res_search
功能。因此,DNS 解析器不会使用以下 postfix
配置在当前和父域中搜索主机名:
# postconf -e "smtp_host_lookup = dns" # postconf -e "smtp_dns_resolver_options = res_defnames, res_dnsrch"
例如:
# postconf -e "relayhost = [smtp]"
并且 example.com 格式的域名,DNS 解析器没有使用 smtp.example.com SMTP 服务器进行转发。
在这个版本中,DNS 解析器代码已被修改为使用 res_search
而不是 res_query
,它现在可以正确地搜索当前和父域中的主机名。
PCRE、CDB 和 SQLite 现在可以与 Postfix 一起使用
在 RHEL 8 中,postfix 软件包
被分成多个子软件包,每个子软件包为特定数据库提供一个插件。在以前的版本中,包含 postfix-pcre、postfix
-cdb
和 postfix-sqlite
插件的 RPM 软件包不会被分发。因此,使用这些插件的数据库无法与 Postfix 一起使用。在这个版本中,将包含 PCRE、CDB 和 SQLite 插件的 RPM 软件包添加到 AppStream 仓库中。因此,可以在安装相应的 RPM 软件包后使用这些插件。
5.4.5. 安全性
fapolicyd
不再阻止 RHEL 更新
当更新替换了正在运行的应用程序的二进制文件时,内核会通过附加 " (deleted)" 后缀来修改内存中的应用程序二进制路径。在以前的版本中,fapolicyd
文件访问策略守护进程将此类应用程序视为不受信任的应用程序,并阻止它们打开和执行任何其他文件。因此,在应用更新后系统有时无法引导。
在 RHBA-2020:5243 公告提供发行版本中,fapolicyd
忽略二进制路径中的后缀,以便二进制文件与信任数据库匹配。因此,fapolicyd
会正确强制执行规则,更新过程也可以完成。
(BZ#1897091)
openssl-pkcs11
不再通过尝试登录到多个设备锁定设备
在以前的版本中,openssl-pkcs11
引擎会尝试使用提供的 PKCS #11 URI 登录搜索的第一个结果,即使第一个结果不是预期的设备和 PIN 匹配另一个设备。这些失败的身份验证尝试锁定该设备。
OpenSSL-pkcs11
现在,只有在提供的 PKCS #11 URI 匹配单个设备时才会尝试登录到设备。现在,如果 PKCS #11 搜索发现多个设备,引擎现在特意失败。因此,您必须提供一个 PKCS #11 URI,在使用 openssl-pkcs11
时仅匹配单个设备来登录该设备。
使用 rpmverifyfile
的 OpenSCAP 离线扫描现在可以正常工作
在以前的版本中,OpenSCAP 扫描程序 没有以离线模式正确更改当前工作目录,并且未使用 OpenSCAP rpmverifyfile
探测中正确的参数调用 fchdir
功能。已修复 OpenSCAP 扫描程序,以离线模式正确更改当前工作目录,并且修复 fchdir
功能以在 rpmverifyfile
中使用正确的参数。因此,OpenSCAP 可以使用包含 OVAL rpmverifyfile
的 SCAP 内容扫描任意文件系统。
(BZ#1636431)
现在
,如果在 PKCS #11 设备中没有匹配的公钥的情况下使用 ECDSA 私钥,httpd 现在可以正确启动
与 RSA 密钥不同,ECDSA 私钥不一定包含公钥信息。在这种情况下,您无法从 ECDSA 私钥获取公钥。因此,PKCS #11 设备将公钥信息存储在单独的对象中,无论是公钥对象还是证书对象。OpenSSL 预期引擎提供的 EVP_PKEY
结构用于存放公钥信息的私钥。填写要提供给 OpenSSL 的 EVP_PKEY
结构时,openssl-pkcs11
软件包中的引擎会尝试仅从匹配的公钥对象获取公钥信息,并忽略当前证书对象。
当 OpenSSL 从引擎请求 ECDSA 私钥时,提供的 EVP_PKEY
结构不包含公钥信息,如果 PKCS #11 设备中没有公钥,即使有匹配的证书可用,也是如此。因此,由于 Apache httpd
web 服务器调用 X509_check_private_key()
函数,这在启动过程中需要公钥,因此 httpd
在此场景下无法启动。如果公钥对象不可用,可以通过从证书加载 EC 公钥来解决此问题。现在
,当 ECDSA 密钥存储在 PKCS #11 设备中时,httpd 可以被正确启动。
现在 ,审计规则的 SCAP-security-guide
PCI-DSS 补救可以正常工作
在以前的版本中,scap-security-guide
软件包包含补救的组合和可导致以下情况之一的检查:
- 错误修复审计规则
- 扫描评估包含通过的规则被标记为失败的假正值
因此,在 RHEL 安装过程中,扫描安装的系统会报告一些审计规则为失败或错误。
在这个版本中,补救已被修复,使用 PCI-DSS 安全策略安装的系统的扫描不再为审计规则报告假的正状态。
OpenSCAP 现在提供虚拟机和容器的离线扫描
在以前的版本中,重构 OpenSCAP 代码库会导致某些 RPM 探测无法以离线模式扫描虚拟机和容器文件系统。因此,下列工具无法包含在 openscap-utils
软件包中: oscap-vm
和 oscap-chroot
。另外,opens cap-containers
软件包已从 RHEL 8 中完全删除。在这个版本中,探测的问题已被解决。
因此,RHEL 8 现在在 openscap-utils
软件包中包含 oscap-podman
、oscap-vm
和 oscap-chroot
工具。
(BZ#1618489)
OpenSCAP rpmverifypackage
现在可以正常工作
在以前的版本中,rpm verifypackage
探测调用 chdir
和 chroot
系统调用两次。因此,在使用自定义 Open Vulnerability 和评估语言(OVAL)内容的 OpenSCAP 扫描过程中使用该探测时会出现错误。已修复 rpmverifypackage
探测,以正确使用 chdir
和 chroot
系统调用。因此,rpm verifypackage
现在可以正常工作。
(BZ#1646197)
5.4.6. 网络
现在锁定在 qdisc_run
功能中不会导致内核崩溃
在以前的版本中,当删除流量时 pfifo_fast
队列强制重置时,在数据包释放后会导致数据包传输的竞争条件。因此,有时内核被意外终止。有了这个更新,qdisc_run
函数中的锁已被改进。因此,内核不会在上述情况下崩溃。
(BZ#1744397)
org.fedoraproject 中的 DBus API.FirewallD1.config.service
可以按预期工作
在以前的版本中,DBus API getIncludes
、setIncludes
和 queryIncludes
功能在 org.fedoraproject.FirewallD1
中返回错误消息: org.fedoraproject.FirewallD1.Exception:因为索引错误,列出索引范围
。在这个版本中,DBus API getIncludes
、setIncludes
和 queryIncludes
功能可以正常工作。
在卸载 ipvs
模块时,RHEL 不再记录内核警告
在以前的版本中,IP 虚拟服务器(ipvs
)模块使用不正确的参考计数,这会导致卸载模块时出现竞争条件。因此,RHEL 记录了内核警告。在这个版本中解决了竞争条件。因此,当您卸载 ipvs
模块时,内核不再记录警告。
(BZ#1687094)
nft
实用程序在第一个非选项参数后不再将参数解释为命令行选项
在以前的版本中,nft
工具在 nft
命令中接受任何位置的选项。例如,管理员可以在非选项参数之间或之后使用选项。因此,由于前导短划线,nf t
将负优先级值解析为选项,命令会失败。nft
实用程序的命令行解析器已更新,不解释读取第一个非选项参数后以短划线开头的参数。因此,管理员不再需要将负优先级值传递给 nft
。
请注意,由于此更改,您必须在第一个非选项参数之前将所有命令选项传递到 nft
。在更新之前,请验证 nftables 脚本是否满足这一新条件,以确保安装此更新后脚本可以按预期工作。
/etc/hosts.allow
和 /etc/hosts.deny
文件不再包含对删除的 tcp_wrappers
的过时引用
在以前的版本中,/etc/hosts.allow
和 /etc/hosts.deny
文件包含有关 tcp_wrappers
软件包的过期信息。这些文件在 RHEL 8 中被删除,因为删除的 tcp_wrappers
不再需要这些文件。
在 firewalld
中添加了一个配置参数来禁用区域偏移
在以前的版本中,firewalld
服务包含一个未记录的行为,称为"zone drifting"。RHEL 8.0 删除了这个行为,因为它可能会造成负面影响。因此,在使用这个行为配置 catch-all 或 fallback zone 的主机上,firewalld
会拒绝之前允许的连接。在这个版本中,重新添加了区 drifting 功能,但作为一个可配置的功能。现在,用户可以决定使用区 drifting 功能,也可以禁用它并使用防火墙进行安全设置。
默认情况下,在 RHEL 8.2 中,/etc/firewalld/firewalld.conf
文件中的新 AllowZoneDrifting
参数被设置为 yes
。请注意,如果启用了该参数,firewalld
日志:
WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future release. Please consider disabling it now.
(BZ#1772208)
5.4.7. 内核
现在完全支持子部分内存热插拔
在以前的版本中,一些平台与物理内存区域一致,如 Dual In-Line Modules(DIMM)和 interleave 设置为 64MiB 内存边界。但是,由于 Linux 热插拔子系统使用 128MiB 的内存大小,热插拔新设备会导致多个内存区域在单个热插拔内存窗口中重叠。因此,这会导致使用以下或类似的调用 trace 列出可用持久内存命名空间失败:
WARNING: CPU: 38 PID: 928 at arch/x86/mm/init_64.c:850 add_pages+0x5c/0x60 [..] RIP: 0010:add_pages+0x5c/0x60 [..] Call Trace: devm_memremap_pages+0x460/0x6e0 pmem_attach_disk+0x29e/0x680 [nd_pmem] ? nd_dax_probe+0xfc/0x120 [libnvdimm] nvdimm_bus_probe+0x66/0x160 [libnvdimm]
在这个版本中解决了这个问题,并支持 Linux 热插拔子系统来启用多个内存区域共享一个热插拔内存窗口。
(BZ#1724969)
数据崩溃现在触发 BUG 而不是 WARN 消息
在这个版本中,lib /list_debug.c
列表会触发 BUG,它会生成带有 vmcore 的报告
。在以前的版本中,当遇到数据崩溃时,会生成一个简单的 WARN,这很可能不被留意。设置 CONFIG_BUG_ON_DATA_CORRUPTION
后,内核现在会创建一个崩溃并触发 BUG 来应对数据损坏。这可防止进一步损坏并降低安全风险。kdump
现在会生成 vmcore
,它可改进数据损坏错误报告。
(BZ#1714330)
提供了对 Intel Carlsville
卡的支持,但不在 RHEL 8.2 中验证
提供了 Intel Carlsville
卡支持,但不在 Red Hat Enterprise Linux 8.2 上进行测试。
(BZ#1720227)
RPS 和 XPS 不再将作业放在隔离的 CPU 中
在以前的版本中,接收数据包提取(RPS)软件队列机制和传输包服务关联(XPS)可传输在所有 CPU 集合上分配的队列选择机制,包括隔离的 CPU。因此,当对延迟敏感的工作负载使用与运行 RPS 或 XPS 作业相同的 CPU 时,可能会导致实时环境中出现意外延迟。在这个版本中,storage _rps_map()
函数不包括任何隔离的 CPU 用于 RPS 配置。同样,用于 XPS 配置的内核驱动程序也尊重 CPU 隔离。因此,在上述场景中,RPS 和 XPS 不再将作业放在隔离的 CPU 上。如果在 /sys/devices/pci*/net/dev/queues/rx-*/rps_cpus
文件中配置隔离 CPU,会出现以下错误:
Error: "-bash: echo:write error: Invalid argument"
但是,在 /sys/devices/pci*/net/dev/queues/tx-*/xps_cpus
文件中手动配置隔离 CPU 成功在隔离的 CPU 上分配 XPS 作业。
请注意,在具有隔离 CPU 的环境中网络工作负载可能会遇到一些性能变化。
(BZ#1867174)
5.4.8. 文件系统和存储
SCSI 驱动程序不再使用过多内存
在以前的版本中,某些 SCSI 驱动程序使用的内存比 RHEL 7 中的内存更大。在某些情况下,比如在光纤通道主机总线适配器(HBA)上创建 vPort,内存用量过量,具体取决于系统配置。
内存用量增加是由块层中内存预分配造成的。多队列块设备调度(BLK-MQ)和每个 I/O 请求的多队列 SCSI 堆栈(SCSI-MQ)预分配内存,从而增加内存用量。
在这个版本中,块层限制预分配的内存量,因此 SCSI 驱动程序不再使用过多内存。
(BZ#1698297)
现在,VDO 可以在 UDS 完成重建前挂起
在以前的版本中,如果您试图在 UDS 索引重新构建时挂起 VDO 卷,d msetup suspend
命令就会变得无响应。该命令仅在重建后完成。
在这个版本中,这个问题已被解决。dmsetup suspend
命令可以在 UDS 重新构建之前完成,而不会变得无响应。
5.4.9. 动态编程语言、网页和数据库服务器
mod_cgid
日志记录中的问题已被解决
在更新之前,如果在线程多处理模块(MPM)下使用了 mod_cgid
Apache httpd
模块,则会出现以下日志记录问题:
-
CGI 脚本的
stderr
输出没有使用标准时间戳信息作为前缀。 -
如果已配置,CGI 脚本的
stderr
输出没有正确重定向到特定于VirtualHost
的日志文件。
在这个版本中解决了这个问题,mod _cgid
日志记录现在可以正常工作。
(BZ#1633224)
5.4.10. 编译器和开发工具
如果 dlopen
失败,unrelocated 和未初始化共享对象不再会导致失败
在以前的版本中,如果 dlopen
调用失败,glibc
动态链接程序不会在报告错误前删除带有 NODELETE
标记的共享对象。因此,未重新定位和未初始化的共享对象会保留在进程镜像中,最终会导致断言失败或崩溃。在这个版本中,动态加载器使用待处理的 NODELETE
状态在 dlopen
失败时删除共享对象,然后将其标记为 NODELETE
。因此,进程不会留下任何未重新定位的对象。另外,在 ELF 构造函数和析构函数运行时的惰性绑定失败现在会终止进程。
64 位 ARM 架构中的高级 SIMD 功能在临时解决方案后不再复杂
在以前的版本中,当延迟解析高级 SIMD 功能时,用于高级 SIMD 的新向量标准(PCS)无法正确保存和恢复某些调用者保存的寄存器。因此,二进制文件可能会在运行时发生错误。在这个版本中,符号表中的 Advanced SIMD 和 SVE 向量函数标记为 .variant_pcs
,因此动态链接器会早期绑定这些函数。
sudo
wrapper 脚本现在解析选项
在以前的版本中,/opt/redhat/devtoolset*/root/usr/bin/sudo
wrapper 脚本无法正确解析 sudo
选项。因此,无法执行一些 sudo
选项(如 sudo -i
)。在这个版本中,可以正确地解析更多 sudo
选项,因此 sudo
打包程序脚本的工作方式更像 /usr/bin/sudo
。
修复了 glibc
中的 TLS 变量对齐的问题
在以前的版本中,在某些情况下,一致的线程本地存储(TLS)数据可能会实例化而无需预期的对齐。在这个版本中,POSIX Thread Library libpthread
已被改进,以确保在任何条件下都正确一致。因此,为所有带有正确对齐的线程正确实例化了一致的 TLS 数据。
EINTR
或 EAGAIN
错误后重复的 pututxline
调用不再破坏 utmp
文件
当 pututxline
函数试图获取锁定且不成功时,该函数会返回 EINTR
或 EAGAIN
错误代码。在以前的版本中,如果立即调用 pututxline
并被管理来获取锁定,则它没有在 utmp
文件中使用已分配的匹配插槽,而是添加另一个条目。因此,这些未使用的条目极大地增加了 utmp
文件的大小。在这个版本中解决了这个问题,条目已正确添加到 utmp
文件中。
当发生内部故障时,m trace
不再挂起
在以前的版本中,mtrace
工具实现中的一个缺陷可能会导致内存追踪挂起。为解决这个问题,mtrace
内存追踪实现功能更强,即使在内部故障的情况下也能避免挂起。现在,用户可以调用 mtrace
,它不再挂起,从而在有限制的时间里完成。
fork
功能可避免使用 pthread_atfork
相关的某些死锁
在以前的版本中,如果程序注册了 in fork
处理程序并从异步信号处理程序调用 fork
,则依赖内部实现的锁定中的缺陷可能会导致程序停滞。在这个版本中,对 fork 及其 for fork
处理程序
的实施进行了调整,以避免单线程程序中出现死锁。
strstr
不再返回对截断模式的不正确的匹配
在某些 IBM Z 平台(z15,以前称为 arch13)上,strstr
函数在处理跨页面边界的搜索模式时无法正确更新 CPU 寄存器。因此,strstr
返回了不正确的匹配项。在这个版本中解决了这个问题,strstr 在
上面提到的场景中可以正常工作。
glibc
中的 C.UTF-8 本地源省略表达式已被修复
在以前的版本中,C.UTF-8 源区域中的一个缺陷会导致 U+10000 之外的所有 Unicode 代码点都缺乏校验权重。因此,所有超过 U+10000 的代码点均无法按预期互操作。C.UTF-8 源区域设置已被修正,新编译的二进制区域现在对所有 Unicode 代码点具有排序权重。因为这个修复,编译的 C.UTF-8 区域设置会较大 5.3MiB。
当在不调用 setpwent()
的情况下调用 getpwent()
时,glibc
不再会失败。
如果您的 /etc/nsswitch.conf
文件指向 Berkeley DB(db)
密码提供商,则可以使用 getpwent()
函数来请求数据,而无需首先调用 setpwent()。
当您调用 endpwent()
函数时,在没有首先调用 setpwent()
的情况下进一步调用 getpwent()
会导致 glibc
失败,因为 endpwent()
无法重置间隔以允许新的查询。在这个版本中解决了这个问题。因此,在使用 endpwent()
结束一个查询后,对 getpwent()
的其他调用将启动一个新的查询,即使您没有调用 setpwent()。
ltrace
现在可以跟踪强化二进制文件中的系统调用
在以前的版本中,ltrace
在 AMD 和 Intel 64 位构架中不会在特定强化的二进制文件(如系统二进制文件)中产生任何结果。在这个版本中,lt race
可以跟踪强化的二进制文件中的系统调用。
(BZ#1655368)
Intel 的 JCC 漏洞不再会在 GCC 编译器中造成大量性能损失
某些 Intel CPU 受到 Jump Conditional Code(JCC)错误影响,从而导致机器指令被错误地执行。因此,受影响的 CPU 可能无法正确执行程序。完整的修复涉及更新有安全漏洞的 CPU 的微码,这可能会导致性能下降。在这个版本中,在 assembler 中启用了一个临时解决方案,可帮助减少性能丢失。默认情况下不启用临时解决方案。
要应用该临时解决方案,请使用 GCC 重新编译带有 -Wa,-mbranches-with-32B-boundaries
命令行选项的程序。使用这个命令行选项重新编译的程序不会受到 JCC 缺陷的影响,但 microcode 更新仍然需要完全保护系统。
请注意,应用临时解决方案会增加程序的大小,并可能导致性能下降,尽管没有重新编译应该小于它。
使用并行构建时 make
不再减慢
在以前的版本中,当运行并行构建时,当等待其轮流运行时,子
进程可能会临时变得无响应。因此,带有高 -j
值的构建会减慢或以较低有效 -j
值运行。在这个版本中,make
的作业控制逻辑没有阻塞。因此,具有高 -j
值的构建会以全 -j
速度运行。
ltrace
工具现在正确报告功能调用
由于改进了应用于所有 RHEL 组件的二进制强化,ltrace
工具之前无法在 RHEL 组件的二进制文件中检测功能调用。因此,lt race
输出为空,因为它没有报告在此类二进制文件中使用任何检测到的调用。这个更新解决了 ltrace
处理函数调用的方式,这防止了上面描述的问题的发生。
(BZ#1618748)
5.4.11. Identity Management
dsctl
实用程序不再无法在其名称中管理带有连字符的实例
在以前的版本中,dsctl
实用程序无法正确解析 Directory Server 实例名称中的连字符。因此,管理员无法使用 dsctl
管理名称中带有连字符的实例。在这个版本中解决了这个问题,dsctl
现在可以正常工作。
目录服务器实例名称现在可以有最多 103 个字符
当 LDAP 客户端建立与目录服务器的连接时,服务器会将与客户端地址相关的信息存储在本地缓冲区中。在以前的版本中,这个缓冲区的大小太小,无法存储超过 46 个字符的 LDAPI 路径名称。例如,如果 Directory Server 实例的名称太长,就会出现这种情况。因此,服务器因为缓冲区溢出而意外终止。在这个版本中,缓冲区大小增加到 Netscape Portable Runtime(NSPR)库对路径名称支持的最大大小。因此,在上述场景中 Directory 服务器不再崩溃。
请注意,由于 NSPR 库中的限制,实例名称可以最多 103 个字符。
pkidestroy
工具现在选择正确的实例
在以前的版本中,在一个半删除的实例上执行的 pkidestroy --force
命令默认选择 pki-tomcat
实例,无论使用 -i 实例
选项指定的实例名称是什么。
因此,这会删除 pki-tomcat
实例,而不是预期的实例,--remove-logs
选项不会删除预期的实例日志。pkidestroy
现在应用正确的实例名称,仅删除预期实例的左边。
sssd-ldap
man page 中更新了 ldap_user_authorized_service
描述
RHEL 8 中更改了可插拔验证模块(PAM)堆栈。例如,systemd 用户会话现在使用 systemd
-user
PAM 服务启动 PAM 对话。此服务现在递归包含 system-auth
PAM 服务,其中可能包括 pam_sss.so
接口。这意味着始终调用 SSSD 访问控制。
在为 RHEL 8 系统设计访问控制规则时,您应该了解这一变化。例如,您可以将 systemd-user
服务添加到允许的服务列表中。
请注意一些访问控制机制,如 IPA HBAC 或 AD GPOs,默认情况下 systemd-user
服务已添加到允许的服务列表中,您不需要进行任何操作。
sssd-ldap
man page 已更新,以包含此信息。
现在,在 IdM 中启用 AD 信任支持时会显示有关所需 DNS 记录的信息
在以前的版本中,当启用对带有外部 DNS 管理的 Red Hat Enterprise Linux Identity Management(IdM)安装中的 Active Directory(AD)信任时,不会显示有关所需 DNS 记录的信息。手动输入 ipa dns-update-system-records --dry-run
命令是 necesary,以获取 IdM 所需的所有 DNS 记录列表。
在这个版本中,ipa -adtrust-install
命令可以正确地列出 DNS 服务记录,以便手动添加 DNS 区域。
现在,在带有集成 DNS 的 IdM 服务器中默认禁用递归 DNS 查询
在以前的版本中,在使用带有集成 DNS 的身份管理(IdM)服务器时,默认启用递归查询。因此,有可能使用服务器进行 DNS 放大攻击。有了这个更新,现在默认禁用递归 DNS 查询,且不再使用服务器进行 DNS 放大攻击。
您可以通过修改 IdM 服务器上的集成 DNS 配置来手动允许对特定客户端的递归查询。例如,要允许任何人查询服务器以获取权威数据,但只允许可信客户端访问您的缓存和递归,请在 trusted
访问控制列表(ACL)中列出客户端:
在
/etc/named/ipa-ext.conf
文件中创建一个trusted
ACL:acl "trusted" { 192.168.0.0/16; 10.153.154.0/24; localhost; localnets; };
将
trusted
ACL 添加到/etc/named/ipa-options-ext.conf
文件中:allow-query { any; }; allow-recursion { trusted; }; allow-query-cache { trusted; };
(BZ#2151696)
5.4.12. Desktop
当使用软件渲染器时,Wayland 上的 GNOME Shell 不再缓慢
在以前的版本中,当使用软件渲染器时,GNOME Shell 的 Wayland 后端没有使用可缓存的帧缓冲程序。因此,与 X.org 后端的软件渲染的 GNOME Shell 相比,Wayland 上的软件渲染 GNOME Shell 速度较慢。
在这个版本中,Wayland 的 GNOME Shell 中添加了中间的 shadow 帧缓冲。因此,Wayland 上的软件渲染的 GNOME Shell 现在和 X.org 上的 GNOME Shell 一样执行。
(BZ#1737553)
5.4.13. 虚拟化
在 10 代 Intel Core 处理器中启动虚拟机不再失败
在以前的版本中,在使用第 10 代 Intel Core 处理器(也称为 Icelake-Server)的主机模型中启动虚拟机(VM)会失败。在这个版本中,lib virt
不再尝试禁用 QEMU 不支持的 pconfig
CPU 功能。因此,在运行 10 代 Intel 处理器的主机模型中启动虚拟机不再会失败。
使用 cloud-init 在
Microsoft Azure 上置备虚拟机现在可以正常工作
在以前的版本中,无法使用 cloud-init
工具在 Microsoft Azure 平台上置备 RHEL 8 虚拟机(VM)。在这个版本中,Azure 端点 的 cloud-init
处理已被修复,Azure 上的 RHEL 8 虚拟机现在可以按预期进行。
(BZ#1641190)
RHEL 7 主机上的 RHEL 8 虚拟机可在高于 1920x1200 的分辨率中可靠地查看
在以前的版本中,当使用在 RHEL 7 主机系统中运行的 RHEL 8 虚拟机(VM)时,显示虚拟机图形输出(如在 kiosk 模式下运行应用程序)的某些方法不能超过 1920x1200。因此,即使主机硬件支持更高的分辨率,使用这些方法显示虚拟机也只能达到 1920x1200 的分辨率。这个版本会调整 DRM 和 QXL 驱动程序,以防止上述问题的发生。
(BZ#1635295)
使用 cloud-init
自定义 ESXi 虚拟机并重启虚拟机现在可以正常工作
在以前的版本中,如果 cloud-init
服务用于修改在 VMware ESXi hypervisor 上运行的虚拟机(VM)以使用静态 IP,然后克隆虚拟机,则新的克隆虚拟机在某些情况下需要很长时间才能重启。在这个版本中,cloud-init
不会将虚拟机的静态 IP 重新写入 DHCP,这可防止上述问题发生。
(BZ#1666961, BZ#1706482)
5.4.14. 容器
从 quay.io 注册表中提取镜像不再会导致意外的镜像
在以前的版本中,在 /etc/containers/registries.conf 提供的默认 registry 搜索列表中列出 quay.
io 容器镜像 registry 可允许用户在使用简短名称时拉取欺骗镜像。为解决这个问题,quay.io 容器镜像 registry 已从 /etc/containers/registries.conf
的默认 registry 搜索列表中删除。因此,从 quay.io
registry 中拉取镜像现在要求用户指定完整的存储库名称,如 quay.io/myorg/myimage
。quay.io registry 可以添加回 /etc/containers/registries.conf
中的默认 registry 搜索列表中,以使用短名称重新启用拉取容器镜像,但不建议这样做,因为它可能会造成安全风险。