第 3章. 安全性更新

當您發現安全性的缺失時,必須更新被影響到的軟體以減低任何潛在的危機,假如該軟體是 目前有受支援之 Red Hat Enterprise Linux 版本中套件的一部分,Red Hat, Inc. 有責任盡快釋出修正這項缺失 的更新套件。 通常安全性缺失的公告都會伴隨一個修正程式(或者是修正問題的原始碼), 我們將會套用這個修正程式到 Red Hat Enterprise Linux 套件,再由 Red Hat 的品質保證小組進行測試,然後 再以一個修補程式更新釋出。 然而當公告中不含有修正程式時,一個 Red Hat 的程式開發者 將會與該軟體的維護者一起努力將問題修復,當問題修正後,將會進行套件測試,然後再釋出 一個修補程式更新。

假如有一個適用於您系統中使用之軟體的修補程式更新釋出,強烈建議您盡快更新有問題的 套件,以減低系統含有潛在風險的時間。

3.1. 更新套件

當您更新系統上的軟體時,最好從可信賴的來源下載更新,一個攻擊者可以很容易地重建一個 含有相同版本號碼的套件,來混充為用來修正問題的更新套件,不過其中卻含有另一個不同的 安全性問題,並將它放置在網際網路上。 假如發生如此情事的話,藉由使用例如針對原本的 RPM 來檢驗檔案的安全性方式並無法偵測到問題的存在,因此最好只從可信賴的來源下載 RPMs,例如從 Red Hat, Inc.,並且要檢查該套件的數位簽章以檢驗它的完整性。

Red Hat 提供兩種方式使您可以取得安全性修補的更新:

  1. 從 Red Hat Network 下載。

  2. 從 Red Hat 的修補程式網站下載。

3.1.1. 使用 Red Hat Network

Red Hat Network 允許大部分的更新過程都能自動化,它可找出系統需要那些 RPM 套件,然後將它們從安全的檔案庫下載下來,並且檢驗 RPM 簽章以確定它們沒有被竄改過,然後再更新它們。 您可以立即進行套件安裝,或者是排定某一個時間在進行安裝。

對每一部要進行更新的機器,Red Hat Network 都需要一個系統資料檔,系統資料檔中含有關於這部 系統的硬體與軟體的資訊,這些資訊將會被機密的保存,而且不會給予他人。 這個資料檔 只用於決定那些修補程式更新適用於每一部系統,而缺少它的話,Red Hat Network 將無法決定該系統 是否需要更新。 當一個安全性的修補程式(或者是任何類型的修補程式)釋出後, Red Hat Network 會傳送一封電子郵件,其中含有該修補程式之描述以及所影響之系統的清單,如要套用更新, 請使用 Red Hat 更新代理程式 或者是透過 http://rhn.redhat.com 網站排定要更新套件的時程。

提示建議
 

Red Hat Enterprise Linux 含有 Red Hat Network 更新提示工具,它是一個很方便好用的面板圖示, 當有一個 Red Hat Enterprise Linux 系統的更新出現時,它會顯示明顯的警示圖示。 請參考下列的網址以取得 關於這個小程式的更多資訊: http://rhn.redhat.com/help/basic/applet.html

如要對使用 Red Hat Network 的好處做更多的了解,請參考位於 http://www.redhat.com/docs/manuals/RHNetwork/Red Hat Network 參考手冊,或者是拜訪 http://rhn.redhat.com

重要重要
 

在安裝任何的安全性修補程式前,請確實閱讀在修補程式報告中的任何特殊指示,並且依次地 執行它們。 請參考 第 3.1.3 節 以取得關於套用 由修補程式更新所作變更的一般指示。

3.1.2. 使用 Red Hat 的修補程式網站

當安全性修補程式報告釋出後,它們將會被公佈在 Red Hat 的修補程式網站位於 http://www.redhat.com/apps/support/errata/,在這個網頁中, 為您的系統選取產品與版本,然後在網頁的上方選擇 security, 使該網頁只顯示出 Red Hat Enterprise Linux Security Advisories。 假如這些諮詢意見之一的概要描述用於 您系統的套件,請點選該概要以取得更詳細資訊。

在細節的那頁描述安全性的漏洞以及除了更新套件以修正安全性漏洞外,必須執行的任何 特殊指示。

如要下載更新的套件,請點選套件名稱並將之儲存到硬碟上,強烈建議您建立一個例如 /tmp/updates 的新目錄,然後將所有下載的套件存放在其中。

所有 Red Hat Enterprise Linux 的套件都簽署了 Red Hat, Inc. GPG 金鑰,Red Hat Enterprise Linux 中的 RPM 工具會在安裝之前 自動檢驗該 RPM 套件的 GPG 簽名,假如您沒有安裝 Red Hat, Inc. GPG 金鑰,請從一個安全 且靜態的位置(如 Red Hat Enterprise Linux 的安裝光碟片)來安裝它。

假設光碟機是掛載在 /mnt/cdrom,請使用下列的指令來將之匯入到 金鑰環中:

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

如要顯示用於 RPM 驗證之所有安裝的金鑰清單,請執行下列指令:

rpm -qa gpg-pubkey*

至於 Red Hat, Inc. 的金鑰,輸出將含有下列的資訊:

gpg-pubkey-db42a60e-37ea5438

如要顯示關於一個特定金鑰的的細節,請使用 rpm -qi 指令後面加上 上一個指令的輸出,如以下例子所示:

