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. 规划和配置安全更新

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

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 的退出值,如果没有任何安全更新,则返回 0。在遇到错误时,它会返回 1
同样,使用以下命令仅安装与安全相关的更新:
~]# yum update --security
使用 updateinfo 子命令显示或操作存储库提供的有关可用更新的信息。updateinfo 子命令本身接受多个命令,其中一些与安全性相关的用途相关。有关这些命令的概述请查看 表 3.1 “yum updateinfo 可用的与安全相关的命令”

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

命令 描述  
[公告公告] 显示有关一个或多个公告的信息。使用公告号或数字替换 advisories 
CVE 显示与 CVE 相关的信息子集(常见漏洞和风险)。 
securitysec 显示所有与安全相关的信息。 
[ 严重性_level 或 sev [severity_level]] 显示有关所提供严重性_ 级别的安全相关软件包的信息 

3.1.2. 更新和安装软件包

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

3.1.2.1. 验证签名的软件包

所有 Red Hat Enterprise Linux 软件包都使用 Red Hat GPG 密钥签名GPG 代表 GNU Privacy Guard ,GnuPG 是用于确保分布式文件的真实性的免费软件包。如果对软件包签名的验证失败,软件包可能会被更改,因此不可信任。
Yum 软件包管理器允许自动验证安装或升级的所有软件包。此功能默认为启用。要在您的系统上配置这个选项,请确保在 /etc/yum.conf 配置文件中将 gpgcheck 配置指令设置为 1
使用以下命令手动验证文件系统中的软件包文件:
rpmkeys --checksig package_file.rpm

3.1.2.2. 安装签名的软件包

要从您的文件系统安装已验证的软件包(有关如何验证软件包的信息),以 root 用户身份使用 yum install 命令,如下所示: 第 3.1.2.1 节 “验证签名的软件包”
yum install package_file.rpm
使用 shell glob 同时安装多个软件包。 例如,以下命令会在当前目录中安装 all.rpm 软件包:
yum install *.rpm
重要
在安装任何安全勘误之前,请务必阅读勘误表报告中包含的任何特殊指令,并相应地执行它们。有关应用勘误更新所做的更改的常规说明,请参阅 第 3.1.3 节 “应用由已安装更新引入的更改”

3.1.3. 应用由已安装更新引入的更改

下载并安装安全勘误和更新后,必须停止旧软件的使用,再开始使用新软件。具体操作方式取决于已更新的软件的类型。以下列表列出了软件的一般类别,并提供软件包升级后使用更新版本的说明。
注意
通常,重新启动系统是确保使用最新版本的软件包的最可靠方法;但是,此选项并非始终必需,系统管理员也不始终可用。
应用程序
用户空间应用是可由用户发起的任何程序。通常,此类应用仅在用户、脚本或自动任务实用程序启动时才使用。
更新此类用户空间应用后,在系统上停止应用的任何实例,然后再次启动该程序以使用更新的版本。
内核
内核是红帽企业 Linux 7 操作系统的核心软件组件。它管理对内存、处理器和外围设备的访问,并且调度所有任务。
由于它的核心角色,如果不同时重新启动计算机,内核就无法重新启动。因此,重启系统之前,无法使用内核的更新版本。
KVM
更新 qemu-kvmlibvirt 软件包后,需要停止所有客户机虚拟机,重新载入相关的虚拟化模块(或重启主机系统)并重启虚拟机。
使用 lsmod 命令确定加载了以下哪些模块:kvm、kvm-intel 或 kvm-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
其他软件
按照下面链接的资源中所述,正确更新以下应用程序。