linux 通过MD5监控指定路径文件的变动
脚本须知:
1. 运行此脚本的用户必须是root,因为在某些文件所在路径普通用户没有访问权限
2. 源文件和其md5码只要有一方内容有改动,都会导致校验失败,所以校验码的保存就至关重要防止其他人修改,建议修改权限为 root root 600
3. 此脚本带简单的日志功能,方便以后系统安全评估和查看
4.对一个目录下的所有文件做校验,一般有以下几种情况:
1)该目录下文件总的数量没有发生变化,但个别源文件内容发生修改
x文件 --> 改变 --> 记录日志
2)该目录下文件总的数量发生改变
a 新增文件 --> 校验 -->记录日志
b 文件丢失 --> 记录日志 --> 是否删除此文件的MD5校验值
Yes -- (目前此脚本没有提示用户是否要删除丢失源文件校验码,暂时需要手动删除,删不删除需要根据需求)
No -- 找回丢失的源文件重新校验
5. 该脚本目前没有实现告警功能,这个功能模块其实可以通过SendEmail实现,后期补上
6. 校验的文件应该是不经常修改的文件,比如etc下的配置文件,如果校验经常变动的文件没有任何意义,比如日志文件
#!/bin/bash
#
# QQ: 765482322 # 定义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
脚本执行展示
第一种情况:校验目录下的文件总数不变,个别文件遭到篡改
对一个新路径下的所有文件做校验,由于第一次校验所以相当于发生改变

记录到日志

再次执行校验:

查看日志,可以看到/etc/sysconfig/network-scripts 路径下没有文件发生改变

模拟篡改一个文件,比如/etc/sysconfig/network-scripts/ifcfg-eth0 追加一行带 # 注释的字符串到其尾部
shell>echo "#hello world" >> /etc/sysconfig/network-scripts/ifcfg-eth0

再次执行脚本校验

可以看到,日志里记录了改变的文件相关信息,以后我们可以通过查看此日志文件,来锁定那些文件被修改,然后根据时间点去大概锁定一个篡改来源
linux 通过MD5监控指定路径文件的变动的更多相关文章
- linux中tar 打包指定路径文件
linux中tar打包指定路径文件www.111cn.net 编辑:yahoo 来源:转载在linux系统中打包与解压文件我都可以使用tar命令来解决,只要使用不同的参数就可以实现不同的需要了,下面来 ...
- Eclipse直接运行算法第4版例子(重定向和读取指定路径文件)
Eclipse直接运行算法第4版例子(重定向和读取指定路径文件) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://b ...
- java监控指定路径下文件及文件夹变化
之前用jdk7的WatchService API(java.nio.file包)来做目录下的子文件监控,后改为使用commons-io包.主要有下面几点不同:1. WatchService是采用扫描式 ...
- vc++ 监控指定路径下文件变化
参考MSDN文档 https://docs.microsoft.com/zh-cn/windows/desktop/api/winbase/nf-winbase-readdirectorychange ...
- Linux的nmon监控结果分析文件中网络分析NET
1.首先,使用# ifconfig查看Linux系统中的网卡名称,有的是eth0,有的是em1,以查看结果为准,下图为em1 2.先试试Linux系统中有没有安装ethtool工具,没有的话,下载et ...
- Linux Shell:根据指定的文件列表 或 map配置,进行文件位置转移
读取配置文件,进行文件位置转移 在whenb.csv中指定了需要从/home/root/cf/下移除到/home/root/cf_wh/下文件列表,whenb.csv中包含记录如下: enb- enb ...
- C#打开指定路径文件对话框
private string OpenFileDlog(string DeafultDir) { OpenFileDialog Ofd = new OpenFileDialog(); Ofd.AddE ...
- java判断指定路径文件夹是否存在,若不存在则创建新的文件夹
File file = new File(dirPath); if (!file.exists()) { file.mkdirs(); }
- windows上python上传下载文件到linux服务器指定路径【转】
从windows上传文件到linux,目录下的文件夹自动创建 #!/usr/bin/env python # coding: utf-8 import paramiko import datetime ...
随机推荐
- MongDB之各种删除操作
接口IMongDaoDelete: package com.net.test.mongdb.dao; public interface IMongDaoDelete { public void del ...
- vue之小小动态按钮
Vue是前台框架,可以独立完成前后端分离式web项目渐进式的javascript框架 ,今天我们来设计一个简单的动态按钮 具体效果图如下: 点击后会变成这样: 首先我们需要下载vue.js:htt ...
- 高并发架构系列:如何从0到1设计一个类Dubbo的RPC框架
在过去持续分享的几十期阿里Java面试题中,几乎每次都会问到Dubbo相关问题,比如:“如何从0到1设计一个Dubbo的RPC框架”,这个问题主要考察以下几个方面: 你对RPC框架的底层原理掌握程度. ...
- 20181225 基于TCP/IP和基于UDP/IP的套接字编程
一.TCP/IP的套接字编程 服务器端代码: import socketserver = socket.socket() # 默认是基于TCP# 基于TCP的对象serve=socket.sock ...
- German Collegiate Programming Contest 2018 C. Coolest Ski Route
John loves winter. Every skiing season he goes heli-skiing with his friends. To do so, they rent a h ...
- 华东交通大学2018年ACM“双基”程序设计竞赛 D
摸鱼之王MIKU酱想去埃及玩,需要一个人陪同.小新和小磊都想陪MIKU酱一起去,但名额只有一个.所以小磊和小新决定用一个小游戏来决定谁和MIKU酱出去玩. 游戏的道具是21张塔罗牌,塔罗牌分 ...
- 9 RESTful API
1 RESTful API 2 post创建一个视频 put帖子加精,delete删除 3 自定义状态码 4 5 6 7 8
- Asp.net自定义控件开发任我行(6)-嵌入资源下
摘要 上一章,我们讲了嵌入.css文件,这一章,我们来讲一下嵌入.js文件,也顺带一个嵌入Image文件 内容 我们前面的几章,一运行,下拉框就显示出来了,但是DropDwonList的下拉框是被隐藏 ...
- Git之2分钟教程
Git之2分钟入门 普通人:“借我1000块钱”.程序猿:“借你1024吧,凑个整”. 今天是1024,是我们程序员的节日,在此,首先祝各位程序猿以及程序媛们节日快乐~然后送出一份节日礼物,没错,就是 ...
- 再写一篇tps限流
再写一篇tps限流 各种限流算法的称呼 网上有很多文章介绍限流算法,但是对于这些算法的称呼与描述也是有点难以理解.不管那么多了.我先按我理解的维度梳理一下. 主要维度是:是正向计数还是反向计数.是定点 ...