一.、开发背景linux
因时势所逼,须要对服务器的文件系统实行监控。虽然linux下有很多入侵检测和防窜改系统,但都比较麻烦,用起来也不是很称手。本身琢磨着也不须要什么多复杂的功能,写个脚本应该就能够知足基本需求。因而整理了一下思路,编写了一个简单的文件完整性检测程序。服务器
2、实现功能设计
一、能监测多个不一样目录中文件的增删改变化。日志
二、容许监测的特定类型文件,并可根据具体状况设定是否须要生成摘要等。blog
三、对于变更的文件,新增或修改的能够生成摘要。删除的文件要有日志记录。crontab
四、当监测到文件发生变更时,能生成简报以邮件方式提醒管理员。ip
3、设计思路md5
创建监测项配置文件,将需检测的目录路径以及相关设置记录在文件中。利用crontab定时执行脚本,第一次运行时按配置文件加载检测项,经过find命令获取文件列表,利用md5sum为符合条件的文件生成hash值,并保存到文件中作为之后校验的基准数据。脚本在之后的运行中,首先会将待测目录中符合条件的文件列出,并于基准数据中的文件进行比对,以发现新增文件。再利用md5sum检测目录中文件是否有被修改或删除。对修改或新增文件生成摘要,将检测结果生成简报存入日志文件,并将简报发送到指定邮箱。开发
4、监测项配置文件说明get
配置文件每一行为一个检测目录项,配置项之间以逗号分隔,配置定义以下:
<待查目录>,<过滤条件>,<检测类型>
一、待查目录
需检测的目录完整路径,例如:/var/test
二、过滤条件
写在此处的内容会作为find命令中的查询条件,以过滤特定文件。例如:-name '*.txt' -type f
过滤条件字串中不要使用双引号。
三、检测类型
取值为0或1。
0:发现变动仅记录文件名不作摘要;(通常针对二进制文件检测)
1:发现变动则作摘要
5、程序运行方式
脚本能够经过crontab定时执行。同时为了方便平常工做,脚本支持参数运行。具体参数及用途以下:
-c 清空日志
-i 生成扫描项的验证码文件,作为原始校验范本。(通常用于文件正常变动后,管理员手动从新生成基准检验文件)
-s 生成全部扫描项的摘要文件。(通常用于初次生成HASH值以前,生成全部符合文件摘要,供管理员作检测)
6、题外话
一、本人才疏,原打算将全部find的过滤条件作为一个字串传给find执行,好比“ -name "*.txt" -type f ”。但实际运行时老是报错,不得已只能将-name的具体参数传入,请参看具体代码:$FindCmd $Search -name "$Arg"。若是有更好解决办法,请必定告之,谢谢!(1.2版已解决)
二、生成摘要的方式能够根据实际状况自行修改。
三、能够根据具体状况,本身扩展程序实现对变动文件作进一步检测的功能。
7、更新记录
2014.7.31 Ver 1.2 更新检索过滤条件处理方式,能够直接将find命令的参数写进配置文件中,好比“ -name '*.txt' -type f ”。
2014.7.25 Ver 1.1 更新邮件发送机制,修改旧版本中每组扫描项异常结果分别发送的方式,将多个扫描项结果汇总后发送。
2014.7.14 Ver 1.0