Linux上安裝軟件之前先驗(yàn)證軟件包合法性

字號(hào):

以前有為Linux專家說過一句很經(jīng)典的話“小即是美”。這句話一針見血的道出了Linux操作系統(tǒng)的設(shè)計(jì)特點(diǎn)。Linux操作系統(tǒng)跟微軟操作系統(tǒng)不同,它都是一個(gè)個(gè)相對獨(dú)立的軟件所構(gòu)成的一個(gè)操作系統(tǒng),一個(gè)軟件包完成一項(xiàng)單獨(dú)的功能。為此Linux系統(tǒng)管理員平時(shí)大部分工具都在跟Linux系統(tǒng)軟件包打交道。系統(tǒng)管理員要根據(jù)企業(yè)員工的需要,選擇并安裝恰當(dāng)?shù)能浖9受浖苯痈鶯inux系統(tǒng)的安全與性能相關(guān)。為此為了創(chuàng)造一個(gè)穩(wěn)定、安全的Linux操作系統(tǒng)環(huán)境,系統(tǒng)管理員在安裝軟件包之間先對軟件包進(jìn)行合法性驗(yàn)證。筆者下面就介紹幾種常用的驗(yàn)證方法,來幫助大家識(shí)別Linux軟件包的合法性。
    一、檢查軟件包有否被篡改。
    當(dāng)系統(tǒng)工程師從網(wǎng)絡(luò)上下載一個(gè)軟件包之后,其最關(guān)心的就是這個(gè)軟件包是否被篡改過。如一些非法攻擊者會(huì)否在一些軟件包中捆綁一些非法軟件等等。為此系統(tǒng)工程師希望有工具能夠幫助他來驗(yàn)證軟件包是否被人處理過。如果為了達(dá)到這個(gè)目的,則系統(tǒng)工程師可以通過rpm –k命令來進(jìn)行驗(yàn)證。驗(yàn)證結(jié)果如圖所示。為了安全起見,筆者已經(jīng)把Linux服務(wù)器的主機(jī)名與賬戶隱去。
    如果這個(gè)JDK的軟件包沒有被人修改過或者沒有損壞,則結(jié)果就會(huì)如上圖所示。Shal md5 OK這個(gè)簡短的信息,就告訴系統(tǒng)工程師這個(gè)軟件包沒有被篡改過的跡象,可以放心使用。但是這個(gè)命令有一個(gè)缺陷,即只適用于rpm軟件包。如果系統(tǒng)工程師所下載的軟件包不是RPM格式的,則會(huì)提示如下的錯(cuò)誤信息。
    不過筆者在這里也建議各位Linux系統(tǒng)管理員,通過RPM來管理軟件。RPM軟件包是一種開發(fā)的軟件包管理系統(tǒng),它簡化了系統(tǒng)的維護(hù)工作,只需要短短的幾個(gè)指令便可以完成安裝軟件包、刪除軟件包、系統(tǒng)驗(yàn)證等功能。RPM軟件包有很多的特點(diǎn)。如通過使用RPM,系統(tǒng)管理員不用重新安裝整個(gè)操作系統(tǒng),就可以升級(jí)系統(tǒng)中的個(gè)別組件。RPM軟件包會(huì)使用一種智能且完全自動(dòng)化的方式來升級(jí)組件,而且軟件包的設(shè)定文件將會(huì)在升級(jí)的過程中被保留下來。即如果對郵件客戶端進(jìn)行升級(jí)后,原先的帳戶等設(shè)定將會(huì)被保留;如對辦公軟件進(jìn)行升級(jí),則原先的工具欄等用戶偏愛設(shè)置也都將保留下來,用戶不用在升級(jí)后進(jìn)行重新設(shè)置,等等。這些措施可以大大的方便管理員的維護(hù)。如RPM可以驗(yàn)證軟件包。如系統(tǒng)管理員在維護(hù)操作系統(tǒng)的時(shí)候,可能會(huì)擔(dān)心不小心刪除了某個(gè)軟件包中的重要文件,則可以對這個(gè)軟件包進(jìn)行驗(yàn)證。如果這個(gè)軟件包從安裝到現(xiàn)在,相關(guān)的文件有任何改變都將被查詢出來。為此系統(tǒng)管理員可以根據(jù)需要選擇是否需要重新安裝該軟件包。可見RPM軟件包的很多特性,都可以簡化Linux系統(tǒng)工程師的工作。為此筆者在這里強(qiáng)烈建議大家通過RPM的方式來管理軟件包。像上面驗(yàn)證軟件包是否被篡改以及是否損壞也是RPM特有的功能之一。
    二、檢查GnuPG key信息。
    由于Linux軟件是開源的,所以其上面的大部分軟件包也是開源的。如筆者開發(fā)了一個(gè)軟件包,則其他人可以在筆者軟件包的基礎(chǔ)上進(jìn)行擴(kuò)展與改進(jìn)。但是有時(shí)候這個(gè)調(diào)整可能不是系統(tǒng)管理員所需要的。他們可能只需要原始版本即可。為此系統(tǒng)管理員希望能夠在拿到軟件包之后,能夠該軟件版本是否是原程序開發(fā)者所發(fā)布的版本。如果要實(shí)現(xiàn)這個(gè)目的,則可以按如下的步驟來做。
    首先這個(gè)軟件包必須滿足一個(gè)前提條件。即這個(gè)軟件包的程序開發(fā)者對這個(gè)軟件包“簽署”了該程序開發(fā)者的GnuPG key。做一個(gè)形象的比喻,GnuPG key就好像是一個(gè)程序開發(fā)者的信物。大家看到這個(gè)信物之后,就可以判斷這個(gè)就是程序開發(fā)者的原始作品。如果這個(gè)程序開發(fā)者在軟件包中加入了這個(gè) GnuPG key信物,那么系統(tǒng)工程師就可以利用rpm –K命令來檢查此軟件包是否是原程序開發(fā)者所發(fā)布的版本。
    其次先檢查原帳戶的信物。如果系統(tǒng)工程師此時(shí)得到了一個(gè)軟件包,并且這個(gè)軟件包中有簽署GnuPG key。此時(shí)系統(tǒng)工程師就可以利用rpm –K命令來檢查這個(gè)軟件包是否有問題,是否是原程序開發(fā)者所發(fā)布的。為了達(dá)到這個(gè)目的,系統(tǒng)工程師需要先查看原帳戶的印章、簽名甚至指紋等信息。通常情況下這些內(nèi)容會(huì)被保存在/user/lib/rpm/gnupg目錄中。系統(tǒng)工程師可以利用ls –al命令來查看相關(guān)的GnuPG key信息。這個(gè)命令會(huì)列出系統(tǒng)中所有的GnuPG key信物信息。但是有時(shí)候系統(tǒng)管理員可能只想看一些特定的GnuPG key信物信息,則可以利用rpm –qi GnuPG key名字的方式來進(jìn)行查詢。通常情況下,系統(tǒng)管理員可以先利用第一個(gè)命令查詢處所有的GnuPG key信物信息。然后找到GnuPG key名字后,在利用第二個(gè)命令來查看這個(gè)信物的具體信息。另外如果信息比較多的話,則管理員可以通過rpm –import命令把這些信息導(dǎo)出到系統(tǒng)管理員指定的位置。
    第三步就是進(jìn)行對比。當(dāng)找到GnuPG key信物信息后,系統(tǒng)工程師就需要跟原先的便是數(shù)據(jù)來進(jìn)行比較,以確定這個(gè)軟件包是否是原程序開發(fā)者所發(fā)布的版本。此時(shí)系統(tǒng)工程師就可以利用rpm –K加上軟件包的命令來進(jìn)行判斷。注意這個(gè)功能也只適用于RPM軟件包。所以筆者在先前就強(qiáng)調(diào),Linux系統(tǒng)工程師盡量采用rpm軟件包。否則的話,以上這些內(nèi)容將很難實(shí)現(xiàn)。
    另外RPM軟件包除了可以驗(yàn)證是否被篡改、是否是原版程序之外,還提供了強(qiáng)有力的查詢選項(xiàng)。系統(tǒng)管理員可以利用數(shù)據(jù)庫來查詢軟件包或者某些文件;還可以輕易的查詢處一個(gè)文件所隸屬的軟件包,以及該軟件包來自于何處。這主要是因?yàn)樵赗PM軟件包中包含著特殊的二元標(biāo)頭數(shù)據(jù)。在這個(gè)二元標(biāo)頭數(shù)據(jù)中,有該軟件包的信息以及相關(guān)文件,這使得系統(tǒng)可以更快、更容易的查詢個(gè)別的軟件包,節(jié)省Linux系統(tǒng)工程師的工作。如當(dāng)系統(tǒng)工程師在安裝后才發(fā)現(xiàn)這個(gè)軟件有問題,需要判斷這個(gè)軟件包是否是原版程序。此時(shí)系統(tǒng)工程師就可以先通過某個(gè)文件來查詢其隸屬的軟件包;然后再利用上面這個(gè)方法來查詢這個(gè)軟件包是否是原版的。甚至還可以查詢處這個(gè)軟件包的來源。
    當(dāng)系統(tǒng)工程師下載了原始版本的軟件包之后,還可以方便的在此基礎(chǔ)上進(jìn)行改善與調(diào)整。因?yàn)镽PM軟件包有一個(gè)基本的設(shè)計(jì)原則,即保留該軟件的原作者,發(fā)布出來的是純凈原軟件程序代碼。使用RPM,可擁有純凈的源代碼以及曾經(jīng)用過的任何程序進(jìn)行修正,并加上完整的軟件包建立提示。例如現(xiàn)在筆者從網(wǎng)上下載了一個(gè)新出來的軟件,此時(shí)筆者并不需要從頭開始對這個(gè)軟件包進(jìn)行編譯。筆者可以先驗(yàn)證程序修正判斷所需要做的事情。利用RPM工具可以很容易的了解編譯的默認(rèn)值以及這個(gè)軟件所做過的變更。故當(dāng)系統(tǒng)工程師不滿意軟件包的功能的話,則可以先下載一個(gè)原始版本的軟件包(利用上面的方法來判斷這個(gè)軟件包是否是原始版本);然后再在此基礎(chǔ)上進(jìn)行一些調(diào)整與開發(fā)。開發(fā)調(diào)整過后,由于不需要從頭開始編譯,這就很大程度上減輕了系統(tǒng)工程師開發(fā)的工作量,通過以上連個(gè)方法可以非常容易的判斷出軟件包是否被篡改、是否損壞以及是否是原版程序。這些信息往往是系統(tǒng)工程師微軟軟件包所必需要掌握的信息。不過比較遺憾的是,以上兩種方法有一個(gè)前提條件,即必須使用的是RPM軟件包。不過現(xiàn)在這個(gè)RPM軟件包也是Linux系統(tǒng)上最流行的軟件包。為了實(shí)現(xiàn)軟件包驗(yàn)證的目的,以及出于其他的考慮,筆者建議大家還是采用RPM軟件為好。