2.3.5.2文件系统变化的审计 审计系统使用fsnotify机制监视文件系统的变化,并将监视的结果通过审计系统记录到log文件中。 1.审计监视的数据结构 审计监视结构audit_watch用来存放监视文件系统变化的相关规则信息。审计规则链表AUDIT_FILTER_WATCH用来存储审计监视的规则。每条审计规则结构audit_krule含有审计监视结构指针watch,审计规则结构audit_krule与审计监视结构指针相关的部分列出如下: structaudit_krule{ ...... structaudit_watch*watch; ...... }; 审计监视结构audit_watch列出如下 structaudit_watch{ atomic_tcount;/*引用数*/ char*path;/*加watch的路径*/ dev_tdev;/*文件或目录所在的设备*/ unsignedlongino;/*文件的节点号*/ structaudit_parent*parent;/*文件的父目录*/ structlist_headwlist;/*用于挂接到parent-watches链表上*/ structlist_headrules;/*watch所在的规则*/ }; 为了快速地找到一个文件的审计监视信息,fsontify以目录为组织单位管理审计监视信息,每个被监视的文件的fsnotify_mark统一存放在父目录inode的I_fsnotify_marks链表上,要查找监视信息,先要找到包含该监视文件的父目录监视信息结构,然后再逐个查找该目录中的每个watch以获得需要的审计监视信息。这样做可以充分利用Linux现有的目录查询机制,快速地父目录的路径信息,再在父目录的范围内快速地找到审计监视信息。描述审计监视父目录信息的是audit_parent结构,父目录下每个文件都可能对应一个审计监视规则,因此,结构audit_parent提供了链表指针watches存放父目录下文件的审计监视结构audit_watch实例。 该结构列出如下: structaudit_parent{ structlist_headwatches;/*存放该目录下的审计监视结构audit_watch实例*/ structfsnotify_markmark;/*存放该目录下的所有mark(fsnotify_mark中有链接域)*/ }; 该结构是审计系统和fsnotify机制之间的桥梁,当要查找一个文件的监视信息时,首先找到该文的父目录,然后在父目录所管理的mark中查找被审计的mark,再将此mark换成audit_parent结构,就找到了通向监视审计信息的大门。 下图是fsnotify机制的结构fsnotify_mark、fsnotify_mark与审计系统结构audit_krule、audit_watch、audit_parent之间的关系图。 图2-22fsnotify_mark、fsnotify_mark与audit_krule、audit_watch、audit_parent之间的关系 2.添加审计监视规则 审计应用程序auditctl可使用-w或-W选项添加或删除文件系统监视规则,这两个选项说明如下: -wpath为文件系统对象path插入一个watch(监视)。不支持匹配符 -Wpath移去文件系统对象path上的watch。 添加与删除审计监视规则的过程是相反的过程,下面只分析添加审计监视规则的机制。当审计应用程序auditctl添加审计监视规则时,审计系统调用函数audit_add_watch在节点和规则实例krule中加入watch。 (1)audit_add_watch接口功能说明 函数名:audit_add_watch 参数:krule为审计规则,list为规则链表 返回值:如果添加成功返回0否则返回错误码。 功能:在节点和规则实例krule中加入审计监视信息。 (2)函数分析 它首先找到规则指明的被监视文件父目录的路径信息,然后在父目录的inode的mark链表中查找匹配监视处理实例audit_watch_group的mark,如果没找到,就调用函数audit_init_parent初始化parent和mark。然后通过audit_parent结构,建立起parent、watch、和mark及规则之间的关联关系, watch加入节点后,监视文件系统变化的hook函数就可以调用watch的的监视处理函数,hook函数通过watch找到watch的父目录监视信息结构parent,通过parent找到监视处理实例audit_watch_group,audit_watch_group含有审计文件系统变化的记录函数,记录函数将文件系统变化信息通过审计系统写入到log文件中。该函数的调用层次图如下: 图2-23audit_add_watch函数调用层次图 赞赏 人赞赏 北京比较好的实惠的白癜风医院白癜风的防治转载请注明原文网址:http://www.gzdatangtv.com/bcyytx/5684.html |