2详细分析

2.1模块功能描述

本模块包含以下几个子系统:

(1) 审计消息的生成和发送子系统;

(2) 审计消息过滤子系统;

(3) 审计系统初始化子系统;

(4) 进程审计子系统;

(5) 文件系统审计子系统。

第(1)个子系统的支撑函数是audit_log、audit_log_start、audit_log_format和audit_log_end,该部分的这几个函数,作为内核函数中的审计API在内核其它部分中广泛地被调用。

函数功能说明:

audit_log:产生一条审计记录。

Audit_log_start:申请审计缓冲区,如果任务当前在系统调用中,系统调用被标识为可审计的,并在系统调用退出时产生一条审计记录。

audit_log_format:格式化一个消息并放入审计缓冲区。

audit_log_end:将格式化好的netlink套接字缓冲区中的审计记录数据发送给用户空间的后台进程,如果审计后台进程存在,使用 netlink机制传输数据,由审计后台将套接字缓冲区中的审计记录数据写入审计文件audit.log中;如果审计后台不存在,使用 printk记录数据,然后由日志后台进程将数据写入到日志文件中。

第(2)个子系统的支撑函数是:audit_filter_user、audit_filter_type、audit_filter_user_rules、audit_receive_filter、audit_add_rule、audit_list_rules、audit_find_rule和audit_del_rule。

函数功能说明:

audit_filter_user:根据用户空间传来的用户身份信息,在用户信息过滤链表上该用户应满足的规则,并根据规则设置的动作(never或always)给出是否对该用户的行为产生审计消息。

audit_filter_type:将审计事件值与规则域的值进行比较,返回逻辑比较结果,若审计事件值符合规则域的定义,则表示不需要查看这个审计事件,返回值为1,否则为0。

audit_filter_user_rules:由audit_filter_user调用。在规则域数组中找出该用户的规则域,并根据规则规定的动作给出是否需要对该用户的行为进行审计的结论。

audit_receive_filter函数: audit_receive_filter管理规则链表数组 audit_filter_list,它负责增加或删除链表上的规则,还负责列出链表上的规则,并传回给应用程序auidtctl。

audit_add_rule:在过滤链表上添加一条规则。

audit_list_rules:列出所有过滤链表上的所有规则。

audit_find_rule:在过滤链表上查找一条规则。

audit_del_rule:在过滤链表上删除一条规则

第(3)个子系统的支撑函数是:audit_init,audit_enable和audit_watch_init。

函数功能说明:

audit_init:在系统引导期间执行的审计系统主要初始化函数,包括创建netlink套接字缓冲区队列,注册套接字接收函数,初始化基于节点的规则链表。

audit_enable:根据内核引导时的命令行参数设置审计系统的状态,参数audit=1表示开启,audit=0表示禁用。

audit_watch_init:创建并初始化一个监视处理实例audit_watch_group,用于处理文件系统监视事件。

第(4)个子系统的支撑函数是:audit_syscall_entry,audit_syscall_exit和大量的进程审计钩子函数。

audit_syscall_entry:在系统调用的入口处被调用,将系统调用的信息先暂存在进程的审计上下文中。

audit_syscall_exit:在系统调用的退出处被调用,将审计上下文中所有本次系统调用期间产生的有关进程的各类信息,符合exit规则链表上规则的信息全部写出(发送给用户)。

第(5)个子系统的支撑函数是:

audit_add_watch:在规则实例 krule中加入监视实例,在inode节点中打上监视的标记,并为所监视的事件注册事件处理。

audit_watch_log_rule_change:生成关于“审计监视信息改变”的审计消息。

audit_watch_handle_event:审计系统收到文件系统变化的事件时进行事件处理的函数。它根据收到的事件类型,更新相关的规则(主要时watch实例的inode信息),并生成关于“watch信息发生变化“的审计记录。

audit_update_watch:更新watch所监视的事件,更新watch中的索引节点信息,并生成关于规则的watch信息发生变化的审计记录。

audit_remove_watch:删除一个审计监视实例。

audit_get_watch:获取一个审计监视实例。

audit_find_parent:查找被监视文件的父目录信息。

audit_add_to_parent:首先在父目录下的所有文件监视实例中查找,确定规则描述的监视文件是否在这些文件当中,如果找到,将该文件的监视实例交给规则实例,这样,该文件发生变化时,审计系统将会生成相关的审计信息。如果没有找到,说明在该文件还没有监视实例,把监视实例添加到audit_parent的watches链表上。

2.2模块内部函数调用关系

图2-1 audit_log等函数间关系

图2-2  audit_receive_filter等函数间关系

图2-3 audit_add_watch等函数间关系

图2-4 audit_watch_handle_event等函数间关系

