zoukankan      html  css  js  c++  java
  • 利用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

    完整代码点此下载

  • 相关阅读:
    jquery中$.get()提交和$.post()提交有区别吗?
    src = "security/afafsff/?ip=123.4.56.78&id=45",请写一段代码用正则匹配出ip
    python如何捕获异常
    平衡点问题
    支配点问题:
    python程序中文输出问题怎么解决? 用encode和decode
    介绍一下Python中webbrowser的用法?
    XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
    垃圾回收的优点和原理。并考虑2种回收机制。
    设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
  • 原文地址:https://www.cnblogs.com/lykyl/p/3835272.html
Copyright © 2011-2022 走看看