利用SHELL指令碼實現檔案完整性檢測程式(1.2版更新)

lykyl的自留地發表於2014-07-14

一.、開發背景

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

 

完整程式碼點此下載

相關文章