基于Python的文件监视和入侵检测

2023-04-19 00:00:00 检测 入侵 监视

文件监视和入侵检测是保障系统安全的重要手段,可以及时发现系统中出现的异常情况。本文将介绍如何基于Python实现文件监视和入侵检测。

一、文件监视

文件监视可以通过Python自带的watchdog库实现。watchdog库可以监视文件系统变化,例如文件的创建、修改和删除等操作,并且可以向应用程序发送通知,实现实时监控。

首先,需要使用pip安装watchdog库:

pip install watchdog

接下来,创建一个Python文件,并编写以下代码:

import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class MyHandler(FileSystemEventHandler):
    def on_any_event(self, event):
        if event.is_directory:
            return None
        elif event.event_type == 'created':
            print(f'Created: {event.src_path}')
        elif event.event_type == 'modified':
            print(f'Modified: {event.src_path}')
        elif event.event_type == 'deleted':
            print(f'Deleted: {event.src_path}')

if __name__ == "__main__":
    event_handler = MyHandler()
    observer = Observer()
    observer.schedule(event_handler, path='.', recursive=False)

    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

以上代码中,我们定义了一个MyHandler类,它继承了FileSystemEventHandler,用于处理文件系统事件,并根据不同的事件类型打印出相应信息。在主函数中,我们创建了一个Observer对象,并将它和MyHandler类的实例进行绑定,使用start()方法启动Observer实例,并通过try-except语句块使程序一直执行,直到按下Ctrl+C停止Observer。

运行以上代码后,在命令行中输入:

echo "Hello, World!" > pidancode.com

此时程序将输出:

Created: ./pidancode.com
Modified: ./pidancode.com

说明程序成功监视到了文件系统的变化。

二、入侵检测

入侵检测可以通过监视系统中重要文件的变化来实现。例如,管理员可以监视系统中的密码文件、登录日志等文件,一旦有人尝试对这些文件进行修改、删除、复制等操作,就会触发入侵检测机制,管理员可以及时发现和处理这种情况。

以下是一个简单的入侵检测程序,用于监视系统中的password和login.log文件:

import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class MyHandler(FileSystemEventHandler):
    def __init__(self, pattern):
        self.pattern = pattern

    def on_modified(self, event):
        if self.pattern in event.src_path:
            print(f'Warning! File {event.src_path} has been modified.')

    def on_deleted(self, event):
        if self.pattern in event.src_path:
            print(f'Warning! File {event.src_path} has been deleted.')

if __name__ == "__main__":
    patterns = ['password', 'login.log']
    event_handler = MyHandler(patterns)
    observer = Observer()
    for pattern in patterns:
        observer.schedule(event_handler, path='/', recursive=True)

    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

以上代码中,我们定义了一个MyHandler类,它继承了FileSystemEventHandler,用于处理文件系统事件。在构造函数中,我们传入了一个pattern参数,用于指定需要监视的文件名称。在on_modified和on_deleted方法中,我们判断事件源路径是否包含了pattern字样的文件名,如果是,就输出一条警告信息。

在主函数中,我们定义了一个列表patterns,包含了需要监视的文件名称。然后创建了一个Observer对象,并为每个需要监视的文件名称都添加一个观察者,使用start()方法启动Observer实例,并通过try-except语句块使程序一直执行,直到按下Ctrl+C停止Observer。

运行以上代码后,在命令行中模拟修改login.log文件:

echo "Hacker" >> /var/log/login.log

此时程序将输出:

Warning! File /var/log/login.log has been modified.

相关文章