一.、開發背景
因時勢所逼,需要對伺服器的檔案系統實行監控。雖然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