第 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 Network Errata網站上已列出但未提供連結

注請注意
 

Red Hat Enterprise Linux產品線剛推出時,您就可以從Red Hat Network上下載更新過的套件。 雖然Red Hat Errata網站上包含了更新訊息;但網站上並不提供套件 供人下載。

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.5 節 以取得關於套用 由修補程式更新所作變更的一般指示。

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

當安全性修補程式報告釋出後,它們將會被公佈在 Red Hat 的修補程式網站: http://www.redhat.com/security/。從這網頁上,請選擇您系統 所安裝的產品與版本,再選擇security(安全), 接下來網頁會為您顯示 Red Hat Enterprise Linux Security Advisories(安全建議)。如果 您在系統上安裝的任何元件,顯示於安全建議表中,請按下其中任何一項, 以取得更詳細資訊。

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

要下載更新套件,請按下連結以登入Red Hat Network,再按下套件名稱,儲存到硬碟上。 強烈建議您建立一個新的目錄,例如/tmp/updates, 以儲存所有下載的套件。

3.1.3. 驗證附數位簽章的套件

所有的Red Hat Enterprise Linux套件都透過Red Hat, Inc. GPG金鑰簽證過。GPG為GNU Privacy Guard(或GnuPG)的縮寫,是免費的軟體套件,用來確保套件中檔案的完整性。舉例來說,套件會以Red Hat的私密金鑰加密;而另一方面使用者則用公開金鑰解密並驗證套件的完整性。如果Red Hat釋出的公開金鑰在驗證過程中,無法對應到原有的私密金鑰,那表示該套件可能被竄改過,使用者不該信任這套件的安全性。

Red Hat Enterprise Linux內附的RPM公用程式會在安裝套件前,自動驗證RPM套件的GPG數位簽章。 如果您尚未安裝Red Hat的GPG金鑰,請從一個安全無虞的地方,例如Red Hat Enterprise Linux安裝 光碟中安裝。

假設光碟機的掛載點是/mnt/cdrom,請使用下列指令將 金鑰匯入到金鑰環(系統上儲存可信任金鑰的資料庫 )中:

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

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

rpm -qa gpg-pubkey*

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

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。如果回應訊息並非如此, 請確定您使用的是正確的Red Hat公開金鑰,並確定該金鑰的來源無虞。您不該 安裝任何未通過GPG驗證的套件,因為未通過驗證的套件可能被第三者修改過 。

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

3.1.4. 安裝通過驗證的套件

您可以執行下列指令,順利安裝大部分的套件(除了核心套件外):

rpm -Uvh /tmp/updates/*.rpm

請使用下列的指令安裝核心套件:

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

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

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

rpm -e <old-kernel-package>

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

注請注意
 

您不一定要移除舊的核心。預設的開機載入程式GRUB會列出多項核心, 讓您擇一開機。

重要重要
 

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

3.1.5. 套用變更

在從 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作業階段的程式識別號碼(顯示在 ps指令中的第二欄),取代 <PID>

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

killall imapd

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