Linux的系統安全管理主要可以分為四個部分,最重要的部分莫過于其文件系統。Linux系統的最大特點就是文件系統,其中所有的設備都是通過文件進行操作和管理。用戶可以采用Linux開源領域最為優秀的Tripwire工具來協助進行文件系統安全保護。
Tripwire是UNIX安全規范中最有用的工具之一,Tripwire可檢測多達10多種的UNIX文件系統屬性和20多種的NT文件系統(包括注冊表)屬性。Tripwire首先使用特定的特征碼函數為需要監視的系統文件和目錄建立一個特征數據庫,所謂特征碼函數就是使用任意的文件作為輸入,產生一個固定大小的數據(特征碼)的函數。入侵者如果對文件進行了修改,即使文件大小不變,也會破壞文件的特征碼。利用這個數據庫,Tripwire可以很容易地發現系統的絲毫細微的變化。而且文件的特征碼幾乎是不可能偽造的,系統的任何變化都逃不過Tripwire的監視。
為了防止被篡改,Tripwire對其自身的一些重要文件進行了加密和簽名處理。這里涉及到兩個密鑰:site密鑰和local密鑰。其中,前者用于保護策略文件和配置文件,如果多臺機器具有相同的策略和配置的話,那么它們就可以使用相同的site密鑰;后者用于保護數據庫和報告,因此不同的機器必須使用不同的local密鑰。
下要給出該軟件的安裝以及使用步驟,要得到該軟件可以從Sourceforge直接獲得(當前最新版本為tripwire-2.4.1.2-src.tar.bz2)。
(1)解壓縮安裝文件到/usr/local目錄
//切換工作路徑 #cd /usr/local/ //解壓縮 #tar xvfj tripwire-2.4.1.2-src.tar.bz2
(2)執行make命令,進行安裝
//進入已經解壓的文件夾 #cd tripwire-2.4.1.2-src //生成makefile文件 #./configure //執行make命令 #make //執行make install命令 #make install
(3)生成基準數據庫
成功編譯Tripwire,就可以準備開始對須要監控的文件進行掃描,以生成Tripwire數據庫,在Tripwire的src目錄下:如下操作:
#./tripwire –init
(4)測試
數據庫生成了,使用命令運行Tripwire,掃描系統變化和細小改變
#./tripwire—check
當第一次運行Tripwire時,須要進行一些準備工作,主要有編輯config文件、檢查郵件報告是否正常、根據需要配置策略文件和初始化數據庫文件,即創建一個簽名的基線數據庫。下一次運行時,它使用twpol.txt文件產生一個新的簽名數據庫。然后,比較兩個數據庫,實施用戶定義的任何選項屏蔽(排除經常更改的文件),最后通過電子郵件或顯示器來為用戶在終端上輸出一個可讀的報告。
為了確保Tripwire正確地運行,要特別注意其安裝和配置的過程,具體步驟如下:
1.創建密鑰和簽名
在安裝Tripwire之后,可以使用如下命令進行設置:
#./twinstall.sh
腳本twinstall.sh的作用在于執行下列任務:
1.創建site和local密鑰,這時會要求輸入口令(參見下面的步驟);如果這兩個密鑰也已存在,則可以跳過此步驟。其中,site密鑰存放在site.key文件中,而local密鑰則存放在hostname-local.key(這里的hostname是指該機器的主機名)文件之中。2.利用site密鑰對默認配置文件twcfg.txt進行簽名,并將簽名(而非被簽名的文件twcfg.txt)存放于文件tw.cfg之中。
3.利用site密鑰對默認策略文件twcfg.pol進行簽名,并將簽名(而非被簽名的文件twcfg.pol)存放于文件tw.pol之中。
2.編輯配置文件
首先打開文本格式的配置文件twcfg.txt,該文件的位置在前面所述安裝過程后的/usr/local/etc目錄下。然后根據需要修改配置文件,修改完畢后存盤。最后使用twadmin命令根據已編輯的文本文件生成一個加密的配置文件。
ROOT =/usr/local/sbin POLFILE =/usr/local/etc/tw.pol DBFILE =/usr/local/lib/tripwire/$(HOSTNAME).twd REPORTFILE =/usr/local/lib/tripwire/report/$(HOSTNAME)-$(DATE).twr SITEKEYFILE =/usr/local/etc/site.key LOCALKEYFILE =/usr/local/etc/localhost.localdomain-local.key EDITOR =/bin/vi LATEPROMPTING =false LOOSEDIRECTORYCHECKING =false MAILNOVIOLATIONS =true EMAILREPORTLEVEL =3 REPORTLEVEL =3 MAILMETHOD =SENDMAIL SYSLOGREPORTING =false MAILPROGRAM =/usr/sbin/sendmail -oi -t #twadmin --create-cfgfile --site-keyfile /etc/tripwire/site.key twcfg.txt
安裝完畢后,該文件已存在,因此不必再重新創建。通常情況下,配置文件的內容不會發生變化,因此沒有必要去修改它,使用Tripwire默認的就可以了。在此時我們應該測試一下Email報告功能是否起作用,以防以后遇到麻煩,輸入以下命令進行測試。
#tripwire --test --mail user@domain.com
3.編輯策略文件
首先打開文本格式的策略文件twpol.txt。該文件的位置在前面所述安裝過程后的/usr/local/etc目錄下。Tripwire在安裝時已經在策略文件中寫入了默認的檢查規則。這些默認的規則主要檢查重要的系統文件和Tripwire自身文件的完整性。
由于默認的配置就不能監視系統中的SUID和SGID文件,而這對于我們的系統安全是非常重要的,因此,我們需要修改配置加入對這個項目的監視。使用如下命令可以找出系統中的所有SUID文件:
#find / -type f -perm -4000 -print
以下命令可以找出系統中的所有SGID文件:
#find / -type f -perm -2000 -print
現在,我們需要把以上命令找出的SUID和SGID文件加入到Tripwire的/策略文件中去。除此之外,我們還要把所有用戶home目錄下的初始文件也納入監視的范疇。主要包括以下文件:
1.bashrc、.profile、.bash_profile、.cshrc、kshrc、.login等
2.bash、csh以及ksh登錄之后的初始化命令或者腳本
3.forward:告訴/usr/lib/sendmail把郵件轉發到某些地址
4.rhosts:可以使用rsh登錄到本帳戶的遠程主機名
5.xinitrc、.Xauthority、Xdefault等X窗口系統的一些重要文件
在創建Tripwire的特征碼數據庫之前,還有一件事情要做,就是檢查.netrc和.rhosts文件的權限是否是600。修改完策略文件后存盤。最后使用twadmin命令根據已編輯的文本文件生成一個加密的策略文件。最后,策略文件的文本文件要刪除掉,否則該文件的內容易被察看。
#twadmin --create-polfile twpol.txt
安裝完畢后,該文件已存在,因此不必再重新創建。
4.生成基準數據庫
配置文件和策略文件都編輯和生成好了之后,就應該根據配置文件的規則生成基準數據庫。基準數據庫在Tripwire安裝完畢后生成一次即可。我們使用Tripwire命令來生成基準數據庫。
#tripwire --init
基準數據庫生成時,Tripwire會提示輸入local key,對其進行高強度的加密,以防止對文件內容的非法改變。
5.運行完整性檢查
基準數據庫生成完畢之后,我們可以使用tripwire命令隨時進行完整性檢查了:
#tripwire --check
進行檢查時可以指定檢查報告的存貯位置:
#tripwire --check --twfile/var/lib/report/report.twr
進行檢查時也可發送Email報告結果:
#tripwire --check --email-report
進行檢查時指定使用Email進行發送的報告等級:
#tripwire --check --email-report --email-report-level 2
使用指定嚴重性等級的規則進行檢查:
#tripwire --check --severity 80
使用指定的規則名進行檢查:
#tripwire --check --rule-name rulename
只檢查指定的文件或目錄:
#tripwire --check object1 object2 object3 …
進行檢查時忽略某些屬性(因為有些屬性的檢查比較耗費系統資源,比如Hash算法):
#tripwire --check --ignore "property, property, property, property"
如果完整性檢查完畢后,發現Email報告功能未生效,可以檢查兩個方面:一個是策略文件中規則的emailto屬性必須填寫妥當,另一個是運行tripwire命令時,--email-report選項必須被包含。
6.查閱報告
完整性檢查進行完畢后,我們就可以查閱報告以發現有哪些文件遭到了改動,改動了什么。使用twprint命令可以輸出報告,它有多種使用方式。
如下命令將加密的報告內容輸出到顯示器:
#twprint --print-report --twrfile /var/lib/report/report.twr
如下命令將加密的報告內容輸出到一個文本文件:
#twprint --print-report --twrfile /var/lib/report/report.twr - >myreport.txt
如下命令輸出報告時指定輸出的報告等級:
#twprint --print-report --report-level 4 --twrfile /var/lib/report/report.twr
7.升級基準數據庫文件
如果在報告中發現了一些違反策略的錯誤,而這些錯誤又是被認為正常的,那就要使用Tripwire命令更新基準數據庫:
#tripwire --update --twrfile /var/lib/report/report.twr
也可以在進行完整性檢查之后立即自動進行更新:
#tripwire --check --interactive
8.升級策略文件
隨著系統的變化,原來的策略文件必然會不能滿足需要,因此必須要不斷的更新策略文件中的規則。更新和創建新的策略文件不同,因為如果為Tripwire創建了新的策略文件,那么就必須要重新生成基準數據庫。更新時首先打開策略文件的文本文件:
#twadmin --print-profile > twpol.txt
然后編輯該文件,完畢后存盤。最后使用Tripwire命令進行策略更新:
#tripwire --update-policy twpol.txt
在此步驟中,Tripwire軟件會要求輸入site key。
9.改變site key和local key
sitekey和localkey是在安裝時生成的,但是也可以隨時修改。注意,如果已經用來加密的密鑰文件被刪除了或是被覆蓋了,那么Tripwire加密過的文件都不能訪問了。因此,我們要對這兩個文件做備份。 很多時候會發現我們的口令可能不太安全,因此要改變口令。需執行以下命令即可:
#twadmin --generate-keys --local-keyfile /etc/tripwire/site.key #twadmin --generate-keys --local-keyfile /etc/tripwire/local.key
但是這么做的話,會造成使用以前密鑰進行加密的文件無法打開的情況。我們要使用以前的策略文件、配置文件、數據庫文件、報告文件的話,因此在改變口令之前,我們必須使用以下的命令把這些已加密的文件進行解密。
#twadmin --remove-encryption file1 file2 ...
在生成新的密鑰文件之后,我們還應該用新密鑰對這些文件進行加密。配置文件和策略文件只能用site key加密,而數據庫文件和報告文件只能用local key加密。
#twadmin --encrypt --site-keyfile /etc/tripwire/site.key file1 file2 file3 ... #twadmin --encrypt --local-keyfile /etc/tripwire/local.key file1 file2 file3 ...
以上就是Linux文件系統保護的實現步驟參考。Tripwire是一個非常不錯的開源工具,可以說是系統運維們不可替代的工具,值得仔細研究學習。除了Linux文件系統保護之外,Linux系統的安全管理還包括用戶管理、進程保護、日志管理等三個方面,這些將在之后的文章中進行講解。