https://ad.doubleclick.net/ddm/trackclk/N1114924.376585INFORMATIONSECURI/B26202047.309881952;dc_trk_aid=502706469;dc_trk_cid=155369661;dc_lat=;dc_rdid=;tag_for_child_directed_treatment=;tfua=;ltd=
https://ad.doubleclick.net/ddm/trackclk/N1114924.376585INFORMATIONSECURI/B26202047.309881952;dc_trk_aid=502706469;dc_trk_cid=155369661;dc_lat=;dc_rdid=;tag_for_child_directed_treatment=;tfua=;ltd=

觀點

Linux的最佳夥伴─YUM

2005 / 09 / 05
Brettd. Hall
Linux的最佳夥伴─YUM

手動升級
Red Hat套件管理系統(RPM, Red Hat Package Manager),乃是由Red Hat公司所創的。其實,RPM一般指的是RPM套件管理系統(RPM, RPM Package Manager),這是因為Linux屬開放性架構、RPM具跨平台特性的緣故。
RPM算是指令型的工具軟體,它是拿來安裝以及反安裝Linux作業系統和應用程式,還有升級相關套件用的。每項套件都會包含資訊表頭(header)、數位簽章以及程式壓縮檔三個部分。RPM可以查看表頭之中所蘊含的資訊來安裝和反安裝軟體!
這完全是手動的過程:操作人員得坐在終端機前面或是利用遠端登入的方式來升級每樣套件。大多數套件需要的不僅僅是升級的檔案,還會動用到無數相關的工具程式和函式庫,通常這些東西被稱之為相依套件。搞不好這些相依套件還會再需要額外的工具程式和函式庫!由於要解決這些套件相依性好讓安裝順利,實在是既耗時又容易出錯的苦差事,而且發生問題的機會也太多了,甚至還會損及已安裝的程式或是導致系統崩潰。另外,使用RPM升級Red Hat系統,有時候也會與其他軟體在運作上發生問題。
想像一下,對於數量不多的伺服器,我們用這種方式進行修補和升級!那麼,如果將數量範圍再提高一點的話,假設處於分散式環境底下,這事可就恐怖囉!不僅成本會飆高,而且企業得再聘請一些Linux專家來安裝套件以及進行除錯等工作。


採YUM自動升級
利用YUM就可解決絕大部分伺服器跟工作站在升級方面的問題!也許它缺乏某些高階商業軟體的功能,不過,YUM的確是可列入的考慮之一,而且對只透過RPM升級的方式來說,這簡直是好太多了!另外,YUM是可混用的,可以透過套件目錄庫來查詢任何軟體。
雖然YUM只在Red Hat和Fedora Core之中被列為預設升級機制,實際上,任何版本的Linux作業系統或是應用軟體,只要是RPM依存的格式,都可以使用YUM來進行升級作業。YUM就如同包裹在RPM表層的殼,它將冗長無聊又容易出錯的升級程序轉換成自動化作業。在這過程中有二項主要組成因素:一個是yum-arch指令,它用來建立伺服器端的RPM套件目錄庫,另一個則是YUM 用戶程式,它會下載並安裝更新套件。
事實上,yum-arch才是這項工具的重點,因為它會在套件目錄庫之中(可以使用FTP、NFS或是HTTP等服務來建立這個資料目錄),為每個套件建立一個表頭檔,而YUM的魔法就在於它有能力去分析在目錄中的各個表頭檔。yum-arch指令除了具有多樣性的除錯功能外,還能顯示相關訊息以及進行套件的安全性檢查,這些都是管理者用來設定套件目錄庫時,最主要的幾項功能。
YUM用戶程式可以為作業系統(如Red Hat、Fedora或是Mandrake)或應用程式(如Mozilla或是Snort)選定恰當的套件目錄庫來進行升級作業。它會先讀取伺服器上的表頭檔,就真的只有表頭檔,然後將表頭檔中的資訊暫存在用戶端。接著YUM用戶程式會決定那些套件是需要升級的,當然,最重要的就是可以自動解決所有套件的相依性問題,以確保套件可以被順利安裝!
因為打從一開始就只讀取伺服器上的表頭檔,YUM可說是節省了大量頻寬。只有當它決定什麼是必要的,YUM才會下載套件安裝,這點對於較慢速的網路連線,像是T1、DSL還是Cable,顯然是相當地重要!而在本地端的暫存表頭檔案則會再次更新,以便下次升級檢查時可以反應出目前狀態。
此外,管理者還可以利用YUM將RPM套件儲存在本地端,以減少以後重新安裝的時間。
當使用YUM遇到麻煩時─也許是套件相衝,或是版本不正確,甚至是有遞迴相依(dependency loop)的情況發生,也就是循環式的依存關係─A套件需要先安裝B套件才可以繼續,而B套件同時也需要先安裝A套件的狀況─YUM此時便會停止安裝,並通知有錯誤發生。遇到這情形就需要專精Linux的管理人員來排除障礙,但是,這樣仍比使勁掙扎在RPM安裝中要來得好!另外,YUM還擁有容錯轉移的本事,所以你可以在起始的組態設定檔之中,指定主要和次要的套件目錄庫的URL位置。
YUM會產生記錄檔,這樣就可以很輕易地看到安裝及升級過程的變化。 YUM用戶程式可以很簡單透過Telnet或是SSH進行遠端安裝。如此一來,往後在升級套件時,就不再以root身份來進行,所以不用擔心因為過度或特殊權限所造成的安全性問題。此外,YUM用戶程式也可以在組態中設定使用GPG簽章驗證,以確保在RPM套件在派送過程中的安全。

