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