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