Shell编程---监控网站目录文件是否被恶意篡改(md5sum指纹)

23 篇文章 2 订阅
18 篇文章 1 订阅
题目要求:使用shell脚本监控网站目录(/var/html/www)中的文件是否被篡改,如果有就打印出改动的文件名并用邮件告警。
分析:
概念:

什麽是恶意篡改?只要是未进过许可改动的都是恶意篡改。

文件被篡改了,会有特征:

a.文件大小可能会发生变化;
b.文件的修改时间会发生变化(文件测试符ot、nt等);
c.文件内容会发生变化(md5sum指纹);
d.文件目录中的文件被删除,或者文件目录中有其他文件增加;

注意:

需要文件信息记录库(变化前 VS 变化后,这个是衡量对比的标准)

实际应用:

1.代码发布方案:大公司或规范的公司,不会时刻上传代码,每天1-2次为宜。
2.服务器上的项目目录是否被黑客入侵进行恶意篡改。

解答:
命令行测试:
[root@myhost ~]# cd /var/www/html
[root@myhost html]# pwd
/var/www/html
[root@myhost html]# touch wenben1.txt
[root@myhost html]# cat wenben1.txt 
[root@myhost html]# md5sum wenben1.txt 
d41d8cd98f00b204e9800998ecf8427e  wenben1.txt
[root@myhost html]# echo "addContent to the file" >> wenben1.txt 
[root@myhost html]# cat wenben1.txt 
addContent to the file
[root@myhost html]# md5sum wenben1.txt 
009c4ee40b070fa48fb47c503642c0f1  wenben1.txt

[root@myhost html]# find /var/www/html/ -type f | xargs md5sum
009c4ee40b070fa48fb47c503642c0f1  /var/www/html/wenben1.txt
d41d8cd98f00b204e9800998ecf8427e  /var/www/html/wenben2.txt
[root@myhost html]# find /var/www/html/ -type f | xargs md5sum > /home/yuki/infoDB/md5sumBefore.log
[root@myhost html]# cat /home/yuki/infoDB/md5sumBefore.log
009c4ee40b070fa48fb47c503642c0f1  /var/www/html/wenben1.txt
d41d8cd98f00b204e9800998ecf8427e  /var/www/html/wenben2.txt

[root@myhost html]# md5sum -c /home/yuki/infoDB/md5sumBefore.log 
/var/www/html/wenben1.txt: OK
/var/www/html/wenben2.txt: OK
[root@myhost html]# md5sum -c /home/yuki/infoDB/md5sumBefore |egrep -i "fail"

#测试:修改文件中的内容(增加内容/减少内容/修改内容)
[root@myhost html]# echo "now we add sth to the file with name wenben2.txt" >> wenben2.txt 
[root@myhost html]# md5sum -c /home/yuki/infoDB/md5sumBefore.log |egrep -i "fail"
md5sum: WARNING: 1 of 2 computed checksums did NOT match
/var/www/html/wenben2.txt: FAILED

#测试:删除某个文件
[root@myhost html]# rm -rf wenben1.txt 
[root@myhost html]# md5sum -c /home/yuki/infoDB/md5sumBefore.log
md5sum: /var/www/html/wenben1.txt: No such file or directory
/var/www/html/wenben1.txt: FAILED open or read
/var/www/html/wenben2.txt: FAILED
md5sum: WARNING: 1 of 2 listed files could not be read
md5sum: WARNING: 1 of 1 computed checksum did NOT match

#测试:创建刚刚删除的文件
[root@myhost html]# touch wenben1.txt
[root@myhost html]# md5sum -c /home/yuki/infoDB/md5sumBefore.log 
/var/www/html/wenben1.txt: FAILED
/var/www/html/wenben2.txt: FAILED
md5sum: WARNING: 2 of 2 computed checksums did NOT match
#注意:向刚刚创建的文件恢复删除之前的内容,md5sum又和之前的一样了。
[root@myhost html]# echo "addContent to the file" >> wenben1.txt 
[root@myhost html]# md5sum -c /home/yuki/infoDB/md5sumBefore.log 
/var/www/html/wenben1.txt: OK
/var/www/html/wenben2.txt: FAILED
md5sum: WARNING: 1 of 2 computed checksums did NOT match

#测试:创建新的文件(新的文件代表着它的md5sum指纹从未被记录到文件记录信息库中去)
[root@myhost html]# touch newFresh.log
[root@myhost html]# md5sum -c /home/yuki/infoDB/md5sumBefore.log 
/var/www/html/wenben1.txt: OK
/var/www/html/wenben2.txt: FAILED
md5sum: WARNING: 1 of 2 computed checksums did NOT match

#注意:我发现md5sum从未被记录的新文件是无法被监控对比到是否被篡改了。
#但是,我们可以提前将这个目录的文件数量、信息都记录下来然后再将现在的文件数量和之前的进行对比就可以什麽新文件被创建了。

