網站目錄監控腳本,shell,awd用


#! /bin/bash
#網站目錄監控腳本
#CTF賽用
#功能如下:
#1、網站根目錄備份。
#2、監控網站目錄文件新增、刪除、修改,並且恢復,記錄日志,支持多級目錄的恢復,支持隱藏文件的新增修改和刪除。

#不足點:
#1、腳本執行后關停,再次重啟會屏顯報錯,且無法建立日志,但不影響網站監控恢復功能。如需生成日志,需要刪除對應的文件夾再重啟腳本。
#2、監控恢復周期不穩定,0~5s不等。

#檢查當前目錄下是否存在配置文件,若未發現control.conf文件,通過交互式輸入獲取配置信息,並保存到新建的配置文件中。
#四個參數分別為:監控的網站根目錄webroot,網站根目錄備份目錄bak_content,網站目錄中被篡改或刪除的文件以及日志保存的文件夾changefile_contentf,網站目錄中新增的文件以及日志保存的文件夾newfile_contentf。
if [ ! -f control.conf ];then
	read -p "Please input your websiteroot:" webroot
	echo "set websiteroot $webroot!"
	read -p "Please set your baksite content:" bak_content
	echo "set baksite content $bak_content!"
	read -p "Please set changefile content:" changefile_contentf
	echo "set changefile content $changefile_contentf!"
	read -p "Please set newfile content:" newfile_contentf
	echo "set newfile content $newfile_contentf!"
	echo $webroot >> control.conf
	echo $bak_content >> control.conf
	echo $changefile_contentf >> control.conf
	echo $newfile_contentf >> control.conf
	echo "Your configuration are saved in control.conf!"
#發現配置文件,配置信息從配置文件中讀取。
else 
	webroot=`sed -n 1p control.conf`
	bak_content=`sed -n 2p control.conf`
	changefile_contentf=`sed -n 3p control.conf`
	newfile_contentf=`sed -n 4p control.conf`
	echo "Load configuration from control.conf success!"
fi

#根據配置文件新建文件夾,檢測文件夾是否存在,若不存在則新建。
if [ ! -d $bak_content ];then
#        mkdir $bak_content
#        echo "Make content $bak_content success!"
        cp -r $webroot $bak_content
        echo "Backup your site success!"
#else
#        echo "$bak_content is aleardy exist!"
#        exit
fi
if [ ! -d $changefile_contentf ];then
	changefile_content=${changefile_contentf%*/}	#截取目錄名后的/,解決用戶輸入目錄名帶/和不帶/對腳本功能的影響。
        mkdir -p $changefile_content
        echo "Make content $changefile_content success!"
#else
#        echo "$changefile_content is aleardy exist!"
#        exit
fi
if [ ! -d $newfile_contentf ];then
	newfile_content=${newfile_contentf%*/}
        mkdir -p $newfile_content
        echo "Make content $newfile_content success!"
#else
#        echo "$newfile_content is aleardy exist!"
#        exit
fi

cd $webroot
cd ../

#建立監控檢測死循環
while :
do
        if [ ! -f file.md5 ];then	#檢測是否存在md5統計文件,若不存在,對網站目錄下所有文件進行md5加密保存
		find $webroot -type f -exec md5sum {} \; >>file.md5
        else
		
		for file in $(md5sum -c file.md5|awk -F':' '/FAILED/||/失敗/{print $1}')	#校驗md5值,獲取校驗失敗的文件
		do
                if [ -f $file ];then	#判斷校驗失敗的文件是否存在
        #      		filename_z=$(echo $file|sed 's#/#\\/#g')
        #      		sed -i "/ $filename_z/"d file.md5
        #      		md5sum $file >> file.md5
        #      		echo $file >> rsync_file
        #      		else
              		echo -n  "Find $file changed!" >> $changefile_content/rsync_change.log	#rsync_change.log為被篡改文件名保存的日志
              		echo -n "  `date`" >> $changefile_content/rsync_change.log
              		cp $file $changefile_content >> /dev/null	#將被篡改的文件備份到對應日志文件夾中
              		file_name=${file##*/}	#截取被篡改文件的文件名
              		bak_file=`find $bak_content -name $file_name`	#查找被篡改文件在備份網站中對應的文件名
#              		echo $bak_file
#					echo $file
					cp -f $bak_file $file >> /dev/null	#從備份網站中恢復被篡改文件,並強制覆蓋已被篡改的文件
					echo "  Backup and replace $file success!" >> $changefile_content/rsync_change.log
					tail -1 $changefile_content/rsync_change.log	#屏顯上述處理日志
	      		else	#處理被惡意刪除的文件
	      			file2=${file%:*}	#定義file2和file3是為了解決系統過濾出現中文冒號和英文冒號的問題
	      			file3=${file%:*}
	      			if [ ${#file2} -ge ${#file3} ];then	#截取后取字段長度較小的值並賦值給file1變量,該變量為網站根目錄下被刪除文件的絕對路徑值
	      	  			file1=$file3
	      			else
	      				file1=$file2
	      			fi
              		file_name=${file1##*/}	#獲取網站根目錄下被刪除文件的文件名
					file_content=${file1%/*}	#獲取網站根目錄下被刪除文件的目錄名
					if [ ! -d $file_content ];then	#考慮到部分惡意刪除會刪除整個文件夾,此處判斷目錄是否存在
						mkdir -p $file_content
					fi
              		for bak_file in $(find $bak_content -name $file_name)	#在備份網站中查找被刪除的文件名,使用循環是因為不同的目錄下可能存在相同的文件名,以此解決備份失敗的問題
					do
#						echo $file_content
#             			echo $bak_file
#						echo $file
              			cp -f $bak_file $file1 >> /dev/null	#從網站備份路徑下恢復被刪除的文件
	      				echo -n "Find $file1 miss!" >> $changefile_content/rsync_miss.log
              			echo -n "  `date`" >> $changefile_content/rsync_miss.log
	      				echo "  Backup and readd $file1 success!" >> $changefile_content/rsync_miss.log
	      				tail -1 $changefile_content/rsync_miss.log	#屏顯上述操作
					done
              	fi
        done
       	#搜索惡意新建的文件,發現新建惡意文件立即刪除,並將該惡意文件傳到對應的日志文件夾中,記錄並屏顯相應日志。 	
		for newfile in $(find $webroot -type f)	
        do
        	grep -w $newfile file.md5  >/dev/null
        	if [ $? -gt 0 ];then
        	    echo -n "Find $newfile added!" >> $newfile_content/rsync_new.log
        		echo -n "  `date`" >> $newfile_content/rsync_new.log
        		cp $newfile $newfile_content >> /dev/null
        		rm -rf $newfile
				echo "  Backup and delete $newfile success!" >> $newfile_content/rsync_new.log
				tail -1 $newfile_content/rsync_new.log			     
        	fi
        done
        	
		fi
done


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM