利用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/ ...
随机推荐
- .NET面试题系列[14] - LINQ to SQL与IQueryable
.NET面试题系列目录 名言警句 "理解IQueryable的最简单方式就是,把它看作一个查询,在执行的时候,将会生成结果序列." - Jon Skeet LINQ to Obje ...
- 如何在Visual Studio 工程之间共享静态内容 (js, css, img, etc.)
第一步: 文件夹上点击右键 -> Add -> Existing Item,单击选中文件,不要点击“Add”按钮,而是在“Add”按钮右边有个向下的小箭头,点击这个箭头,再点击“Add ...
- Fd.Service 轻量级WebApi框架
News December 06 2014: Version 1.0.0.8Add Register Route Configuration iis 7 Integrated Mode: <sy ...
- Android N 多窗口模式,你需要知道的一切
Android N中最大.最引人注意的变化就是Mutil-window模式.对于一个开发者,我们最关心的就是:Mutil-window模式下怎么配置mutil-window模式.Activity的生命 ...
- SQL Server 数据库备份还原和数据恢复
认识数据库备份和事务日志备份 数据库备份与日志备份是数据库维护的日常工作,备份的目的是在于当数据库出现故障或者遭到破坏时可以根据备份的数据库及事务日志文件还原到最近的时间点将损失降到最低点. 数据 ...
- quick-cocos2d-x 2.2.3 rc版本中 crypto.md5file() 的C++实现在ANDROID上有BUG
原来的版本是用fopen打开文件的,如果要从ANDROID的APK中取文件,直接就洗白了修改如下 void CCCrypto::MD5File(const char* path, unsigned c ...
- 常用RGB色值表
R G B 值 R G B 值 R G B 值 黑色 0 0 0 #000000 黄色 255 255 0 #FFFF00 浅灰蓝色 176 224 230 #B0E0E6 象牙黑 41 ...
- IOS关于LKDBHelper实体对象映射插件运用
一 插件简介: 其github地址:https://github.com/li6185377/LKDBHelper-SQLite-ORM 全面支持 NSArray,NSDictionary, Mode ...
- SQL 中 EXISTS 与 NOT EXISTS
带有 EXISTS 操作符的子查询不返回任何数据,只产生逻辑真值 'true' 或逻辑假值 'false'.带有 EXISTS 操作符的子查询都是相关子查询. 相关子查询:子查询的条件依赖父查询. E ...
- SQL 笔记 By 华仔
-------------------------------------读书笔记------------------------------- 笔记1-徐 最常用的几种备份方法 笔记2-徐 收缩数据 ...