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