<< Back to man.ChinaUnix.net

第 3章 . 安全更新

当发现了安全弱点后,你必须更新受到影响的软件以便把潜在的安全威胁限制在一定范围内。如果该软件是目前支持的 红帽企业 Linux 发行版本的一部分,Red Hat, Inc. 会保证尽快地发行修正弱点的更新软件包。在某个安全漏洞被宣布的同时通常会附带补丁(或修正问题的源码)。然后,该补丁就会被应用到 红帽企业 Linux 软件包中,当它被红帽的质检组测试后就会作为勘误更新而被发行。然而,如果安全漏洞在宣布的时候没有附带补丁,某个红帽开发人员就会和该软件的维护者合作来修正这个问题。当问题被修正后,该软件包会被测试并作为勘误更新而发行。

如果和你使用的软件有关的勘误更新被发行了,强烈建议你尽快地更新受到影响的软件包,以便尽量缩短系统上存有潜在威胁的时间。

3.1. 更新软件包

在更新系统上的软件包时,从可信任源下载它们至关重要。某个攻击者可以轻而易举地使用修正问题的同一版本号码来重新建构某个软件包,却在其中隐藏另一种安全漏洞,然后在互联网上发行。如果这样的情况发生了,使用根据原始 RPM 来校验软件包这一方法就检测不到这个漏洞。因此,从可信任源(如 Red Hat, Inc.)下载 RPM,并检查软件包的签名来校验它的完好性这一点至关重要。

红帽提供两种检索安全勘误更新的方法:

  1. 在 红帽网络 上列出并可被下载

  2. 在红帽勘误网站上列出,但是没有下载链接

注记注记
 

从 红帽企业 Linux 产品系列起,更新的软件包只能从 红帽网络 中被下载。虽然红帽勘误网站包括更新信息,它却不包括可下载的实际软件包。

3.1.1. 使用红帽网络

红帽网络允许你自动化大部分更新进程。它会判定哪些软件包是你的系统必需的;从一个安全仓库中下载它们;校验 RPM 签名来确定它们没有被篡改;然后更新它们。软件包安装可以立即发生,也可以被安排在某一特定时间段内进行。

对于每台要更新的机器,红帽网络 都需要一份系统配置文件(System Profile)。系统配置文件中包含和系统相关的硬件和软件信息。该信息会被保密,绝不会泄漏给他人。它仅被用来判定每个系统上应该使用哪些勘误更新。没有它,红帽网络 无法判定系统所需的更新。当安全勘误(或任何一种类型的勘误)被发行后,红帽网络 会发送一份电子邮件,其中不仅描述了该勘误,也列举了一系列受到影响的系统。要应用更新,使用红帽更新代理或通过 http://rhn.redhat.com 网站来调度要更新的软件包。

窍门窍门
 

红帽企业 Linux 中包括了 红帽网络更新通知工具。它是一个简便的面板图标,在出现了适用于 红帽企业 Linux 系统的更新后会显示可视的警告。关于这个小程序的详情,请参考以下 URL:http://rhn.redhat.com/help/basic/applet.html

要了解更多使用红帽网络的益处,请参考《红帽网络参考指南》。它位于 http://www.redhat.com/docs/manuals/RHNetwork/。你还可以访问 http://rhn.redhat.com

重要重要
 

在安装任何安全勘误之前,请确定阅读包括在勘误报告内的特殊说明,并正确地执行它们。关于如何应用勘误更新的常规说明,请参阅第 3.1.5 节

3.1.2. 使用红帽勘误网站

当安全勘误报告被发行时,它们被出版在红帽勘误网页:http://www.redhat.com/apps/support/errata/。从这一页上为你的系统选择产品和版本,然后选择网页上方的 security 按钮来只显示 红帽企业 Linux 安全顾问。如果某个安全顾问中的概要所描述的是用在你的系统上的某个软件包,点击概要来阅读详情。

详情页描述了该安全漏洞,以及若要修正这个漏洞,除了升级软件包之外还必须要执行的特殊说明。

要下载更新软件包,点击链接来登录 红帽网络,然后点击软件包的名称,把它们保存在硬盘驱动器上。极力推荐你创建一个新目录,如 /tmp/updates,然后把所有的下载软件包放置在其中。

3.1.3. 校验被签名的软件包

所有的 红帽企业 Linux 软件包都使用 Red Hat, Inc. GPG 钥匙签名。GPG 代表 GNU Privacy Guard(GNU 隐私卫士)或 GnuPG。它是被用来确保发行文件的真实性的自由软件。例如,红帽拥有的私钥(或密钥)会锁住软件包,而公钥可以打开并校验软件包。如果在 RPM 校验过程中,被红帽发行的公钥和密钥不匹配,该软件包就可能被篡改了,因此不可信任。

红帽企业 Linux 中的 RPM 工具会在安装软件包前自动校验它的 GPG 签名。如果你没有安装 Red Hat, Inc. GPG 公钥,请从一个安全、静态的位置(如 红帽企业 Linux 安装光盘)上安装它。

假定光盘被挂载在 /mnt/cdrom,使用以下命令来把它导入到你的钥匙圈上(keyring,系统上可信任钥匙的数据库):

rpm --import /mnt/cdrom/RPM-GPG-KEY

要显示所有已安装的用于 RPM 校验的公钥列表,执行以下命令:

rpm -qa gpg-pubkey*

红帽公钥的输出会包括:

gpg-pubkey-db42a60e-37ea5438

