腳本須知:shell
1. 運行此腳本的用戶必須是root,由於在某些文件所在路徑普通用戶沒有訪問權限安全
2. 源文件和其md5碼只要有一方內容有改動,都會致使校驗失敗,因此校驗碼的保存就相當重要防止其餘人修改,建議修改權限爲 root root 600bash
3. 此腳本帶簡單的日誌功能,方便之後系統安全評估和查看spa
4.對一個目錄下的全部文件作校驗,通常有如下幾種狀況:日誌
1)該目錄下文件總的數量沒有發生變化,但個別源文件內容發生修改code
x文件 --> 改變 --> 記錄日誌blog
2)該目錄下文件總的數量發生改變ip
a 新增文件 --> 校驗 -->記錄日誌md5
b 文件丟失 --> 記錄日誌 --> 是否刪除此文件的MD5校驗值字符串
Yes -- (目前此腳本沒有提示用戶是否要刪除丟失源文件校驗碼,暫時須要手動刪除,刪不刪除須要根據需求)
No -- 找回丟失的源文件從新校驗
5. 該腳本目前沒有實現告警功能,這個功能模塊其實能夠經過SendEmail實現,後期補上
6. 校驗的文件應該是不常常修改的文件,好比etc下的配置文件,若是校驗常常變更的文件沒有任何意義,好比日誌文件
1 #!/bin/bash 2 # 3 # QQ: 765482322 4 5 # 定義MD5文件保存的路徑 6 md5_path=/tmp/md5.sum 7 8 # 判斷MD5基準校驗文件是否存在,不存在則建立此文件,並修改權限只有root用戶或者指定用戶有讀寫權限 9 [ ! -f $md5_path ] && touch $md5_path && chmod 600 $md5_path 10 read -p "請輸入你須要MD5檢驗文件的目錄,必須以\"/\"開始: " path 11 if ! echo $path | grep -q "^/";then echo "不是以\"/\"開始";exit 1;fi 12 13 echo "#################################################" 14 # 若是所給須要md5校驗的目錄不存在,或者目錄存在但目錄下沒有一個文件,則返回錯誤並提示用戶 15 if [ ! -d $path ] || [ `find $path -type f | wc -l` -eq 0 ];then 16 echo "錯誤:路徑不存在或者該路徑下沒有文件" 17 exit 1 18 fi 19 # 判斷基準文件數量 20 for i in `cat /tmp/md5.sum | awk '{print $2}'`;do 21 [ ! -f $i ] && echo -e "[檢測時間:`date +"%Y-%m-%d %T.%N"`] [文件:$i] \033[31m[MD5結果:去除]\033[0m" 2>&1 | tee -a /var/log/md5.log 22 done 23 24 for list in `find $path -type f`;do 25 # echo " list = $list" 26 new_md5_arg1=`md5sum $list | awk '{print $1}'` 27 new_md5_arg2=`md5sum $list | awk '{print $2}'` 28 old_md5_arg2=`awk -v List="$list" '$2 == List{print $2}' $md5_path` 29 if [[ "$new_md5_arg2" == "$old_md5_arg2" ]];then 30 old_md5_arg1=`awk -v List="$list" '$2 == List{print $1}' $md5_path` 31 if [[ ! "$new_md5_arg1" == "$old_md5_arg1" ]];then 32 echo -e "[檢測時間:`date +"%Y-%m-%d %T.%N"`] [文件:$list] \033[31m[MD5結果:改變]\033[0m" 2>&1 | tee -a /var/log/md5.log 33 else 34 echo -e "[檢測時間:`date +"%Y-%m-%d %T.%N"`] [文件:$list] \033[32m[MD5結果:未改變]\033[0m" 35 fi 36 else 37 md5sum $list >> $md5_path 38 echo -e "[檢測時間:`date +"%Y-%m-%d %T.%N"`] [文件:$list] \033[31m[MD5結果:添加]\033[0m" 2>&1 | tee -a /var/log/md5.log 39 fi 40 # 若是文件數量大,能夠把sleep的時間間隔設置小點。 41 sleep 0.2 42 done 43 44
腳本執行展現
第一種狀況:校驗目錄下的文件總數不變,個別文件遭到篡改
對一個新路徑下的全部文件作校驗,因爲第一次校驗因此至關於發生改變
記錄到日誌
再次執行校驗:
查看日誌,能夠看到/etc/sysconfig/network-scripts 路徑下沒有文件發生改變
模擬篡改一個文件,好比/etc/sysconfig/network-scripts/ifcfg-eth0 追加一行帶 # 註釋的字符串到其尾部
shell>echo "#hello world" >> /etc/sysconfig/network-scripts/ifcfg-eth0
再次執行腳本校驗
能夠看到,日誌裏記錄了改變的文件相關信息,之後咱們能夠經過查看此日誌文件,來鎖定那些文件被修改,而後根據時間點去大概鎖定一個篡改來源