Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第 3 章 使您的系统保持最新状态

本章论述了保持系统最新的过程,涉及计划和配置安装安全更新的方式,应用新更新的软件包引入的变化,以及使用红帽客户门户网站来跟踪安全公告。

3.1. 维护已安装的软件

发现安全漏洞时,必须更新受影响的软件,以限制任何潜在的安全风险。如果软件是当前支持的 Red Hat Enterprise Linux 发行版中的一个软件包的一部分,红帽会发布可尽快修复漏洞的更新软件包。
通常,针对给定安全漏洞的公告会附带一个修复此问题的补丁(或源代码)。然后,这个补丁适用于 Red Hat Enterprise Linux 软件包,并作为勘误更新进行测试并发布。但是,如果公告不包括补丁,红帽开发人员首先与软件维护人员合作,以解决问题。修复此问题后,软件包将作为勘误更新进行测试并发布。
如果为系统上使用的软件发布勘误更新,强烈建议您尽快更新受影响的软件包,以最大程度降低系统可能存在安全漏洞的时间。

3.1.1. 规划和配置安全更新

所有软件都包含 bug。通常,这些 bug 可能会导致漏洞使您的系统暴露给恶意用户。未更新的软件包是计算机入侵的常见原因。实施及时安装安全补丁的计划,以快速消除发现的漏洞,因此无法利用它们。
当安全更新可用时,测试安全更新,并将其调度到安装。在更新发行及其系统中安装时,需要使用其他控制来保护系统。这些控制取决于确切的漏洞,但可能包括其他防火墙规则、使用外部防火墙或更改软件设置。
支持的软件包中的错误使用勘误机制修复。勘误由一个或多个 RPM 软件包组成,并附带特定勘误处理的问题的简短说明。所有勘误都通过 红帽订阅管理服务 提供给具有有效订阅的客户。解决安全问题的勘误被称为 红帽安全公告
有关使用安全勘误的更多信息,请参阅 第 3.2.1 节 “在客户门户网站中查看安全公告”。有关红帽订阅管理服务的详细信息,包括如何从 RHN Classic 迁移的说明,请参阅与此服务相关的文档: 红帽订阅管理

3.1.1.1. 使用 Yum 的安全功能

Yum 软件包管理器包含若干与安全相关的功能,可用于搜索、列出、显示和安装安全勘误。这些功能还支持使用 Yum 安装安全更新。
要检查系统可用的与安全相关的更新,请以 root 用户身份输入以下命令:
~]# yum check-update --security
Loaded plugins: langpacks, product-id, subscription-manager
rhel-7-workstation-rpms/x86_64                  | 3.4 kB  00:00:00
No packages needed for security; 0 packages available
请注意,上述命令以非交互模式运行,因此可以在脚本中使用它来自动检查是否有可用的更新。当有任何可用的安全更新,如果不存在,则命令会返回 100 的 exit 值。0在遇到错误时,它会返回 1
类似地,使用以下命令只安装与安全相关的更新:
~]# yum update --security
使用 updateinfo 子命令显示有关可用更新的存储库提供的信息。updateinfo 子命令本身接受多个命令,一些与安全相关的用途相关。有关这些命令的概述信息,请参阅 表 3.1 “与安全相关的命令,用于 yum updateinfo”

表 3.1. 与安全相关的命令,用于 yum updateinfo

命令 描述  
公告 [公告] 显示有关一个或多个公告的信息。使用 公告 号或数字替换公告。 
CVE 显示与 CVE 相关的信息子集(常见漏洞和暴露)。 
Securitysec 显示所有与安全相关的信息。 
 [severity_level] 或 sev [severity_level] 显示提供的 severity_level 的安全相关软件包的信息。 

3.1.2. 更新和安装软件包

更新系统上的软件时,务必要从可信源下载更新。攻击者可以轻松重建具有相同版本号的软件包,其版本号应该与应该解决问题但存在不同的安全漏洞,并在互联网上释放它。如果发生这种情况,使用安全措施(如针对原始 RPM 验证文件)不会检测漏洞。因此,仅从可信源(如红帽)下载 RPM 非常重要,并检查软件包签名以验证其完整性。
有关如何使用 Yum 软件包管理器的详细信息,请参见 Red Hat Enterprise Linux 7 系统管理员指南中的 Yum 章节。

3.1.2.1. 验证签名的软件包

