一.、開發(fā)背景
因時勢所逼,需要對服務器的文件系統(tǒng)實行監(jiān)控。雖然linux下有不少入侵檢測和防竄改系統(tǒng),但都比較麻煩,用起來也不是很稱手。自己琢磨著也不需要什么多復雜的功能,寫個腳本應該就可以滿足基本需求。于是整理了一下思路,編寫了一個簡單的文件完整性檢測程序。
二、實現(xiàn)功能
1、能監(jiān)測多個不同目錄中文件的增刪改變化。
2、允許監(jiān)測的特定類型文件,并可根據(jù)具體情況設定是否需要生成摘要等。
3、對于變動的文件,新增或修改的可以生成摘要。刪除的文件要有日志記錄。
4、當監(jiān)測到文件發(fā)生變動時,能生成簡報以郵件方式提醒管理員。
三、設計思路
建立監(jiān)測項配置文件,將需檢測的目錄路徑以及相關設置記錄在文件中。利用crontab定時執(zhí)行腳本,第一次運行時按配置文件加載檢測項,通過find命令獲取文件列表,利用md5sum為符合條件的文件生成hash值,并保存到文件中做為以后校驗的基準數(shù)據(jù)。腳本在以后的運行中,首先會將待測目錄中符合條件的文件列出,并于基準數(shù)據(jù)中的文件進行比對,以發(fā)現(xiàn)新增文件。再利用md5sum檢測目錄中文件是否有被修改或刪除。對修改或新增文件生成摘要,將檢測結(jié)果生成簡報存入日志文件,并將簡報發(fā)送到指定郵箱。
四、監(jiān)測項配置文件說明
配置文件每一行為一個檢測目錄項,配置項之間以逗號分隔,配置定義如下:
<待查目錄>,<過濾條件>,<檢測類型>
1、待查目錄
需檢測的目錄完整路徑,例如:/var/test
2、過濾條件
寫在此處的內(nèi)容會做為find命令中的查詢條件,以過濾特定文件。例如:-name '*.txt' -type f
過濾條件字串中不要使用雙引號。
3、檢測類型
取值為0或1。
0:發(fā)現(xiàn)變更僅記錄文件名不做摘要;(一般針對二進制文件檢測)
1:發(fā)現(xiàn)變更則做摘要
五、程序運行方式
腳本可以通過crontab定時執(zhí)行。同時為了方便日常工作,腳本支持參數(shù)運行。具體參數(shù)及用途如下:
-c 清空日志-i 生成掃描項的驗證碼文件,做為原始校驗范本。(一般用于文件正常變更后,管理員手動重新生成基準檢驗文件)-s 生成所有掃描項的摘要文件。(一般用于初次生成HASH值之前,生成所有符合文件摘要,供管理員做檢測)
六、題外話
1、本人才疏,原打算將所有find的過濾條件做為一個字串傳給find執(zhí)行,比如“ -name "*.txt" -type f ”。但實際運行時總是報錯,不得已只能將-name的具體參數(shù)傳入,請參看具體代碼:$FindCmd $Search -name "$Arg"。如果有更好解決辦法,請一定告之,謝謝?。?.2版已解決)
2、生成摘要的方式可以根據(jù)實際情況自行修改。
3、可以根據(jù)具體情況,自己擴展程序?qū)崿F(xiàn)對變更文件做進一步檢測的功能。
七、更新記錄
2014.7.31 Ver 1.2 更新檢索過濾條件處理方式,可以直接將find命令的參數(shù)寫進配置文件中,比如“ -name '*.txt' -type f ”。
2014.7.25 Ver 1.1 更新郵件發(fā)送機制,修改舊版本中每組掃描項異常結(jié)果分別發(fā)送的方式,將多個掃描項結(jié)果匯總后發(fā)送。
2014.7.14 Ver 1.0
完整代碼點此下載
新聞熱點
疑難解答