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