所有 Red Hat Enterprise Linux 软件包都使用 Red Hat GPG 密钥签名。GPG 代表 GNU Privacy GuardGnuPG,这是用于确保分布式文件真实性使用的免费软件包。如果软件包签名验证失败,则可以更改软件包,因此无法信任。
Yum 软件包管理器允许自动验证其安装或升级的所有软件包。此功能默认为启用。要在您的系统中配置这个选项,请确保在 /etc/yum.conf 配置文件中将 gpgcheck 配置指令设置为 1
使用以下命令手动验证文件系统中的软件包文件:
rpmkeys --checksig package_file.rpm
有关红帽软件包签名实践的更多信息,请参阅红帽客户门户网站上的 产品签名(GPG)密钥 文章。

3.1.2.2. 安装签名软件包

要安装经过验证的软件包(请参阅 第 3.1.2.1 节 “验证签名的软件包” 以了解如何从您的文件系统中验证软件包),请使用 yum install 命令,如下所示:
yum install package_file.rpm
使用 shell 通配一次性安装多个软件包。例如,以下命令会在当前目录中安装所有 .rpm 软件包:
yum install *.rpm
重要
在安装任何安全勘误前,请务必阅读勘误报告中包含的任何特殊指令,并相应地执行它们。有关应用勘误更新所做的更改的一般说明,请参阅 第 3.1.3 节 “应用由安装更新引入的变化”

3.1.3. 应用由安装更新引入的变化

下载并安装安全勘误和更新后,停止使用旧软件并开始使用新软件非常重要。具体操作方式取决于已更新的软件类型。以下列表列出了软件的一般类别,并提供在软件包升级后使用更新的版本的说明。
注意
通常,重新引导系统是确保使用最新版本的软件包的确定方式;但是,此选项并非始终是必需的,也并非总是可用于系统管理员的。
应用程序
用户空间应用程序是用户可以启动的任何程序。通常,只有在用户、脚本或自动任务实用程序启动它们时,才会使用此类应用。
更新这样的用户空间应用程序后,停止系统上的任何应用程序实例,然后再次启动程序以使用更新的版本。
内核
内核是 Red Hat Enterprise Linux 7 操作系统的核心软件组件。它管理对内存、处理器和外围设备的访问,并且调度所有任务。
由于其中央角色,在没有重新启动计算机的情况下,无法重新启动内核。因此,在系统重启前,无法使用内核版本。
KVM
更新 qemu-kvmlibvirt 软件包后,需要停止所有客户虚拟机,重新载入相关的虚拟化模块(或重启主机系统),并重新启动虚拟机。
使用 lsmod 命令确定从以下哪些模块被加载: kvmkvm-intelkvm-amd。然后,使用 modprobe -r 命令删除并随后使用 modprobe -a 命令重新加载受影响的模块。fox 示例:
~]# lsmod | grep kvm
kvm_intel             143031  0
kvm                   460181  1 kvm_intel
~]# modprobe -r kvm-intel
~]# modprobe -r kvm
~]# modprobe -a kvm kvm-intel
共享库
共享库是代码单元,如 glibc,它们由多个应用程序和服务使用。使用共享库的应用程序通常会在应用程序初始化时加载共享代码,因此任何使用更新库的应用程序都必须停止并重新启动。
要确定哪个应用程序针对特定库链接,请使用 lsof 命令:
lsof library
例如,要确定哪些运行的应用程序链接到 libwrap.so.0 库,请输入:
~]# lsof /lib64/libwrap.so.0
COMMAND     PID USER  FD   TYPE DEVICE SIZE/OFF     NODE NAME
pulseaudi 12363 test mem    REG  253,0    42520 34121785 /usr/lib64/libwrap.so.0.7.6
gnome-set 12365 test mem    REG  253,0    42520 34121785 /usr/lib64/libwrap.so.0.7.6
gnome-she 12454 test mem    REG  253,0    42520 34121785 /usr/lib64/libwrap.so.0.7.6
此命令返回一个使用 TCP 包装程序进行主机访问控制的所有运行程序的列表。因此,在更新 tcp_wrappers 软件包时,任何列出的程序都必须停止并重新启动。
systemd 服务
systemd 服务是通常在引导过程中启动的持久服务器程序。systemd 服务示例包括 sshdvsftpd
因为只要机器正在运行,这些程序通常会在内存中保留,因此在升级其软件包后,每个更新的 systemd 服务都必须停止并重新启动。这可以以 root 用户身份使用 systemctl 命令完成:
systemctl restart service_name
使用您要重启的服务的名称替换 service_name,如 sshd
其他软件
按照下方链接的资源概述的说明,正确更新以下应用程序。