歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> 關於Unix

用RPM校驗文件

有些事情對我們系統管理員來說至少發生過一次,就是你感覺到你的系統好像不對勁 ,開始懷疑有人已經突破了你的防御。確定此事是否發生的途徑之一就是檢查系統文 件有沒有變化,你需要安裝TripWire或者其他審計工具來幫忙。 幸運的是,RedHat的 程序員 們 開 有些事情對我們系統管理員來說至少發生過一次,就是你感覺到你的系統好像不對勁
,開始懷疑有人已經突破了你的防御。確定此事是否發生的途徑之一就是檢查系統文
件有沒有變化,你需要安裝TripWire或者其他審計工具來幫忙。

幸運的是,Red Hat的程序員開發了一個工具,叫作Red Hat Package Manager,簡
稱為RPM。在Red Hat的Linux系統中是默認存在的。

RPM能為我做些什麼?
RPM是一個強大的工具,用來安裝、升級和校驗Red Hat系統上的軟件包。它的校驗功能可以用來確認文件是否被修改或覆蓋,這正是本文所要討論的。除了文件的大小和時間戳,RPM還能檢查文件的信息文摘或MD5簽名。

在RFC 1321中有MD5的詳細描述。簡單的說,MD5根據文件的內容用算法產生一個唯一的128位簽名,用任何方法改變文件都會導致簽名改變。盡管人們一直在討論修改文件後能保持簽名不變的理論可能性,但截止到目前還沒有人能夠做到。所以在文件使用前後各作一次MD5檢查,能夠99.9999%的保證文件沒有改變。

如何使用RPM來檢查文件?
有一些RPM的參數你需要注意。第一個是“-V”,它檢查與某一RPM包相關所有文件的
完整性。語法為:

rpm -V package_name_to_verify

比如系統上運行了sendmail,通過以下命令檢查所有相關文件的完整性:

rpm -V sendmail

輸出看來是這樣的:

[root@fubar /root]# rpm -V sendmail 
S.5....T c /etc/aliases 
missing /etc/mail/ip_allow 
S.5....T c /etc/mail/relay_allow 
S.5....T c /etc/sendmail.cf 
S.5....T c /etc/sendmail.cw 
S.5....T /usr/sbin/sendmail 
S.5....T /var/log/sendmail.st 
[root@fubar /root]# 

只有校驗失敗的文件才被列出,沒有列出的文件應該是完好無損的。左邊給出了為什
麼校驗失敗的原因,具體解釋如下:

S = 大小改變
M = 權限改變
5 = MD5改變 
L = 連接改變
D = 設備改變
U = 用戶改變
G = 組改變
T = 日期和時間改變
missing = 文件丟失

從上面的輸出可見,文件aliases, relay_allow, sendmail.cf 和 sendmail.cw的大
小、時間日期和MD5發生了改變。由於它們是配置文件,應該沒什麼關系。但是/usr/
bin/sendmail的改變就要引起注意了,它是一個監聽在25端口的可執行文件,用來接
受信件。除非你升級了sendmail,否則它不應該校驗失敗,很明顯有人修改或者覆蓋
了原來的sendmail文件,可能帶有木馬或者後門。

輸出還顯示ip_allow文件被刪除或者被改名。這是用來檢查和控制SPAM的一個文件,
它的丟失某種程度上表明相關的二進制文件可能被修改。

當觀察RPM輸出的時候,在檢查日期時間和文件大小的同時,要特別注意MD5是否變化,入侵者經常修改或覆蓋某些文件來隱藏他們的蹤跡。

挨個檢查軟件包很費時間,用“-a”選項可以一次性檢查所有RPM包:

rpm -Va > /root/rpm_chk.txt &

這條命令讓RPM檢查服務器上安裝的RPM包,結果輸出到rpm_chk.txt文件,最後的可選項“&”表示命令在後台運行,給出shell提示符可以作其他事情。

最後一個技巧,當你想要檢查某個文件而不知道它屬於哪個RPM包,可以用“-qf”選
項查看哪個軟件包安裝了此文件:

[root@fubar /root]# rpm -qf /usr/sbin/sendmail 
sendmail-8.8.7-20 
[root@fubar /root]# 

這表明此sendmail文件是sendmail-8.8.7-20 RPM包的一部分。如果一個文件沒有關聯
的RPM包,輸出大概是這樣的:

[root@fubar /root]# rpm -qf /sbin/.vile_stuff 
file /sbin/.vile_stuff is not owned by any package 
[root@fubar /root]# 

小心你系統上運行的不能被校驗的程序!

如何開始?
首先,你必須有root權限來運行RPM。當以普通用戶身份來運行RPM校驗時,它的輸出信息是不正確的,因為普通用戶對某些文件可能都沒有read權限。這意味著只有root才能檢查整個系統文件的完整性。

RPM二進制文件在/bin目錄下,它的數據庫文件在/var/lib/rpm下。

最安全的方法是在服務器連到Inte.net之前,把這些數據文件和RPM二進制文件保存到
軟盤或CD上,這能夠保證你的工具自身是安全的。

第一件事是檢查/var/lib/rpm,這些數據文件的日期和時間應該和安裝系統當時的情
況一樣,如果你發現日期不對,就要小心了。

其次,我們可以使用RPM來校驗自身的完整性:

[root@fubar /root]# rpm -V rpm 
[root@fubar /root]# 

沒有輸出表示RPM應該沒有什麼問題。但這不是絕對的,因為二進制文件如果本身可疑就很難說。所以要盡可能使用CD上的工具,如果你沒有比較安全的工具,用RPM校驗自身在一般情況下也足夠了。

現在我們知道RPM自身沒有問題了,對整個系統作個檢查:

rpm -Va > /root/rpm_chk.txt & 

一個簡單的技巧就是定期檢查整個系統,然後比較不同時期的rpm_chk.txt,從而發現
哪些不正常的文件改動。

總結
盡管RPM不是專門設計用來審計文件的,但它可以幫你不少忙。目前Red Hat Linux各
個版本中都默認自帶RPM,這意味著你完成Red Hat Linux安裝以後,就可以使用RPM了,同時MD5提供了一種高精確度的文件校驗方法。唯一注意的是要保證RPM自身和它所有數據文件的完整性,以防止入侵者修改它們來隱藏蹤跡。

Copyright © Linux教程網 All Rights Reserved