「美味可口」的YUM
要知道,YUM的真正威力是在於它的自動化升級,以及使用靈活度和容錯能力! 其實,只要一行簡單的指令就能進行升級作業,特別是可以排定升級時程,這樣一來,YUM便能定時下載RPM表頭檔案,然後檢查是否有需要升級的檔案。如此,YUM才算是真正的自動化,也才能協助企業在網路離峰時間進行安裝,以降低對企業營運的衝擊和減緩網路使用流量。
另外,只要利用本地端及封閉式的套件目錄庫,還有再搭配使用軟體群組,可以再進一步地提升YUM的用途和安全性。即使YUM用戶可以直接連結到開放式的套件目錄庫,但是最好的作法則是使用站台方式的套件目錄庫(site repository),以獲取最大的靈活度,以及控制權和安全性。對架站者而言,在防火牆裡面建立套件目錄庫是可以增加一些安全性的,不過,要是YUM以這種模式來存取在網際網路上的套件目錄庫時,它可能會被懷疑是綁架攻擊(man-in-the-middle attacks)和DNS快取污染攻擊(DNS poisoning attacks)。
本地端套件目錄庫確保只會接受測試性質的套件安裝和修補動作。我們可以控制在已授權的套件目錄庫中,要存放哪一類型的RPM。不過,要知道只有明白確立營運目的時,才能這樣作!(另一種抉擇是:如果使用的是開放式或者是單一集中型的套件目錄庫,你可以在用戶端組態上,使用排除指令,以限制YUM所能自動更新的項目)。
如果採用分散式的套件目錄庫的話,可以降低網路頻寬的損耗,而且這樣就不會造成YUM用戶只會存取單一個套件目錄庫的情形,或是因為從公開站台下載套件而堵塞了企業網路。舉例來講,你可以在分公司各放置一個套件目錄庫。不過,值得注意的是,一個高度安全等級的環境需要將套件目錄庫放在封閉式的網路區段裡頭才是!
事實上,還可更進一步以部門或單位來規劃作業系統和應用程式,以及工具類的套件目錄庫。要利用YUM做到這點,得靠在XML檔案中定義群組內容,在裡頭你可以規劃派送套件到所指定的應用程式。像是,你可以選擇會計群組在特定的套件目錄庫位置更新會計部門的軟體。

YUM的優劣比較
在我看來,YUM實屬上上之選!雖然有其他Linux的升級工具,像是Up2date和APT-RPM,這些工具可能會有你鍾愛的特色?(詳見「選對工具」),但是,我們可以在Linux系統方面選用YUM,而在Windows伺服器和工作站上則使用SUS(Software Update Services)或是其他替代產品來構成一個適當的軟體升級修補策略。
也許YUM對所有企業來說,功能上還顯得不夠健全完整。它欠缺中央管理功能,也沒有錯誤還原能力,連許多商業性的漏洞修補和組態管理程式所擁有的回報特點,YUM也都沒有。還有,它只適用於Linux版本,並不支援跨平台的功能! 但是,YUM是免費奉送的工具。它充滿靈活度,擴充性強,有容錯能力,並且無論在集中式或者是分散式的環境中,它都易於管理。所以如果貴單位的IT部門,在Linux系統方面有管理不順的現象,YUM「老黃」值得您來試試!
BRETT HALL,持有CISSP、CCNP和CCDA證照,從事資安分析工作,有任何批評指教,請來信至iseditor@asmag.com。