利用SHELL脚本实现文件完整性检测程序(1.2版更新)
一.、开发背景
因时势所逼,需要对服务器的文件系统实行监控。虽然linux下有不少入侵检测和防窜改系统,但都比较麻烦,用起来也不是很称手。自己琢磨着也不需要什么多复杂的功能,写个脚本应该就可以满足基本需求。于是整理了一下思路,编写了一个简单的文件完整性检测程序。
二、实现功能
1、能监测多个不同目录中文件的增删改变化。
2、允许监测的特定类型文件,并可根据具体情况设定是否需要生成摘要等。
3、对于变动的文件,新增或修改的可以生成摘要。删除的文件要有日志记录。
4、当监测到文件发生变动时,能生成简报以邮件方式提醒管理员。
三、设计思路
建立监测项配置文件,将需检测的目录路径以及相关设置记录在文件中。利用crontab定时执行脚本,第一次运行时按配置文件加载检测项,通过find命令获取文件列表,利用md5sum为符合条件的文件生成hash值,并保存到文件中做为以后校验的基准数据。脚本在以后的运行中,首先会将待测目录中符合条件的文件列出,并于基准数据中的文件进行比对,以发现新增文件。再利用md5sum检测目录中文件是否有被修改或删除。对修改或新增文件生成摘要,将检测结果生成简报存入日志文件,并将简报发送到指定邮箱。
四、监测项配置文件说明
配置文件每一行为一个检测目录项,配置项之间以逗号分隔,配置定义如下:
<待查目录>,<过滤条件>,<检测类型>
1、待查目录
需检测的目录完整路径,例如:/var/test
2、过滤条件
写在此处的内容会做为find命令中的查询条件,以过滤特定文件。例如:-name '*.txt' -type f
过滤条件字串中不要使用双引号。
3、检测类型
取值为0或1。
0:发现变更仅记录文件名不做摘要;(一般针对二进制文件检测)
1:发现变更则做摘要
五、程序运行方式
脚本可以通过crontab定时执行。同时为了方便日常工作,脚本支持参数运行。具体参数及用途如下:
-c 清空日志
-i 生成扫描项的验证码文件,做为原始校验范本。(一般用于文件正常变更后,管理员手动重新生成基准检验文件)
-s 生成所有扫描项的摘要文件。(一般用于初次生成HASH值之前,生成所有符合文件摘要,供管理员做检测)
六、题外话
1、本人才疏,原打算将所有find的过滤条件做为一个字串传给find执行,比如“ -name "*.txt" -type f ”。但实际运行时总是报错,不得已只能将-name的具体参数传入,请参看具体代码:$FindCmd $Search -name "$Arg"。如果有更好解决办法,请一定告之,谢谢!(1.2版已解决)
2、生成摘要的方式可以根据实际情况自行修改。
3、可以根据具体情况,自己扩展程序实现对变更文件做进一步检测的功能。
七、更新记录
2014.7.31 Ver 1.2 更新检索过滤条件处理方式,可以直接将find命令的参数写进配置文件中,比如“ -name '*.txt' -type f ”。
2014.7.25 Ver 1.1 更新邮件发送机制,修改旧版本中每组扫描项异常结果分别发送的方式,将多个扫描项结果汇总后发送。
2014.7.14 Ver 1.0
利用SHELL脚本实现文件完整性检测程序(1.2版更新)的更多相关文章
- 利用shell脚本统计文件中出现次数最多的IP
比如有如下文件test.txt 1 134.102.173.43 2 134.102.173.43 3 134.102.171.42 4 134.102.170.9 要统计出现次数最多的IP可 ...
- 利用shell脚本或者php移动某个文件夹下的文件到各自的日期组成的目录下
背景是这样的:网站一开始访问量比较小,大家就把所有的图片文件上传到一个目录下(比如是/data/images/).后来访问量大了,图片也多了,这样就影响读取效率.所以有个这样的需求,把这些个图片文件移 ...
- 利用shell脚本实现计划任务功能 V1.2
2013.05.10 mytask 1.2 主程序休眠时间分成若干小的时间片断分段休眠,避免长时间的休眠不能及时响应系统信号. 2013.05.07 mytask 1.1 昨天发布了mytask1. ...
- 利用shell脚本将Oracle服务器中数据定时增量刷新到ftp服务器中
现有需求:将oracle数据库中的数据准实时同步至某ftp服务器中,以便前端应用能定时从ftp服务器目录中取增量数据 方法:将加工脚本写为存储过程,然后利用shell脚本执行该存储过程并将增量数据导出 ...
- shell脚本中文件测试
shell脚本中文件测试 author:headsen chen 2017-10-17 14:35:19 个人原创,转载请注明作者,否则 依法追究法律责任 [ -f filename ] ...
- Shell脚本统计文件行数
Shell脚本统计文件行数 转自 http://www.jb51.net/article/61943.htm 示例:row_count.sh文件 awk '{print NR}' row_cou ...
- (转)shell脚本之文件测试操作符及整数比较符
shell脚本之文件测试操作符及整数比较符 原文:http://www.cnblogs.com/Steward-Xu/p/6722592.html 一.文件测试操作符: 在书写测试表达式是,可以使用一 ...
- shell 脚本大文件处理
shell 脚本大文件处理 字符串处理 s='{"_id":{"$oid":"59b73d80930c17474f9f050d"},&qu ...
- 利用shell脚本去备份幸运28源码搭建下载所指定的数据库
#! /bin/bash幸运28源码搭建下载Q[115288oo99]logintool=/home/yx/server/mysql/mysql/bin/mysqldumptool=/home/yx/ ...
随机推荐
- 架构之路(七)MVC点滴
我们目前正在开发中的是任务管理系统,一个前端复杂的项目,所以我们先从MVC讲起吧. WebForm 随着ASP.NET MVC的兴起,WebForm已成昨日黄花,但我其实还很想为WebForm说几句. ...
- 大白话讲解Promise(三)搞懂jquery中的Promise
前两篇我们讲了ES6中的Promise以及Promise/A+规范,在Promise的知识体系中,jquery当然是必不可少的一环,所以本篇就来讲讲jquery中的Promise,也就是我们所知道的D ...
- MySQL 启动原理剖析
200 ? "200px" : this.width)!important;} --> 介绍 本篇文章主要从查看MySQL的启动命令的代码来详细了解MySQL的启动过程,内容 ...
- Azure SQL Database Active Geo-Replication简介
笔者在<迁移SQL Server 数据库到 Azure SQL 实战>一文中,介绍了如何把一个本地版的 SQL Server 数据库迁移到 Azure SQL Database.迁移虽然顺 ...
- 预处理(防止sql注入的一种方式)
<!--- 预处理(预编译) ---><?php/* 防止 sql 注入的两种方式: 1. 人为提高代码的逻辑性,使其变得更严谨,滴水不漏. 比如说 增加判断条件,增加输入过滤等,但 ...
- iOS-APP发布应注意
地区范围文件不用填 电话号码前缀是86
- sql的行转列(PIVOT)与列转行(UNPIVOT)
在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比较快速实现行转列,列转行,而且可扩展性强 一.行转列 1.测 ...
- 有关binlog的那点事(三)(mysql5.7.13)
这次我们要探索更精细的binlog内容,上次讨论的Query_event和Rows_event肯定有让你疑惑不解的问题.Query_event中的status-vars环境变量有哪些,Rows_eve ...
- MongoDB 搭建副本集
副本集(Replica Set)是一组MongoDB实例组成的集群,由一个主(Primary)服务器和多个备份(Secondary)服务器构成.通过Replication,将数据的更新由Primary ...
- VS-项目发布失败的解决方案1
报错信息 错误 1 未能将文件 Script\easyui\themes\gray\images\Thumbs.db 复制到 obj\Release\Package\PackageTmp\Script ...