linux审计原理,Linux安全审计机制模块实现分析(1)相关推荐

  1. 在linux c 以结构体形式写文件 结构体参数如何在函数中传递,Linux安全审计机制模块实现分析(16)-核心文件之三auditsc.c文件描述及具体变量、函数定义...

    原标题:Linux安全审计机制模块实现分析(16)-核心文件之三auditsc.c文件描述及具体变量.函数定义 2.4.3文件三auditsc.c2.4.3.1 文件描述 kernel/auditsc ...

  2. linux注册函数机制,Linux可信计算机制模块详细分析之函数实现机制(1)字符设备驱动...

    原标题:Linux可信计算机制模块详细分析之函数实现机制(1)字符设备驱动 2.3 函数实现机制 2.3.1 Linux 字符设备驱动 在linux 3.5.4中,用结构体cdev描述字符设备,cde ...

  3. Linux保护文件实现,Linux完整性保护机制模块实现分析(1)

    原标题:Linux完整性保护机制模块实现分析(1) 2 详细分析2.1 模块功能描述 文件系统完整性模块包含四种机制:监控磁盘机制.同步机制.检查修复文件系统机制.监视文件系统机制. 1.监控磁盘机制 ...

  4. linux源码acl,Linux自主访问控制机制模块详细分析之posix_acl.c核心代码注释与acl.c文件介绍...

    原标题:Linux自主访问控制机制模块详细分析之posix_acl.c核心代码注释与acl.c文件介绍 2.4.4.6 核心代码注释 1 posix_acl_permission() int(stru ...

  5. linux 随机数原理,Linux随机数生成器的原理和缺陷.pdf

    第17卷.第10期 计算机技术与发展 vol.17No.10 2007年10月 COMPUTERTECHNOLOGYANDDEVELOPMENT Oct.2007 Linux随机数生成器的原理及缺陷 ...

  6. linux随机数原理,Linux随机数生成器的原理与缺陷.pdf

    第17卷.第10期 计算机技术与发展 vol.17No.10 2007年10月 COMPUTERTECHNOLOGYANDDEVELOPMENT Oct.2007 Linux随机数生成器的原理及缺陷 ...

  7. linux shell 原理,linux下shell的工作原理

    linux下shell的工作原理 2009-12-8 10:19:53   出处:https://www.yqdown.com shell是用户和Linux操作系统之间的接口.Linux中有多种she ...

  8. linux bonding 原理,Linux bonding 之balance-alb 原理介绍及其实现

    Linux bonding 之balance-alb 原理介绍及其实现 要求: 首先要安***onding driver 和 ifenslave.bonding driver 是实现网卡绑定的软件基础 ...

  9. linux bonding 原理,linux的bonding技术

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? bonding技术 参考1 参考2 参考3 bonding(绑定)是一种linux系统下的网卡绑定技术,可以把服务器上n ...

最新文章

  1. LaneATT调试笔记
  2. 上交大张拳石:深度学习可解释性,从百家争鸣到合众归一
  3. 学习 WCF (1)--基础篇
  4. springcloud微服务实战 学习笔记五 Hystrix服务降级 Hystrix依赖隔离 断路器
  5. 观点:Linux 上的杀毒软件
  6. json 查询 java_怎样在java中查询mysql得到如下的json格式的结果?
  7. 130_传析阅管理系统accdb64位版本
  8. ubuntu 以太网已连接但是无法联网_5G物联网掀起工业自动化新高潮 连接器需求巨大...
  9. Spyder中出现IndentationError:unindent does not match any outer indentation level错误
  10. css面试题手写九宫格
  11. 基于多尺度稀疏表示的视网膜OCT图像阴影修复
  12. linux如何释放swap空间,释放linux的swap内存
  13. [转载] 晓说——第25期:看美国系列之“两极分化的黑人”
  14. 皮肤样本微生物的检测介绍
  15. 引才!博士60万、硕士35万、本科28万,沿海城市
  16. 超级玛丽2号max即将停售定期?是谣言还是确有其事,有啥影响
  17. 八大行业Hadoop大数据应用回顾和展望
  18. 计算机毕业设计Java服装连锁店后台管理系统(源码+系统+mysql数据库+lw文档)
  19. Soul-入门,安装部署单机版
  20. 2020 国内公司前端团队都在搞些什么?

热门文章

  1. error: dereferencing pointer to incomplete type
  2. CentOS_7 MongoDb安装使用
  3. rsync使用sudo权限
  4. 如何在centos7上网卡名称回归传统
  5. 为什么Bugs没有被修复?
  6. Linux 性能分析的前 60 秒
  7. DOCTYPE声明的几种类型
  8. [转载]TFS与Project、Excel同步
  9. 【源代码】基于Android和蓝牙的单片机温度採集系统
  10. nginx location 配置详细解释