A-A+

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

2013年07月16日 运维技术 评论 5 条 阅读 21,708 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

5 条留言  访客:4 条  博主:1 条

  1. avatar 游蛮牛

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

  2. avatar 小二郎

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

  3. avatar inbi

    思维还是不错的

  4. avatar 哈哈

    验证文件是否修改过最好结合监控报警来,或者用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

    • avatar admin

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

给我留言

Copyright © linux系统运维 保留所有权利.   Theme  Ality 粤ICP备13023035号-1

用户登录

分享到: