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