Linux 如何使用脚本监控重要的文件内容是否被修改
本文以监控“定时计划任务”var/spool/cron目录下的文件为例,实现当root、hzsis等文件发生改变时会自动备份原文件并以邮件方式发送给相关人员。(前提需要系统已经搭建好邮箱系统)
首先,需要先建立管控的文件:/usr/home/EDP/monitorjob.lst
[root@vm ]$ cat /usr/home/EDP/monitorjob.lst
root
hzsis
创建对比的文件如下,主要用于与/var/spool/cron下的root及hzsis作比较判断,并且也是首次对监控文件做备份。
/var/spool/cron/bak/root.last
/var/spool/cron/bak/hzsis.last
[root@vm ]$ cd /var/spool/cron
[root@vm ]$ mkdir -p /var/spool/cron/bak
[root@vm cron]$ cp -p root /var/spool/cron/bak/root.last
[root@vm cron]$ cp -p hzsis /var/spool/cron/bak/hzsis.last
具体代码如下:
cat /usr/local/sbin/monitorcronjob.sh
#!/bin/bash
CRON=/var/spool/cron
#############compare $list with $list.last file############
for list in `cat /usr/home/EDP/monitorjob.lst`;do
a=`diff $CRON/$list $CRON/bak/$list.last|wc -l`
if [ ${a} -gt 0 ];then
######## If the user's cronjob has changed ,backup user's cronjob #############
cp -p $CRON/bak/$list.last $CRON/bak/$list.`date +%Y-%m-%d_%H:%M:%S`.bk
############## List the changes ###############
diff $CRON/$list $CRON/bak/$list.last>/tmp/$list.`date +%Y-%m-%d_%H:%M:%S`.tmp
###### The changed cronjob will be the next comparison file user.last ######
cat $CRON/$list > $CRON/bak/$list.last
############## Mail the part of the change to the user ##########
/usr/local/bin/mail.pl -f "`hostname`-xxxx@163.com" -s "`hostname`: $list cronjob has been changed " abc@163.com < /tmp/$list.`date +%Y-%m-%d_%H:%M:%S`.tmp >/dev/null 2>&1
fi
done
将/usr/local/sbin/monitorcronjob.sh 加入定时任务中运行,可以根据需要设置定时的频率,如每5分钟检测一次文件情况。
[root@vm ]$ crontab -e
*/5 * * * * /usr/local/sbin/monitorcronjob
可以试试将/var/spool/cron/root文件中的内容进行修改测试效果。