要显示特定公钥的细节,使用 rpm -qi 命令,和前一命令的输出。在这个例子中是:

rpm -qi gpg-pubkey-db42a60e-37ea5438

在安装 RPM 文件前校验它的签名这一个步骤至关重要。只有这样才能确保这些文件没有从 Red Hat, Inc. 软件包的发行版本中被篡改。要立刻校验所有已下载的软件包,使用以下命令:

rpm -K /tmp/updates/*.rpm

对于每个软件包,如果 GPG 钥匙校验成功,该命令会返回:gpg OK。否则,确认你使用的是正确的红帽公钥,并校验其内容。没有通过 GPG 校验的软件包不应该被安装,因为它们可能已经被第三方篡改了。

校验了 GPG 公钥,并下载了所有和勘误报告有关的软件包后,在 shell 提示下以根用户身份安装它们。

3.1.4. 安装被签名的软件包

对多数软件包(除了内核软件包外)来说,你可以使用以下命令来安全地安装:

rpm -Uvh /tmp/updates/*.rpm

安装内核软件包应使用以下命令:

rpm -ivh /tmp/updates/<kernel-package>

把前一个例子中的 <kernel-package> 改成内核 RPM 的名称。

一旦系统使用新内核被安全引导后,你可以使用以下命令来删除老内核:

rpm -e <old-kernel-package>

把前一个例子中的 <old-kernel-package> 改成老内核 RPM 的名称。

注记注记
 

你不必删除老内核。默认的引导装载程序 GRUB 允许你安装多个内核,然后在引导时从菜单中选择要引导的内核。

重要重要
 

在安装任何安全勘误之前,请确定阅读包括在勘误报告内的特殊说明,并正确地执行它们。关于如何应用勘误更新的常规说明,请参阅第 3.1.5 节

3.1.5. 应用改变

通过红帽网络或红帽勘误网站下载并安装了安全勘误后,停用旧有软件、使用新软件这一点很重要。怎么做到这一点要根据你的软件类型而定。以下的列表详细列举了软件的一般类别,并为更新软件包后使用被更新的版本提供了说明。

注记注记
 

通常说来,重新引导系统是保证所用软件版本是最新版本的最肯定方法;但是,系统管理员并不总是能够使用这个办法。

应用程序

用户空间的应用程序是能够被系统用户引发的任何程序。通常,这类程序只有在某用户、脚本、或自动化任务工具启动它们时才被使用,而且并不持续运行很久。

当这类用户空间的应用程序被更新后,停运系统上该程序的所有实例,然后再重新启动它来使用更新的版本。

内核

内核是红帽企业 Linux 操作系统的核心软件组成部分。它管理内存、处理器和外设的使用,还进行所有的任务调度。

由于这种核心角色,你不可能不停运计算机而重新启动内核。因此,在系统被重新引导前,更新的内核版本就无法被使用。

共享库

共享库是编码单元的集合,例如 glibc 被许多应用程序和服务所使用。使用共享库的应用程序通常在初始化的时候载入共享编码,因此使用已更新的共享库的应用程序必须停运并被重新启动。

要判定哪些链接到某个共享库的应用程序正在运行,使用 lsof 命令,如以下所示:

lsof /usr/lib/libwrap.so*

该命令返回一个使用 TCP 会绕程序来进行主机访问控制的所有正在运行的程序的列表。因此,如果 tcp_wrappers 软件包被更新了,所有列举了的程序都必须被停运并被重新启动。

SysV 服务

SysV 服务是在引导过程中启动的持续性服务器程序。SysV 服务的例子包括:sshdvsftpd、和 xinetd

因为只要机器被启动了,这些程序就通常持久性地滞留在内存中,所以每个更新了的 SysV 服务在软件包升级后必须被停运并重新启动。你可以使用服务配置工具来做到,或登录到根用户的 shell,然后使用 /sbin/service 命令,如以下所示:

/sbin/service <service-name> restart

在前面的例子中,把 <service-name> 改成服务的名称,如 sshd

关于服务配置工具的详细信息,请参阅 《红帽企业 Linux 系统管理指南》的“控制对服务的访问”这一章。

xinetd 服务

xinetd 这个超级服务控制的服务只有在有活跃连接时才运行。由 xinetd 控制的服务包括:Telnet、IMAP、和 POP3。

因为这些服务的新实例是在每次 xinetd 收到新请求时被启动的,升级后的连接就会由已更新的软件来处理。然而,如果由 xinetd 控制的服务在被升级时还存在着一些活跃连接的话,这些连接就会由软件的老版本处理。

要停止某个 xinetd 控制的服务的早期实例,升级和该服务相应的软件包,然后停止所有当前正在运行的进程。使用 ps 命令来判定进程是否在运行,再使用 killkillall 命令来停运该服务的所有当前实例。

例如:如果 imap 软件包的安全勘误被发行了,升级这些软件包,然后以根用户身份在 shell 提示下键入以下命令:

ps -aux | grep imap

该命令返回所有活跃的 IMAP 会话。使用以下命令可以终止单个会话:

kill -9 <PID>

在前面的例子中,把 <PID> 替换为 IMAP 会话的进程号码(在 ps 命令输出的第二列)。

要杀死所有活跃的 IMAP 会话,使用以下命令:

killall imapd

关于 xinetd 的一般信息,请参阅《红帽企业 Linux 参考指南》的“TCP 会绕程序和 xinetd”这一章。