检测linux系统重要文件是否被更改的shell脚本

2013 年 7 月 16 日13:47:51 5 24,185 views

#!/bin/bash
#此脚本用于检测linux系统重要文件是否被改动,如果改动则用邮件报警
#建议用定时任务执行此脚本,如每5分钟执行一次,也可修改此脚本用于死循环检测
#Ver:1.0
#Email:63780668@qq.com
#http://www.linuxyw.com

 

#定义验证文件所在目录
FileDir='/var/CheckFile'

#获取主机名或自己定义
HostName=$(hostname)

#定义邮件参数:xmtp地址,发送邮件帐号,发送邮件密码,接收邮件地址,邮件主题,邮件内容

#根据你的邮件帐号密码进行修改以下四行省略的参数,smtp地址如不知道,可以百度,如163地址是stmp.163.com等
Mail_Smtp=""
Mail_User=""
Mail_Pass=""
Mail_From=""
Mail_To="63780668@qq.com"
Mail_Subject="${HostName}:There are changes to system files!"
Mail_Conntent="${HostName}:There are changes to system files!"

#定义需要验证的文件目录,/etc一般是系统重要的配置文件,其它重要的文件,如网站程序文件等,也可以添加到以下数组中,每个目录为一行,根据自己情况添加吧
CheckDir=(
/etc/
)

#生成所定义需验证的文件样本日志函数
OldFile () {
for i in ${CheckDir[@]}
do
/bin/find ${i} -type f |xargs md5sum >> ${FileDir}/old.log
done
}

#生成所定义文件新日志函数
NewFile () {
for i in ${CheckDir[@]}
do
/bin/find ${i} -type f |xargs md5sum >> ${FileDir}/new.log
done
}

#发送邮件函数
SendEMail () {
/usr/local/bin/sendEmail -f $Mail_From -t $Mail_To -s $Mail_Smtp -u $Mail_Subject -xu $Mail_User -xp $Mail_Pass -m $Mail_Conntent
}

#假如验证文件目录不存在则创建
if [ ! -d ${FileDir} ]
then
mkdir ${FileDir}
fi

#假如样本日志不存在则创建
if [ ! -f ${FileDir}/old.log ]
then
OldFile
fi

#假如没有安装sendEmail则安装
if [ ! -f /usr/local/bin/sendEmail ]
then
cd /usr/local/src/
wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
tar -xf sendEmail-v1.56.tar.gz
cd sendEmail-v1.56
cp sendEmail /usr/local/bin
chmod 0755 /usr/local/bin/sendEmail
fi

#生成新验证日志
NewFile

#新验证日志与样本日志进行比较
/usr/bin/diff ${FileDir}/new.log ${FileDir}/old.log >${FileDir}/diff.log
Status=$?

#假如比较结果有变化,则发送邮件报警
if [ ${Status} -ne 0 ]
then
Mail_Conntent="$(grep '<' ${FileDir}/diff.log |awk '{print $3}')"
SendEMail
fi

#清除新旧日志,把比较结果进行备份
/bin/mv -f ${FileDir}/diff.log ${FileDir}/diff$(date +%F__%T).log
cat /dev/null > ${FileDir}/old.log
cat /dev/null > ${FileDir}/new.log

#重新生成样本日志
OldFile

#删除目录内30天以前的比较结果备份文件
/bin/find ${FileDir} -type f -mtime +30 |xargs rm -f

####################  end  ############################

#目前这功能,已在zabbix上实现了,不过没有用zabbix的话,用这脚本便可以简单实现

####################################################

#这只是一个简单的验证脚本,以后有空,将会加以完善,或许大家有好的意见或思路等,可以互相交流,交流QQ群号:244914685

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:5   其中:访客  4   博主  1

    • 游蛮牛 0

      你好 网站更名了 友情链接的名称能否更改一下呢 Unity3D教程手册 更名 游蛮牛 链接地址不变的 谢谢啦~~~~ :razz:

      • 小二郎 0

        哈哈,博主太牛逼了,膜拜。

        • inbi 1

          思维还是不错的

          • 哈哈 0

            验证文件是否修改过最好结合监控报警来,或者用tripwire 版主这东西没啥实用,只是在练习shell吧?
            a() {
            find /etc/ -type f | xargs md5sum > /tmp/md51.log
            }
            b() {
            find /etc/ -type f | xargs md5sum > /tmp/md52.log
            }

            if [ ! -f /tmp/md51.log ];then
            a && chattr +i /tmp/md51.log
            fi

            b

            diff /tmp/md51.log /tmp/md52.log > /tmp/diff.log

            if [ -z /tmp/diff.log ];then
            exit

            else
            mail -s “check file report” haha@haha.com :razz: < /tmp/diff.log
            fi

              • admin Admin

                @哈哈 朋友说的没错
                其实暂时先用这脚本来实现这个简单的功能吧
                脚本只要通达到自己的要求即可,其实我写这个脚本目的是用来监控WEB程序的,防止被挂马等
                现在正研究用zabbix+脚本来实现这个功能