原标题:Linux完整性保护机制模块实践分析(1)
在Linux操作系统中,审计系统使用inotify机制监视文件系统的变化,并将监视的结果通过审计系统记录到log文件中。
该实验通过用户态程序调用文件系统的inotify监视机制,监视指定路径的目录或文件,用户对目录或文件的操作如打开,删除,读,写,等都会在终端输出,这样保证了文件的安全操作,更重要的是,当有非法入侵操作时,用户需要知道非法入侵都对文件做了哪些操作,这是可以通过调用log文件来查看,因为inotify机制在监视文件的同时会将用户对文件的操作写入审计,保证了文件系统的完整性
1.演示目标
通过用户态调用inotify监视机制的接口,对指定的文件或目录添加监视group以及具体监视事件达到为指定目标监视的作用。
2.技术原理
inotify机制是一个Linux操作系统中用来监控文件系统操作的,如读取、写入和创建,并将操作内容写入审计系统的log文件进行记录。
inotify是基于inode节点的,它可以监视文件和目录的变化,为了截获文件系统的变化,inotify机制在文件系统的各个操作函数中加入了hook函数,当文件系统调用了这些操作函数并改变了文件系统中的文件或目录时,就调用hook函数发出相应的事件。文件系统的每个节点都有一个指针inotify_watches,这个指针指向watch(监视)链表。inotify机制的监视就是通过watch实现的。一个watch是一个结构inotify_watch实例,结构inotify_watch含有事件掩码,watch处理器实例等。监视(watch)处理实例是结构inotify_handle实例,这个实例包括事件的处理函数集。当文件系统执行文件的访问操作时,inotify机制hook函数通过文件系统的节点的成员inotify_watches找到watch链表,然后,通过watch找到watch处理实例,再找到事件的处理函数集,调用相应的事件处理函数。
该实验是基于文件系统的inotify监视机制进行监视的,inotify机制可以同时监视一些文件和一些目录下文件状态的变化,如被访问,被修改,在目录上创建文件等.程序通过调用inotify机制的用户态接口:sys_inotify_init,sys_inotify_add_watch,sys_inotify_rm_watch,来实现。
3.环境部署
操作系统:3.5.4
发行版本信息:Ubuntu12.10
编译器:gcc 版本 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1)
编译器:VIM–Vi Improved 7.3
在终端1下运行该程序,然后再打开一个终端2在当前目录下进行操作,创建一个目录test1,此时发现在程序运行的终端下会打印出如图所示:
图3-1:创建目录输出
如图3-1所示,首先打印出有事件发生,然后说明事件是发生在目录下还是文件下,以及发生事件的路径,事件掩码,且该事件在程序中有定义即subfile was created,然后程序继续进行下一轮事件的监视。现在在终端2下打开一个文件,观察终端1发现打印出如图所示:
图3-2:打开文件输出
图3-2中可以看出首先打印有事件发生,然后说明事件是发生在当前目录下的,事件掩码,该事件为文件被打开,正是用户在终端1中的操作。当用户对文件进行修改后终端1会打印出,如图3-3所示:
图3-3:对打开文件进行修改输出
正如图3-3中所示该事件是发生在当前目录下的文件中,操作的对象是文件,操作的事件是File was modified,即文件被写入修改。再来当前目录下的一个文件移动到主目录下,终端1输出如图3-4所示:
图3-4:移动文件输出
从图3-4中可以看出事件发生在当前路径下的文件中,发生的时间为文件被移动,下面再来执行文件系统中常用的操作,删除操作,这里删除一个目录就是在删除图3-1中创建的目录,再来看终端1会有什么输出:
图3-5:删除目录输出
从图3-5中可以明显的看出事件发生在当前目录下,发生的事件为目录被删除。
由此可以看出,该程序实现了应用内核中inotify机制监视文件系统,并将对文件系统的操作信息打印到终端帮助实现文件系统的完整性。
1.对于文件系统调用同步机制后的具体回写机制未作详细分析,回写机制是具体实现将内存中写入磁盘的机制。
2.对于文件系统监视机制中所涉及的审计系统未作详细分析,文件系统监视机制是属于审计系统的一部分。审计是事后认定违反安全规则行为的分析技术,安全审计为管理员在用户违反安全法则时提供及时的警告信息,实现对系统信息的追踪、审查、统计和报告等功能。
责任编辑: