監控web站點目錄下的所有檔案是否被惡意篡改,如果有改動就列印改動的檔案名,發郵件給管理者,定時任務每隔3分鐘執行一次
監控的站點目錄是(/var/http/www)
解答:
1、什麼是惡意篡改,隻有為經過許可的改動都是篡改。
2、檔案被篡改的特征
a、大小可能會變化
b、修改時間會變化,(檔案測試符:ot、nt)
c、檔案内容會變化,md5sum指紋
d、檔案是否被增加或者删除
問題:
可能腳本無法區分哪些是開發正常的代碼上線更改,哪些是黑客的二進制篡改。
一般代碼釋出,都是有相關規定的,在代碼釋出時,我們可以不監控暫停。如果是MD5sum指紋對比,是否修改檔案,我們也會在代碼更新後,重新生成md5sum的對比源
1、代碼釋出方案:大公司或者規範的公司,不會時刻傳代碼,每天1-2次
2、腳本不嚴謹啊,工作中先解決問題,然後在解決好問題
解決方法:
1、根據md5sum 對比
2、用inotify監控,如果發生變化就把變化的檔案同步到其他目錄
3、根據檔案内容長度比較.
4、根據檔案大小比較.
################################################################################
缺點:如果是建立的檔案,因為之前沒有指紋,是以無法檢測,解決,我們可以在建立指紋庫的時候,也把這個目錄的檔案數目記錄下來。在腳本監控的時候,也把檔案數目進行對比,如果檔案數目發生變化,那也一樣可以監控了
a、人工控制指紋檔案的建立,上線前執行建立指紋庫的操作,并儲存
指令:md5su 路徑 > 指紋檔案
#find /etc/ -type f -name "*" -exec md5sum {} > /tmp/checkmd5.db \;
find /etc/ -type f -name "*" | xargs md5sum > /tmp/checkmd5.db
取監控目錄的檔案數目
ls -l /etc/ |wc -l
==================
ls -l /etc/ >>site.log
b、根據指紋庫,對比是否發生變化
md5sum -c /tmp/checkmd5.db
c、過濾發生變化的檔案
md5sum -c /tmp/checkmd5.db |grep -i FAILED
開發檢查指紋識别的腳本
#!/bin/sh
num=`cat site.log|wc -l`
md5num=`md5sum -c /tmp/checkmd5.db|grep -i FAILED|wc -l`
filenum=`ls -l /etc/ |wc -l`
if [ $md5num -ne 0 ]
then
echo "md5sum -c /tmp/checkmd5.db|grep -i FAILED"
fi
if [ $filenum -ne $num ]
echo "/etc/ dir is change"
###上面的site.log 和 /tmp/checkmd5.db 都是在監控前取到的資料
==========================================================
把上面腳本變成定時任務,定時監控,或者寫while 語句定時監控
[root@LAMP 04]# cat md5diff.sh
#!/bin/sh
while true
do
then
echo "`md5sum -c /tmp/checkmd5.db|grep -i FAILED`"
echo "/etc/ dir is change"
sleep 5
done
#!/bin/bash
#par
. /etc/init.d/functions
src=/data/
des=/tmp/data.log
inotify_home=/application/inotify
#${inotify_home}/bin/inotifywait -mrq --format '%w%f' -e create,delete,close_write $src >>$des
${inotify_home}/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src >> $des
if [ -s "$des" ]
then
action "web site change" /bin/true
cat /dev/null > $des
else
action "web site no change" /bin/true
fi
3、根據檔案内容長度比較
a、在實施方案前,想取得要監控的目錄的檔案數目,以及每個檔案的行數。甚至位元組數,
b、在實施時,就再去監控這個目錄的檔案數目,以及每個檔案的行數,甚至位元組數,
c、對面監控前後,這些檔案數目和每個檔案行數,進行對比
擷取檔案數目,和每個檔案長度的長度
for file in `ls ./`
do
filelen=`cat $file|wc -l`
echo "$file ==========> $filelen" >> file.log
dirlen=`ls -l /data/|wc -l`
echo "data ==========> $dirlen" >> file.log
3、根據檔案大小比較
a、在實施方案前,想取得要監控的目錄大小,以及每個的檔案大小
b、在實施時,就再去監控這個目錄大小,以及每個檔案的大小
c、對面監控前後的目錄和檔案的大小進行對比
本文轉自 fxl風 51CTO部落格,原文連結:http://blog.51cto.com/fengxiaoli/1952024