[root@myhost html]# ll
total 8
-rw-r--r--. 1 root root  0 Nov 14 14:01 newFresh.log
-rw-r--r--. 1 root root 23 Nov 14 13:58 wenben1.txt
-rw-r--r--. 1 root root 49 Nov 14 11:45 wenben2.txt
[root@myhost html]# find /var/www/html/ -type f | wc -l
3

#创建前记录
[root@myhost html]# find /var/www/html/ -type f > /home/yuki/infoDB/fileInfoBefore.log

#创建新文件
[root@myhost html]# touch wenben3.log
[root@myhost html]# ll
total 8
-rw-r--r--. 1 root root  0 Nov 14 14:01 newFresh.log
-rw-r--r--. 1 root root 23 Nov 14 13:58 wenben1.txt
-rw-r--r--. 1 root root 49 Nov 14 11:45 wenben2.txt
-rw-r--r--. 1 root root  0 Nov 14 14:09 wenben3.log
#创建后再记录
[root@myhost html]# find /var/www/html/ -type f > /home/yuki/infoDB/fileInfoAfter.log
#比较两个记录文件的不同
[root@myhost html]# diff /home/yuki/infoDB/fileInfoBefore.log  /home/yuki/infoDB/fileInfoAfter.log
diff: home/yuki/infoDB/fileInfoAfter.log: No such file or directory
脚本编写:
脚本1:篡改之前做文件信息记录库,(变化前 VS 变化后,这个是衡量对比的标准)
#!/bin/sh
source /etc/profile

#define variable
#定义一个需要监控的站点目录
siteDir="/var/www/html"
#定义一个文件信息库目录
path="/home/yuki/infoDB"
if [ !d ${path} ];
	then
		mkdir -p ${path}
fi
#做好的文件md5sum指纹记录文件
md5sumBeforeDB="${path}/md5sumBefore.log"
if [ -f ${md5sumBeforeDB} ];
	then 
		touch ${md5sumBeforeDB}
fi
echo `find ${siteDir} -type f | xargs > ${path}/md5sumBefore.log`

#篡改之前记录的需要监控目录下的文件数量、信息记录
fileInfoBefore="${path}/fileInfoBefore.log"
if [ -f ${fileInfoBefore} ];
	then 
		touch ${fileInfoBefore}
fi
echo `find ${siteDir} -type f > ${path}/fileInfoBefore.log`

脚本2:网站目录(/var/html/www)中的文件是否被篡改,如果有就打印出改动的文件名并用邮件告警。
#!/bin/sh
source /etc/profile

#define variable

#定义一个邮件地址
email=123456789@qq.com

#定义需要监控的站点目录
siteDir="/var/www/html"

#定义文件信息库目录
path="/home/yuki/infoDB"
if [ !d ${path} ];
	then
		mkdir -p ${path}
fi

#下面这个是之前就做好的文件md5sum指纹记录文件
md5sumBeforeDB="${path}/md5sumBefore.log"
fileInfoBefore="${path}/fileInfoBefore.log"

if [ ! -f ${md5sumBeforeDB}  -o ! -f ${fileInfoBefore}  ];
	then 
		echo "文件信息库的建立不完全,无法参照对比"
		exit 1
fi
fileNumBefore=`cat ${fileInfoBefore}|wc -l`

---------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------

#篡改之后记录的需要监控目录下的文件数量、信息记录
fileInfoAfter="${path}/fileInfoAfter.log"
if [ -f ${fileInfoAfter} ];
	then 
		touch ${fileInfoAfter}
fi
echo `find ${siteDir} -type f > ${path}/fileInfoBefore.log`
fileNumAfter=`cat ${fileInfoAfter}|wc -l`

#再继续定义一个记录篡改文件的篡改信息文件,方便后面邮件告警。
recordAllInfoLog="${path}/recordAllInfo.log"
if [ ! -f ${recordAllInfoLog} ];
	then
		touch ${recordAllInfoLog}
fi

#篡改标志可以通过两个方面进行比较:
#2>/dev/null 将错误信息追加空设备
changeNumFlag=`md5sum -c ${md5sumBeforeDB}  2 > /dev/null  |egrep -i "failed" | wc -l`
if [ ${changeNumFlag} -ne 0 ] || [ ${fileNumAfter} -ne ${fileNumBefore} ]
	then	
		echo `md5sum -c ${md5sumBeforeDB}  2 > /dev/null |egrep -i "failed"` > ${recordAllInfoLog}
		diff ${fileInfoAfter} ${fileInfoBefore} >> ${recordAllInfoLog}
		happenTime= `date "+%Y-%m-%d %H:%M:%S"`
		mail -s "the directory of the site on ${happenTime}  ${email}" < ${recordAllInfoLog}

fi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值