第二卷 Linux係統安全工具介紹
序
下麵介紹一些可以用於Linux的安全工具,這些工具對於固化您的服務器將起到一定的作用,可以解決各方麵的問題。我們的重點隻是想讓您了解這些工具,對安裝配置以及使用不會給出很詳細的介紹。一些安全問題例如suid是什麼,緩衝溢出是什麼等概念性的東西也不屬於本文討論的範圍。
介紹這些工具的目的隻是給您一個提示的方向,並不是讓您拘泥於這些工具。畢竟安全是一個過程,不是一個產品。
一、Sxid
sxid是一個係統監控程序。它可以監視係統中suid,sgid文件以及沒有屬主的變化。並且以可選的形式報告這些改變,你可以在配置文件中設置用email的形式通知這些改變,也可以不使用email而直接在標準輸出上顯示這些變化。Suid,sgid文件以及沒有屬主的文件很有可能是別人放置的後門程序,這些都是您所要特別注意的。
你可以從下麵的網址獲得sxid:
ftp://marcus.seva.net/pub/sxid/
如果您安裝過其他工具,那麼您一定也會安裝這個工具,它在安裝上沒有什麼特別的地方。
缺省安裝的時候,配置文件為/usr/local/etc/sxid.conf,這個文件中有很明顯的注釋很容易看懂。在這個文件中定義了sxid的工作方式。日誌文件缺省為/var/log/sxid.log,日誌文件的循環次數在sxid.conf文件中定義。您可以在配置固定後把sxid.conf設置為不可改變,把sxid.log設置為隻可添加(使用chattr命令)。
您可以用sxid-k加上-k選項來進行檢查,這時檢查很靈活,既不記入日誌,也不會發出email。這樣您就可以隨時做檢查。但是我還是建議您把檢查放入crontab中,使用crontab-e編輯加入下麵的條目:
04***/usr/bin/sxid
表示每天上午4點執行這個程序。
如果您還想了解更詳細的信息,可以參考:
mansxid
man5sxid.conf
二、Skey
您認為您的密碼安全嗎?即使您的密碼很長,有很多特殊字符,解密工具很難破解,但您的密碼在網絡中傳送時是以明文形式的,在以太網中隨便一個嗅探器就可以截取您的密碼。現在在交換環境中也能實現這種技術。在這種情況下,skey對您來說是一個選擇。
Skey是一次性口令的一個工具。它是一個基於客戶\服務器的應用程序。首先在服務器端可以用keyinit命令為每個用戶建立一個skey客戶,這個命令需要指定一個秘密口令,然後就可以為客戶端的用戶產生一次性口令列表。當用戶通過telnet,ftp等與服務器進行連接時就可以按照一次性口令列表中的口令順序輸入自己的密碼,下次再連接時候密碼就換成了列表中的下一個。
可以從下麵的網址獲得skey:
ftp://ftp.cc.gatech.edu/ac121/linux/system/network/sunacm/other/skey
skey的服務器端使用有下麵的步驟:
1.使用下麵的命令初始化用戶mary:
keyinitmary
keyinit每次為用戶生成99個一次性口令,這時就會在/etc/skeykeys文件建立這個用戶,該文件中保存了服務器端計算下一個一次性口令的一些信息。用上麵的keyinit命令時就會在/etc/skeykeys中有下麵的記錄:
mary0099to25065be9406d891ac86fbMar11,200104:23:12
上麵的記錄中從左到右依次是用戶名,要使用的一次性口令序號,口令的種類,16進製表示的口令,日期和時間。
2.將一次性口令列表提供給mary
您可以打印出口令列表然後送給mary。這樣比較安全,密碼不會在網絡中傳遞。
3.為mary修改缺省的登陸shell為/usr/local/bin/keysh
由於PAM的作用,mary登陸時要輸入密碼,她輸入這個一次性口令後服務器端要對這個口令進行校驗,校驗通過連接就被許可了。
可能有些用戶不喜歡書麵的口令列表,用戶可以使用key命令在自己的客戶端得到一次性口令。您可以通過開兩個窗口,一個對服務器進行連接獲得一次性口令的種類和序號,然後在另一個窗口用key命令根據口令的種類和序號獲得所要的密碼。但是必須提醒您,您這樣的方便是以一定的危險性為代價的。
如果您的缺省的99個口令用完了,您可以使用keyinit-s刷新口令列表。
在/usr/src/skey/misc目錄中有許多其他的替換keysh的提供其他服務的程序,例如:su,login,ftp等等。這樣您可以應付不同的服務的連接請求了。
為了安全,您最好設置一下/etc/skeykeys文件的屬性和權限。
三、三個日誌管理工具
3.1logrotate
一般的Linux發行版中都自帶這個工具。日誌文件過大如何處理是一個問題。它可以自動使日誌循環,刪除保存最久的日誌。你可以把它放在crontab中,每天定期運行。這在很多linux發行版中都是缺省設置的。
您可以從下麵的網址獲得新版本的logrotate:
ftp://ftp.redhat.com/pub/redhat
它的配置文件是/etc/logrotate.conf我們可以在這個文件中設置日誌的循環周期,日誌的備份數目,以及如何備份日誌等等。
在/etc/logrotate.d目錄下包括一些工具的日誌循環設置文件。例如:syslog,samba,cron等等,在這些文件中指定如何根據/etc/logrotate.conf做日誌循環,您也可以在這裏麵添加其他的文件以循環其他服務的日誌。
關於配置文件的詳細信息您可以參閱manlogrotate。
最後還是提醒您使用cron運行logrotate。
3.2swatch
swatch是一個實時的日誌監控工具。您可以設置您所感興趣的事件,它可以在事件發生的時候告訴您。Swatch有兩種運行方式:一種可以在檢查日誌完畢退出,另一種可以連續監視日誌中的新信息。
Swatch提供了許多通知方式,例如:email,振鈴,終端輸出,多種顏色等等。
您可以從下麵的站點下載:
ftp://ftp.stanford.edu/general/security-tools/swatch/
swatch的安裝需要一些perl庫的支持,安裝前確信您的係統已經可以支持perl。
Swatch可以在命令行中進行一些簡單的設置,例如日誌循環時告訴swatch在循環完畢後重新啟動等等。
配置文件swatchmessage是swatch軟件的重點。這個文本文件告訴swatch需要監視什麼日誌,需要尋找什麼觸發器,和當觸發時所要執行的動作。當swatch發現到與swatchmessage中定義的觸發器正則表達式相符時,它將執行在swatchrc中定義的通知程序。Swatch通過使用/usr/bin/tail-f實時監視日誌文件。
在這裏我們不想過多的將如何配置,配置swatch非常簡單,您可以參考swatch自帶的配置文件。針對每個服務例如:ftp,sendmail等等,你必須為每個您所關心的服務配置一個swatchmessage文件。
Swatch啟動時可以帶很多參數,但使用通常如下格式啟動它就可以了:
/usr/local/bin/swatch-c/var/log/syslogmessage-t/var/log/syslog-r06:00&
-c參數用於指定配置文件,-t參數指定實時監視的日誌文件,-r指定重起的時間,"&"使swatch在後台運行。啟動後,swatch產生子進程,因此swatch是以兩個進程運行的,在停止swatch時必須殺掉兩個進程。
也可以通過logrotate配置在日誌循環後重起swatch,可以在/etc/logrotate.d建立一個您所要關心的日誌的循環文件,其中最關鍵的是要加入下麵這行:
/usr/local/bin/swatch-c/var/log/syslogmessage-t/var/log/syslog-r+0
其他的地方可以仿造別的同目錄下的文件。
3.3logcheck
審核和記錄係統的事件是非常重要的。特別是當你的計算機連接到Internet上之後,係統管理員如果對"異常"的事件保持警覺,就能防止係統被入侵。在Unix係統中如果僅僅把係統事件作為日誌記錄下來,而不去查看,還是無濟於事。logchek可以自動地檢查日誌文件,先把正常的日誌信息剔除掉,把一些有問題的日誌保留下來,然後把這些信息email給係統管理員。Logcheck被設計成自動運行,定期檢查日誌文件以發現違反安全規則以及異常的活動。logcheck用logtail程序記住上次已經讀過的日誌文件的位置,然後從這個位置開始處理新的日誌信息。
可以在下麵的站點獲得logcheck:
http://www.psionic.com/abacus/logcheck/
logcheck主要由下麵幾個主要的文件:
1.logcheck.sh
這個是一個可執行的腳本文件,裏麵記錄logcheck檢查那些日誌文件等logcheck運作所必須的信息。您可以把它加入crontab中定時運行。
2.logcheck.hacking
它和下麵的三個文件一樣,是logcheck檢查的模式文件。他們四個文件按從上到下的順序執行。這個文件表明了入侵活動的模式。
3.logcheck.violations
這個文件表示有問題,違背常理的活動的模式。優先級小於上麵的那個模式文件。
4.logcheck.violations.ignore
這個文件和上麵的logcheck.violations是相對的,是您所不關心的問題的模式文件。
5.logcheck.ignore
這是檢查的最後一個模式文件。如果沒有和前三個模式文件匹配,也沒有匹配這個模式文件的話,則輸出到報告中。
6.logtail
這個文件記錄日誌文件信息。
Logcheck首次運行時讀入相關的日誌文件的所有內容。Logtail在日誌文件的目錄下為每個關心的日誌文件建立一個logfile.offset的偏移量文件,以便於下次檢查時從這個偏移量開始檢查。Logcheck執行時未被忽略的內容通過郵件的形式發送給logcheck.sh中SYSADMIN指定的用戶。
Logcheck的通知沒有那麼實時,但是相對於swatch它更適合於分布式日誌文件係統。因為它不必為每個日誌文件建立一個進程。在Turbolinux中就集成了logcheck工具。
四、SSH
傳統的網絡服務程序,如:ftp、pop和telnet在本質上都是不安全的,因為它們在網絡上用明文傳送口令和數據,別有用心的人非常容易就可以截獲這些口令和數據。而且,這些服務程序的安全驗證方式也是有其弱點的,就是很容易受到"中間人"(man-in-the-middle)這種方式的攻擊。所謂"中間人"的攻擊方式,就是"中間人"冒充真正的服務器接收你的傳給服務器的數據,然後再冒充你把數據傳給真正的服務器。
通過使用SSH,你可以把所有傳輸的數據進行加密,這樣"中間人"這種攻擊方式就不可能實現了,而且也能夠防止DNS和IP欺騙。還有一個額外的好處就是傳輸的數據是經過壓縮的,所以可以加快傳輸的速度。SSH有很多功能,它既可以代替telnet,又可以為ftp、pop、甚至ppp提供一個安全的"通道"。
最初SSH是由芬蘭的一家公司開發的。但是因為受版權和加密算法的限製,現在很多人都轉而使用OpenSSH。OpenSSH是SSH的替代軟件,而且是免費的,可以預計將來會有越來越多的人使用它而不是SSH。
從客戶端來看,SSH提供兩種級別的安全驗證。
第一種級別是基於口令的安全驗證,這種機製就相當於普通的telnet等服務的口令認證機製。
第二種級別是基於密匙的安全驗證。你必須為自己創建一對密匙,並把公用密匙放在需要訪問的服務器上。如果你要連接到SSH服務器上,客戶端軟件就會向服務器發出請求,請求用你的密匙進行安全驗證。服務器收到請求之後,先在你在該服務器的家目錄下尋找你的公用密匙,然後把它和你發送過來的公用密匙進行比較。如果兩個密匙一致,服務器就用公用密匙加密"質詢"(challenge)並把它發送給客戶端軟件。客戶端軟件收到"質詢"之後就可以用你的私人密匙解密再把它發送給服務器。
可以在下麵的站點下載:
http://violet.ibs.com.au/openssh/
"/etc/ssh/ssh_config"文件是OpenSSH客戶端的配置文件,允許你通過設置不同的選項來改變客戶端程序的運行方式。這個文件的每一行包含"關鍵詞-值"的匹配,其中"關鍵詞"是忽略大小寫的。用man命令查看幫助頁(ssh(1))可以得到詳細的說明。
"/etc/ssh/sshd_config"是OpenSSH的服務器端配置文件,允許設置選項改變這個daemon的運行。這個文件的每一行包含"關鍵詞-值"的匹配,其中"關鍵詞"是忽略大小寫的。用man命令查看幫助頁(sshd(8))可以得到詳細的說明。
配置OpenSSH使其使用TCP-Wrappersinetd超級服務器,編輯"inetd.conf"文件(vi/etc/inetd.conf)並加入這一行:
sshstreamtcpnowaitroot/usr/sbin/tcpdsshd-i
注意:"-i"參數很重要,它說明sshd是被inetd運行的。
現在我們為本地服務器創建私有和公用密匙,執行下麵的命令:
[root@sound]#suusername
[username@sound]$ssh-keygen1
產生密鑰後把本機的公用密匙(identity.pub)拷貝到遠程主機的"/home/username/.ssh"目錄下,例如,使用"authorized_keys"這個名字。
用加上"-p"參數的"ssh-keygen"命令,在任何時候都可以改變初始的密碼。
下麵列出的是一些我們經常要用到的命令,當然還有很多其它的命令,更詳細的信息可以查看man幫助頁或其它文檔。
1.ssh
ssh(SecureShell)是用來登錄遠程計算機和在遠程計算機上執行命令的程序。它是用來替代rlogin和rsh,以及在不安全的網絡環境下在兩台計算機之間提供安全和加密的信息交流。
使用下麵的命令可以從客戶端連接到遠程主機server:
[root@sound/]#suadmin
[admin@sound/]$sshserver
2.scp
可以用這個命令把文件從本地計算機拷貝到遠程計算機,或者反之,甚至可以在兩台遠程計算機之間用"scp"命令拷貝文件。
用下麵的命令把文件從遠程主機拷貝到本地主機上:
[root@sound/]#suadmin
[admin@sound/]$scp-p:/dir/for/filelocaldir/to/filelocation
用下麵的命令把文件從本地主機拷貝到遠程主機上:
[root@sound/]#suadmin
[admin@sound/]$scp-plocaldir/to/filelocation:/dir/for/file
注意:"-p"選項表示文件的改變和訪問時間屬性以及權限,在拷貝過程中被保留。通常是需要這樣的。
五、Tripwire
如果有人侵入了您的係統,在您的係統中放置了木馬和後門,您怎麼才能知道呢?tripwire就是這樣一個對係統做完整性檢查的工具。它是目前最為著名的unix下文件係統完整性檢查的軟件工具,這一軟件采用的技術核心就是對每個要監控的文件產生一個數字簽名,保留下來。當文件現在的數字簽名與保留的數字簽名不一致時,那麼現在這個文件必定被改動過了。
當Tripwire運行在數據庫生成模式時,會根據管理員設置的一個配置文件對指定要監控的文件進行讀取,對每個文件生成相應數字簽名,並將這些結果保存在自己的數據庫中,在缺省狀態下,MD5和SNCFRN(Xerox的安全哈希函數)加密手段被結合用來生成文件的數字簽名。除此以外,管理員還可使用MD4,CRC32,SHA等哈希函數,但實際上,使用上述兩種哈希函數的可靠性已相當高了,而且結合MD5和sncfrn兩種算法(尤其是sncfrn)對係統資源的耗費已較大,所以在使用時可根據文件的重要性做取舍。當懷疑係統被入侵時,可由Tripwire根據先前生成的,數據庫文件來做一次數字簽名的對照,如果文件被替換,則與Tripwire數據庫內相應數字簽名不匹配,這時Tripwire會報告相應文件被更動,管理員就明白係統不"幹淨"了。
可以從下麵站點獲得tripwire:
http://www.tripwiresecurity.com
"/usr/TSS/policy/twpol.txt"文件是純文本的策略文件,設置Tripwire需要檢測哪些文件和目錄(也叫係統對象)。其中有一個規則設定如何檢測需要監控的對象,還有一個特性(property)設置如何檢測。特性掩碼(propertymask)設定進行一致性檢驗的時候單獨文件的特性(property)。屬性(Attributes)幫助規定成組的策略如何運作。
您可以根據您的需要修改twpol.txt這個策略文件,然後當第一次準備使用策略文件的時候,用下麵的安裝它:
[root@sound]#twadmin--create-polfile/usr/TSS/policy/twpol.txt
第一次創建基準數據庫:用下麵的命令
[root@sound]#tripwire{--init}
一致性檢查把當前文件係統中的對象及其屬性和Tripwire數據庫中的進行比較。一旦發現異常情況,就會在標準輸出上顯示出來,報表文件也會被保存下來,以後可以用"twprint"命令查看:
[root@sound]#tripwire{--check}
用下麵的命令進行交互式的檢查:
[root@sound]#tripwire--check--interactive
用下麵的命令進行一致性檢查並用email發送報表:
[root@sound]#tripwire--check--email-report
用下麵的命令更新數據庫:
[root@sound]#tripwire--update-r/usr/TSS/report/sound.openarch.com-200001-021854.twr
"-r"參數讀取指定的報表文件(deep.openarch.com-200001-021854.twr)。因為當前的配置文件的REPORTFILE變量使用$(DATE),所以"-r"這個參數是必須的。
用下麵的命令更新策略文件:
[root@deep]#tripwire--update-policy/usr/TSS/policy/newtwpol.txt
在默認情況下,策略更新模式使用"--secure-modehigh"。如果文件係統在最近的一次數據庫更新之後發生了變化,而且這個變化會違反策略文件中定義的規則,那麼在高安全級別的模式下運行你可能會遇到一些問題。例如這種情況:其他的管理員在策略更新的過程中,改變了一些文件。為了解決這個問題,確信在高安全級別的模式下所有的變化都是正常的之後,可以采用低級別的安全模式更新策略文件:
用下麵的命令在低級別的安全模式下更新策略文件:
[root@sound]#tripwire--update-policy--secure-modelow/usr/TSS/policy/newtwpol.txt
如果想查找詳細的資料可以用man命令查幫助頁,讀取相關信息。
六、Portsentry
我們可以通過防火牆限製自己係統中什麼端口開放,什麼端口不開放。對於外部的人們來說,這些信息都是保密的。黑客為了得到您機器中開放的端口,往往會進行各種方式的掃描,這樣的掃描軟件在互聯網上也隨處都是。一般的掃描活動都是進行入侵的前奏,對安全是極大的危險。
Portsentry就是一個反掃描工具。它可以實時發現並分析記錄對本機的掃描,它主要做以下工作:
通過syslog做記錄
將掃描的主機加入/etc/hosts.deny
馬上禁止所有通向掃描主機的網絡流量
過濾掉所有來自掃描主機的網絡流量
您可以從下麵的網站獲得portsentry:
http://www.psionic.com/abacus/portsentry/
"/usr/psionic/portsentry/portsentry.conf"是portsentry的主配置文件。您可以在這個文件中設置您所要監聽的端口,以及哪些ip地址被拒絕,哪些被忽略等等信息。如果您了解詳細的信息,可以查看"README.install"文件。