rpm -qi gpg-pubkey-db42a60e-37ea5438

在安裝 RPM 套件之前,檢查 RPM 檔案的簽名是相當重要的,如此才能確保來自 Red Hat, Inc. 所釋出的套件沒有被修改過,如要一次檢驗所有下載的套件,請執行下列的指令:

rpm -K /tmp/updates/*.rpm

對於每一個套件,如果 GPG 金鑰的驗證成功,指令將會傳回 gpg OK

在驗證完 GPG 金鑰,而且下載完所有與修補程式報告相關的所有套件後,請在 shell 提示 符號下以 root 身份安裝這些套件。

對於大部分的套件來說(除了核心套件外),您可以執行下列指令來順利地完成這件事:

rpm -Uvh /tmp/updates/*.rpm

至於核心套件,建議您使用下列的指令:

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

請以核心 RPM 的名稱取代前一例子中的 <kernel-package>

當您的機器使用新的核心重新開機後,您可以使用下列指令來移除舊的核心:

rpm -e <old-kernel-package>

請以舊的核心 RPM 名稱取代前一例子中的 <old-kernel-package>

注請注意
 

移除舊的核心並不是絕對必要的。

重要重要
 

在安裝任何的安全性修補程式前,請確實閱讀在修補程式報告中的任何特殊指示,並且依次地 執行它們。 請參考 第 3.1.3 節 以取得關於套用 由修補程式更新所作變更的一般指示。

3.1.3. 套用變更

在從 Red Hat Network 或 Red Hat 的修補程式網站下載並安裝安全性修補程式後,請停止使用舊版本的軟體,而開始使用新版本的軟體。 該如何完成這個過程取決於要更新的軟體類型,以下的清單分項列出軟體的一般類別,而且提供在一個套件升級後使用更新版本的指示。

注請注意
 

一般來說,重新啟動系統是確保使用最新版本之軟體套件最佳的方式,然而,對系統管理員 來說,這個選項並非總是可以使用。

應用程式

User-space 的應用程式是可由系統使用者初始化的任何程式,基本上,如此的應用程式只當 一個使用者、程式碼或自動化的作業工具啟動它們時才被使用,並且不會持續太長的時間。

一旦更新一個 user-space 的應用程式後,關閉系統上該應用程式的任何使用中的實例, 然後再次啟動程式以使用更新的版本。

核心

核心是 Red Hat Enterprise Linux 作業系統最主要的軟體元件,它掌管記憶體、微處理器與週邊設備的存取, 以及排程所有的系統工作。

由於它的中心角色,在沒有關閉電腦的情況下無法重新啟動核心,因此在系統重新啟動之前, 您將無法使用更新版本的核心。

共享函式庫

共享函式庫是程式碼的單位(如 glibc)是由許多應用程式與服務所 使用的,有利用共享函式庫的應用程式基本上都會在應用程式初始時載入共享程式碼,所以 使用更新函式庫的任何應用程式都必須在關閉後再重新啟動。

如要找出那一個執行中的應用程式連結到一個特定的函式庫,請使用 lsof 指令,如以下例子所示:

lsof /usr/lib/libwrap.so*

這個指令傳回使用 TCP 包裹程式當作主機存取控制的所有執行中程式的清單,因此當 tcp_wrappers 套件更新後,任何所列出的程式都必須關閉後再 重新啟動。

SysV 服務

SysV 服務是在開機過程中啟動的持續性伺服器程式,SysV 服務的例子有 sshd, vsftpdxinetd

因為這些程式在機器開機後便一直停留在記憶體中,因此在套件升級後,每一個更新的 SysV 服務都必須先關閉後再重新啟動。 這個動作可以使用 系統服務設定工具 來完成,或是登入到一個 root 的 shell 提示符號然後執行 /sbin/service 指令來完成,如下所示:

/sbin/service <service-name> restart

在以上的例子中,請以服務的名稱(如 sshd)取代 <service-name>

請參考 Red Hat Enterprise Linux 系統管理手冊 一書中『控制服務的存取』的章節,以取得關於 系統服務設定工具 的更多資訊。

xinetd 服務

只當一個現行的連線存在時,有 xinetd 超級服務所控制的服務才會 執行,由 xinetd 所控制的服務例子包括 Telnet, IMAP 與 POP3。

因為在每次接收到新要求時,這些服務的新實例是由 xinetd 所啟動, 在更新後所產生的連線是由更新的軟體所處理,然而如果在 xinetd 所 控制的服務升級時,仍有現行的連線存在,它們則是由舊版本的軟體所伺服。

如要關閉一個特定 xinetd 所控制之服務的舊執行實例,先升級該服務 的套件,再使用 ps 指令找出執行中的程序,然後使用 killkillall 指令來關閉該服務目前執行中的程序。

舉例來說,假如 imap 套件的安全性修補程式釋放了,請升級該套件, 然後以 root 身份在 shell 提示符號下輸入下列指令:

ps -aux | grep imap

這個指令傳回所有現行的 IMAP 作業階段,可以執行下列的指令來終止個別的作業階段:

kill -9 <PID>

在以上的例子中,請以一個 IMAP 作業階段的程序識別號碼取代 <PID>

如要結束所有現行的 IMAP 作業階段,請執行下列指令:

killall imapd

請參考 Red Hat Enterprise Linux 參考手冊 一書中的 TCP Wrappers 與 xinetd 章節,以取得關於 xinetd 的一般資訊。