用LIDS構(gòu)建LINUX的鋼鐵城堡
隨著類LINUX的操作系統(tǒng)不斷地推廣,在加上經(jīng)濟(jì)危機(jī)時期需要縮減IT總體擁有成本,越來越多的中小企業(yè)都把自己的重要服務(wù)向LINUX系統(tǒng)遷移。借著LINUX系統(tǒng)強(qiáng)大的安全性和較少的成本,架設(shè)在LINUX系統(tǒng)上的各種企業(yè)服務(wù)為這些中小企業(yè)提供了更大的發(fā)展和更強(qiáng)的競爭力。
但是,在當(dāng)前網(wǎng)絡(luò)環(huán)境下,隨著黑客技術(shù)的不斷提高,以及黑客數(shù)量的不斷增加,網(wǎng)絡(luò)攻擊事件也越來越多。LINUX系統(tǒng)的安全性正在一次次地經(jīng)受著考驗,LINUX系統(tǒng)上的安全缺陷也越來越多突現(xiàn)出來。對于那些應(yīng)用LINUX系統(tǒng)的中小企業(yè)來說,如何保護(hù)這些服務(wù)器上的數(shù)據(jù)安全正是一個迫在眉急的問題。
由此,許多中小企業(yè)都會使用網(wǎng)絡(luò)防火墻來阻止大部份的網(wǎng)絡(luò)攻擊,但是,一旦某些網(wǎng)絡(luò)攻擊穿透了防火墻,系統(tǒng)上的重要數(shù)據(jù)就有被攻擊者完全控制的危險。因此,在LINUX系統(tǒng)上布置一種基于主機(jī)的入侵檢測系統(tǒng)是很有必要的。LIDS正是這樣的一種基于LINUX內(nèi)核補(bǔ)丁模式的入侵檢測系統(tǒng)。
LIDS全稱為LINUX入侵檢測系統(tǒng)(Linux Intrusion Detection System),它集成在LINUX內(nèi)核中,可以用來進(jìn)一步加強(qiáng)LINUX內(nèi)核的安全性,為LINUX內(nèi)核提供一種安全和強(qiáng)制存取控制模式,也可作為防火墻的一種后備保護(hù)方式而存在。并以此來保護(hù)LINUX系統(tǒng)上的重要目錄及文件不被復(fù)制、刪除,重要的服務(wù)不被刪除或停止,不能修改系統(tǒng)登錄方式等等。本文下面我們就一起來詳細(xì)了解在LINUX系統(tǒng)下如何應(yīng)用LIDS。
一、LIDS的主要功能
我們在使用LIDS時,主要使用它的下列主要功能:
1、保護(hù)功能:LIDS可以保護(hù)硬盤上任何類型的重要文件(例如passwd和shadow等文件)和目錄(例如/bin、/sbin、/usr/bin、/usr/sbin、/etc/rc.d等),防止它們被未授權(quán)用戶(包括ROOT)和未授權(quán)的程序所訪問和使用。 LIDS還可以保護(hù)系統(tǒng)中的重要進(jìn)程不被終止,啟用它的這個功能后,系統(tǒng)上的任何用戶包括root也不能殺死進(jìn)程,而且可以隱藏特定的進(jìn)程。另外,LIDS還可以防止非法程序的RAW IO 操作,保護(hù)硬盤,包括對硬盤的主引導(dǎo)記錄(MBR)進(jìn)行保護(hù)等等。
2、檢測功能:通過集成在內(nèi)核中的端口掃描器,LIDS能檢測到系統(tǒng)中正在監(jiān)聽的端口,并可以將檢測到的內(nèi)容報告給系統(tǒng)管理員。 LIDS還可以檢測到系統(tǒng)上任何違反規(guī)則的進(jìn)程。
3、警報功能:當(dāng)LIDS檢測到有人違反設(shè)置的安全規(guī)則時, 它就會在控制臺上顯示相應(yīng)的警告信息,并將非法的行為細(xì)節(jié)記錄到受LIDS保護(hù)的系統(tǒng)日志文件中。 LIDS還可以將日志文件發(fā)到我們設(shè)定的管理員電子郵箱中,與此同時,LIDS還可以馬上關(guān)閉非法用戶的當(dāng)前會話。
#p#
LIDS是一個開源免費(fèi)的LINUX內(nèi)核補(bǔ)丁包,要想完全使用LIDS,需要到它的官方網(wǎng)站www.lids.org上下載LIDS的內(nèi)核補(bǔ)丁包和LIDS工具包。但在下載時,一定要保證下載的LIDS補(bǔ)丁包與我們當(dāng)前所使用的LINUX系統(tǒng)內(nèi)核版本相一致。LIDS補(bǔ)丁包現(xiàn)在的最新版本是lids-2.2.3rc7-2.6.28.patch,它是針對2.6.28LINUX內(nèi)核的。LIDS工具包現(xiàn)在的最新版本是lidstools-2.2.7.7。
1、 安裝LIDS的內(nèi)核補(bǔ)丁包
現(xiàn)在以上述最新版本的LIDS內(nèi)核補(bǔ)丁包為例說明它的安裝。首先將下載的LIDS內(nèi)核補(bǔ)丁包保存到/usr/src目錄下,然后以根用戶的權(quán)限進(jìn)入字符終端模式。要注意的是,在LINUX系統(tǒng)下的命令是嚴(yán)格區(qū)分大小寫的。
假設(shè)系統(tǒng)內(nèi)核文件在/usr/src/Linux目錄下,通過下列命令安裝LIDS內(nèi)核補(bǔ)丁包:
# cd /usr/src/Linux
# patch p1 < /usr/src/ lids-2.2.3rc7-2.6.28.patch
LIDS內(nèi)核補(bǔ)丁包安裝完成后,接著重新編輯內(nèi)核:
# make menuconfig
進(jìn)入內(nèi)核編譯菜單界面后,把有關(guān)LIDS的所有項都選中。這樣做的目的能讓不太熟習(xí)內(nèi)核編譯的用戶能省去很多不必要的麻煩,何況將所有的LIDS項都選擇上也不會占用多少的內(nèi)核空間,對加入LIDS后的內(nèi)核性能也不會產(chǎn)生多少的影響。
在選擇好要加入到內(nèi)核中的LIDS項后,就可以通過下列命令重新編譯內(nèi)核:
# make
# make install
完成上述內(nèi)核編譯工作后,一個加入了LIDS的內(nèi)核就重新編譯好了。要使加入了LIDS的新內(nèi)核工作,必需重新啟動系統(tǒng)。
2、安裝LIDS的工具包。
現(xiàn)也以LIDS工具包的最新版本作例子說明它的安裝。首先把下載的LIDS工具包保存的到/home/用戶名(用戶名是你系統(tǒng)上登錄的用戶名)目錄中后,按如下方式安裝它:
# cd /home/用戶名
# tar -zxvf lids-2.2.7.7.tar.gz
# cd lids-2.2.7.7
# ./configure
# make
# make install
這樣就會將Lidsadm和Lidsconf這兩個工具安裝到/sbin/目錄中,同時會創(chuàng)建一個/etc/lids的目錄,并會在此目錄下生成一個默認(rèn)的配置文件。在使用LIDS前應(yīng)先用“l(fā)idsadm –U”命令更新這個默認(rèn)的配置文件。
小提示:如果在編譯LIDS工具包時出現(xiàn)GCC報LIDSTEXT.h文件不存在的錯誤提示,就需要修改LIDS工具包安裝目錄下的MAKEFILE文件,在在其中的CFLAGS選項中加入“-I/usr/src/Linux/include”,然后就可以重新編譯了。
3、Lidsadm和Lidsconf工具說明
(1)、Lidsadm工具及其選項:
Lidsadm是LIDS的管理工具單元,可以用它來管理系統(tǒng)中的LIDS。Lidsadm的作用主要就是啟用或停用LIDS,以及封存LIDS到內(nèi)核中和查看LIDS狀態(tài)。
使用下列命令可以列出Lidsadm的所有可用選項:
# lidsadm -h
此命令會返回下列信息:
......
lidsadm -[s/I] -- [+/-] [LIDS_FLAG] [...]
lidsadm -v
lidsadm -h
命令參數(shù)解釋:
-s:開關(guān)某些保護(hù)選項時指示應(yīng)提交密碼
-I:開關(guān)某些保護(hù)選項時不提交密碼
LIDS_FLAG:為Lidsadm的標(biāo)志值
-v:顯示版本
-V:查看現(xiàn)在LIDS狀態(tài)
-h(huán):列出所有選項
Lidsadm常用的部分主要功能模塊:
CAP_CHOWN:修改目錄或文件的屬主和組
CAP_NET_BROADCAST:監(jiān)聽廣播
CAP_NET_ADMIN:接口、防火墻、路由器改變
CAP_IPC_LOCK:鎖定共享內(nèi)存
CAP_SYS_M(jìn)ODULE:插入和移除內(nèi)核模塊
CAP_HIDDEN:隱藏進(jìn)程
CAP_SYS_RESOURCE:設(shè)置資源限制
CAP_KILL_PROTECTED:殺死保護(hù)進(jìn)程
CAP_PROTECTED:保護(hù)進(jìn)程為單用戶方式
Lidsadm可用的標(biāo)志值(Available flags):
LIDS:禁止或激活本地LIDS;
LIDS_CLOBAL:完全禁止或激活LIDS
RELOAD_CONF:重新加載配置文件
(2)、Lidsconf工具及其選項:
Lidsconf主要用來為LIDS配置訪問控制列表(ACLS)和設(shè)置密碼。
輸入以下命令能顯示Lidsconf所有的可用選項:
# lidsconf -h
此命令執(zhí)行后會返回以下信息:
......
lidsconf -A [-s subject] -o object [-d] [-t from-to] [-i level] -j Accept
lidsconf -D [-s file] [-o file]
lidsconf -E
lidsconf -U
lidsconf -L
lidsconf -P
lidsconf -v
lidsconf -[h/H]
命令參數(shù):
-A:增加一條指定的選項到已有的ACL中
-D:刪除一條指定的選項
-E:刪除所有選項
-U:更新dev/inode序號
-L:列出所有選項
-P:產(chǎn)生用Ripemd-160加密的密碼
-V:顯示版本
-h(huán):顯示幫助
-H:顯示更多的幫助
子對像(subject):
-s [--subject]:指定一個子對像,可以為任何程序,但必須是文件。
目標(biāo)(object):
-o[object]:可以是文件、目錄或功能(capabilities)和socket名稱。
動作:
-j:它有以下幾個參數(shù):
DENY:禁止訪問
READONLY:只讀
APPEND:增加
WRITE:可寫
GRANT:對子對像授與能力
ignore:對設(shè)置的對像忽略所有權(quán)限
disable:禁止一些擴(kuò)展特性
其它選項:
-d :目標(biāo)的可執(zhí)行domain
-i:繼承級別
-t:指定從某一時段到某一時段可以進(jìn)行怎樣的操作
-e:擴(kuò)展列表
#p#
1、LIDS的啟用與設(shè)置
首先, 要想使LIDS設(shè)置的ACLS發(fā)揮作用,應(yīng)在系統(tǒng)引導(dǎo)時把LIDS封裝進(jìn)內(nèi)核中,這樣每次系統(tǒng)啟動到最后階段,此設(shè)置會根據(jù)我們系統(tǒng)上的/etc/lids/lids.cap文件中的內(nèi)容來設(shè)置全局功能。lids.cap文件中保存的就是我們設(shè)置ACLS項。
要想將LIDS封裝到內(nèi)核中,需要在/etc/rc.d/rc.local文件的未尾加入如下的內(nèi)容:
/sbin/lidsadm –I
另外,在開始使用LIDS前,如果在安裝它的補(bǔ)丁包時沒有詢問我們設(shè)置密碼,那么還應(yīng)為它設(shè)置一個進(jìn)入終端會話模式的密碼,可以通過如下命令來進(jìn)行:
# lidsconf -P
這個命令執(zhí)行后將提示我們輸入密碼,兩次密碼輸入相同后,系統(tǒng)就會將設(shè)置的密碼保存到/etc/lids/lids.pw文件中,此密碼已通過Ripemd-160加密。
當(dāng)設(shè)置了密碼后,如果我們想修改ACLS、Capabilities,或當(dāng)我們開始LIDS會話時,就需要我們提交此密碼。我們也可以在以后再次通過上述命令來修改設(shè)定的舊密碼,并且,在修改完成后,還需要用以下命令重新更新LIDS的配置文件:(注意:在修改密碼時不會提示輸入舊密碼。)
lidsadm -S -- +RELOAD_CONF
在這里,要特別注意的是,在對LIDS做了任何修改后,都應(yīng)使用上述命令重新更新LIDS的配置文件,它將重新加載下列所示的配置文件,然后重新啟動系統(tǒng)服務(wù)使應(yīng)用改變生效。
/etc/lids/lids.conf #ACLS配置文件
/etc/lids/lids.cap #LIDS capabilities(功能)配置文件
/etc/lids/lids.pw #LIDS密碼文件
/etc/lids/lids.net # LIDS郵件警告配置文件 2、 使用LIDS來保護(hù)系統(tǒng)
在使用LIDS保護(hù)的LINUX的系統(tǒng)中,可以通過一個LIDS的自由會話終端模式來修改那些已經(jīng)加入到保護(hù)中的數(shù)據(jù),所有的LIDS設(shè)置工作也可在這個自由會話終端中進(jìn)行。
使用如下命令打開一個LIDS終端會話:
# lidsadm -S -- -LIDS
在按提示輸入密碼后,就建立了一個LIDS自由會話終端,在此終端我們就可以啟用、停用LIDS和退出此終端。此時,LINUX系統(tǒng)中的任何數(shù)據(jù)都是不受LIDS保護(hù)的。在完成對文件或數(shù)據(jù)的修改后,我們應(yīng)當(dāng)通過如下命令重新啟用LIDS:
# lidsadm -S -- +LIDS
另外要清楚的是,在一個增加了LIDS功能的LINUX系統(tǒng)中,一個名為/etc/lids/lids.cap的文件中包括了所有的功能描述列表。每一個功能項前通過使用“+”號來啟用此功能,使用“-”號來禁用此功能,完成設(shè)置后我們必須重新加載它的配置文件才能使修改生效。
下面我們就通過運(yùn)用這些功能項,來對系統(tǒng)中要保護(hù)的重要數(shù)據(jù)進(jìn)行安全設(shè)置:
(1)保護(hù)文件為只讀
# lidsconf -A -o /some/file -j READONLY
此命令保證一旦LIDS被啟用,任何人都不能修改或刪除此文件。如果我們在 LIDS的自由會話終端模式下,就可以修改“/some/file”指定的文件,只要此分區(qū)不是掛載為只讀方式就行。在實際操作時,用實際的文件路徑代替“/some/file”。
(2)保護(hù)一個目錄為只讀
# lidsconf -A -o /some/directory -j READONLY
此命令用來保證一旦LIDS被啟用,任何人都不能列出或刪除此目錄及其中的內(nèi)容。如果我們在LIDS的自由會話終端模式下,我們就可以修改/some/directory目錄,只要分區(qū)不是掛載為只讀方式。例如,我們可以設(shè)置/etc/目錄為只讀方式:
# lidsconf -A -o /etc -j READONLY
這里要特別注意的是:當(dāng)我們設(shè)定/etc目錄為只讀后,再想掛載文件系統(tǒng)時,我們應(yīng)該先刪除/etc/mtab文件,然后再使用它的一個符號連接/proc/mounts。同時,我們必須修改我們的初始化腳本,使用“-n”選項來設(shè)置任何mount和umount命令。這個選項告訴mount和umount不更新/etc/mtab文件。例如,如果我們發(fā)現(xiàn)在初始化腳本中有一行:mount -av -t nonfs,nproc的項,應(yīng)將它改為:mount -av -n -t nonfs,nproc。
(3)隱藏任何用戶都看不到的目錄或文件
# lidsconf -A -o /some/file_or_directory -j DENY
此設(shè)置將使任何系統(tǒng)用戶甚至root用戶都不能訪問它。如果設(shè)置的是一個目錄,那么此目錄下的文件、目錄都將被隱藏,文件系統(tǒng)也是如此。
(4)指定某些特定的程序以只讀方式訪問一些非常敏感的文件
比如在系統(tǒng)登錄時要訪問/etc/shadow文件,我們可以指定某些程序能在系統(tǒng)認(rèn)證時使用它,這些程序包括login、ssh、su和vlock等。例如,我們可以只允許login以只讀方式訪問/etc/shadow文件:
# lidsconf -A -s /bin/login -o /etc/shadow -j READONLY
(5)以根用戶身份指定一個服務(wù)在指定的端口上運(yùn)行
要想指定服務(wù)在1024及以下端口上運(yùn)行需要LIDS的CAP_NET_BIND_SERVICE功能。如果我們在/etc/lids/lids.cap文件中沒有啟用此功能,那么就不能以根用戶身份啟動任何一個服務(wù)運(yùn)行在指定的端口上。我們可以通過下列命令來授與某個程序有此功能:
# lidsconf -A -s /usr/local/bin/apache -o CAP_NET_BIND_SERVICE 80 -J GRANT
或者在LIDS_GLOBAL被禁止時啟用此服務(wù)。
(6)在LIDS啟用時,保證X Windows系統(tǒng)能工作
X server必須使用LIDS的CAP_SYS_RAWIO功能后,才能在LIDS啟用時工作。通過下列所示命令達(dá)到此目的:
# lidsconf -A -s /path/to /your/x-server -o CAP_SYS_RAWIO -j GRANT
(7)為ssh和scp的遠(yuǎn)程連接指定端口
要為ssh和scp的遠(yuǎn)程連接指定端口,就需要LIDS的CAP_NET_BIND_SERVICE功能。我們可以通過下列命令將CAP_NET_BIN_SERVICE功能指定的端口授與給ssh:
# lidsconf -A -s /usr/bin/ssh -o CAP_NET_BIN_SERVICE 22 -J GRANT
(8)設(shè)置訪問時間限制
例如,有時只允許用戶從早上8:00到下午6:00這段時間能登錄系統(tǒng),就可以用下列命令來完成:
# lidsconf -A -s /bin/login -o /etc/shadow -t 0800-1800 -j READONLY
我們也可以在“-t”選項中使用“!”參數(shù),它的意思就是指除指定時間外所有時間都能做某項工作。
(9)通過網(wǎng)絡(luò)發(fā)送安全警報
要實現(xiàn)LIDS的警報功能,我們可以在/etc/lids/lids.net文件中指定通過網(wǎng)絡(luò)發(fā)送安全警報的接收郵箱。要特別要注意的是:在指定電子郵箱的地址時,應(yīng)當(dāng)確保E-Mail地址的前后不能有空格,同時,在修改完后必須重新加載LIDS的配置文件。
LIDS是LINUX系統(tǒng)下一個非常強(qiáng)大的入侵檢測系統(tǒng),它的功能非常多,由于篇幅的限制,在本文中不能將它的所有功能全部描述出來,它們也只能靠讀者自己慢慢去摸索了。
當(dāng)然,有些讀者可能趨向于使用功能更加強(qiáng)大的SNORT或其它主機(jī)型入侵檢測防御系統(tǒng)。但是,對于一般的LINUX服務(wù)器,通過LIDS完全可以滿足保護(hù)系統(tǒng)安全的絕大多數(shù)要求。做此文的目的也是希望能給哪些正在為如何解決LINUX系統(tǒng)安全的用戶有所幫助。
【編輯推薦】