66  
linux 通过MD5监控指定路径文件的变动
作者: wyasw 于 2020年03月29日 发布在分类 / linux / 常用shell脚本 下,并于 2020年03月29日 编辑
shell

linux 通过MD5监控指定路径文件的变动

脚本须知:

1. 运行此脚本的用户必须是root,因为在某些文件所在路径普通用户没有访问权限

2. 源文件和其md5码只要有一方内容有改动,都会导致校验失败,所以校验码的保存就至关重要防止其他人修改,建议修改权限为root root 600

3. 此脚本带简单的日志功能,方便以后系统安全评估和查看

4.对一个目录下的所有文件做校验,一般有以下几种情况:

1)该目录下文件总的数量没有发生变化,但个别源文件内容发生修改

x文件 --> 改变 --> 记录日志

2)该目录下文件总的数量发生改变

新增文件 --> 校验 -->记录日志

文件丢失 --> 记录日志 --> 是否删除此文件的MD5校验值

Yes -- (目前此脚本没有提示用户是否要删除丢失源文件校验码,暂时需要手动删除,删不删除需要根据需求)

No --  找回丢失的源文件重新校验

5. 该脚本目前没有实现告警功能,这个功能模块其实可以通过SendEmail实现,后期补上

6. 校验的文件应该是不经常修改的文件,比如etc下的配置文件,如果校验经常变动的文件没有任何意义,比如日志文件

#!/bin/bash

#

 

定义MD5文件保存的路径

md5_path=/tmp/md5.sum

 

判断MD5基准校验文件是否存在,不存在则创建此文件,并修改权限只有root用户或者指定用户有读写权限

[ ! -f $md5_path ] && touch $md5_path && chmod 600 $md5_path

read -p "请输入你需要MD5检验文件的目录,必须以\"/\"开始: " path

if ! echo $path | grep -q "^/";then echo "不是以\"/\"开始";exit 1;fi

 

echo "#################################################"

如果所给需要md5校验的目录不存在,或者目录存在但目录下没有一个文件,则返回错误并提示用户

    if [ ! -d $path ] || [ `find $path -type f | wc -l` -eq 0 ];then

        echo "错误:路径不存在或者该路径下没有文件"

        exit 1

    fi

判断基准文件数量

for i in `cat /tmp/md5.sum | awk '{print $2}'`;do

    [ ! -f $i ] && echo -e "[检测时间:`date +"%Y-%m-%d %T.%N"`]  [文件:$i] \033[31m[MD5结果:去除]\033[0m" 2>&1 | tee -a /var/log/md5.log

done

 

for list in `find $path -type f`;do

#   echo " list = $list"

    new_md5_arg1=`md5sum $list | awk '{print $1}'`

    new_md5_arg2=`md5sum $list | awk '{print $2}'`

    old_md5_arg2=`awk -v List="$list" '$2 == List{print $2}' $md5_path`

    if [[ "$new_md5_arg2" == "$old_md5_arg2" ]];then

        old_md5_arg1=`awk -v List="$list" '$2 == List{print $1}' $md5_path`

        if [[ ! "$new_md5_arg1" == "$old_md5_arg1" ]];then

            echo -e "[检测时间:`date +"%Y-%m-%d %T.%N"`]  [文件:$list] \033[31m[MD5结果:改变]\033[0m" 2>&1 | tee -a /var/log/md5.log

        else

            echo -e "[检测时间:`date +"%Y-%m-%d %T.%N"`]  [文件:$list] \033[32m[MD5结果:未改变]\033[0m"

        fi

    else

        md5sum $list >> $md5_path

        echo -e "[检测时间:`date +"%Y-%m-%d %T.%N"`]  [文件:$list] \033[31m[MD5结果:添加]\033[0m" 2>&1 | tee -a /var/log/md5.log

    fi

    # 如果文件数量大,可以把sleep的时间间隔设置小点。

     sleep 0.2

done




 推荐知识

 历史版本

修改日期 修改人 备注
2020-03-29 21:12:56[当前版本] wyasw 创建版本

  目录
    文艺知识分享平台 - 4.3.0 - 文艺范儿