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

2.4.3文件三auditsc.c2.4.3.1 文件描述

kernel/auditsc.c

static void audit_set_auditable(struct audit_context *ctx)

功能:把进程审计上下文的状态设置为可审计的(审计上下文将在系统调用结束时被写出)。

static int audit_filter_rules(struct task_struct *tsk, struct audit_krule *rule, struct audit_context*ctx, struct audit_names *name, enum audit_state *state,bool task_creation)

功能:确定审计上下文中的审计项目是否符合给定的规则(即:这些项目是否应该被审计)

static enum audit_state audit_filter_task(struct task_struct *tsk, char **key)

功能:遍历task规则链表,以确定是否有一条规则要求该进程的某些信息应该被审计。

static enum audit_state audit_filter_syscall(struct task_struct *tsk, struct audit_context *ctx, struct list_head *list)

功能:在系统调用进入或退出时进行规则过滤。

static inline struct audit_context *audit_alloc_context(enum audit_state state)

功能:分配进程审计上下文。在进程创建时,如果进程需要被审计,就调用该函数。

static void audit_log_task_info(struct audit_buffer *ab, struct task_struct *tsk)

功能:将进程的名字以及所有映射到内存的文件的路径信息生成审计消息。

void __audit_syscall_entry(int arch, int major, unsigned long a1, unsigned long a2, unsigned long 3, unsigned long a4)

功能:进入系统调用时执行的函数,把程序的执行信息、审计消息的当前序列号,查询规则链表后获得的对进程的审计项目应采取的动作等信息暂存到审计上下文中。

void __audit_syscall_exit(int success, long return_code)

功能:系统调用结束时调用的函数。如果审计上下文的状态是AUDIT_RECORD_CONTEXT,就将上下文中的信息全部写出。

2.4.3.2主要变量及宏定义

int audit_n_rules; //审计系统中的规则总数

2.4.3.3结构体定义

struct audit_names { //进程执行时的审计项目

struct list_head list;// 用来形成链表audit_context->names_list

const char*name; //当调用getname()时,这个指针指向名字

unsigned longino; //当调用path_lookup()时,把inode信息和dev信息保存下来,以下类似

dev_tdev;

umode_tmode;

uid_tuid;

gid_tgid;

dev_trdev;

u32osid;

struct audit_cap_data fcap; //保存能力数据

unsigned intfcap_ver;

intname_len;//审计项目名字长度

boolname_put;//是否调用__putname()释放名字,如果否,可以在系统调用结束时释放*/

boolshould_free;

};

struct audit_aux_data { //进程审计辅助数据,是所有进程审计辅助数据的基类

struct audit_aux_data*next;

inttype; //数据的类型

};

struct audit_aux_data_execve { //记录程序执行的进程审计辅助数据

struct audit_aux_datad; //继承基类

int argc; //程序执行的参数

int envc; //程序执行的环境变量

struct mm_struct *mm; 程序执行的内存映射

};

struct audit_context { //进程审计上下文

intdummy;//必须是第一个元素

intin_syscall;//进程是否在系统调用中

enum audit_state state, current_state; //审计状态

unsigned intserial; //审计消息的序列号

intmajor; //系统调用号

struct timespecctime; // 系统调用进入的时间

unsigned longargv[4]; /* 系统调用参数*/

longreturn_code;/* 系统调用返回码*/

u64prio; /*审计消息优先级*/

intreturn_valid; /* 返回是否有效*/

struct audit_names preallocated_names[AUDIT_NAMES]; /*审计项目的预分配链表*/

intname_count; /*审计项目的总数*/

struct list_head names_list;/* 所有的审计项目*/

char *filterkey;/*触发记录的关键词*/

struct pathpwd; /*当前工作路径*/

struct audit_context *previous; /* 上一个审计上下文,系统调用嵌套时使用*/

struct audit_aux_data *aux; /*进程审计辅助数据*/

struct sockaddr_storage *sockaddr;

/* 以下是进程的有关数据*/

pid_tpid, ppid;

uid_tuid, euid, suid, fsuid;

gid_tgid, egid, sgid, fsgid;

unsigned longpersonality;

intarch;

pid_ttarget_pid;

uid_ttarget_auid;

uid_ttarget_uid;

unsigned inttarget_sessionid;

u32target_sid;

chartarget_comm[TASK_COMM_LEN];

……

};

2.4.3.4外部函数

struct sk_buff *audit_make_reply(int pid, int seq, int type, int done,

int multi, const void *payload, int size)

功能:生成应答消息。

2.4.3.5内部函数

static void audit_set_auditable(struct audit_context *ctx)

功能:把进程审计上下文的状态设置为可审计的(审计上下文将在系统调用结束时被写出)。

static int audit_filter_rules(struct task_struct *tsk, struct audit_krule *rule, struct audit_context*ctx, struct audit_names *name, enum audit_state *state,bool task_creation)

功能:确定审计上下文中的审计项目是否符合给定的规则(即:这些项目是否应该被审计)

static enum audit_state audit_filter_task(struct task_struct *tsk, char **key)

功能:遍历task规则链表,以确定是否有一条规则要求该进程的某些信息应该被审计。

static enum audit_state audit_filter_syscall(struct task_struct *tsk, struct audit_context *ctx, struct list_head *list)

功能:在系统调用进入或退出时进行规则过滤。

static inline struct audit_context *audit_alloc_context(enum audit_state state)

功能:分配进程审计上下文。在进程创建时,如果进程需要被审计,就调用该函数。

static void audit_log_task_info(struct audit_buffer *ab, struct task_struct *tsk)

功能:将进程的名字以及所有映射到内存的文件的路径信息生成审计消息。

void __audit_syscall_entry(int arch, int major, unsigned long a1, unsigned long a2, unsigned long 3, unsigned long a4)

功能:进入系统调用时执行的函数,把程序的执行信息、审计消息的当前序列号,查询规则链表后获得的对进程的审计项目应采取的动作等信息暂存到审计上下文中。

void __audit_syscall_exit(int success, long return_code)

功能:系统调用结束时调用的函数。如果审计上下文的状态是AUDIT_RECORD_CONTEXT,就将上下文中的信息全部写出。

责任编辑:

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

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

    2详细分析 2.1模块功能描述 本模块包含以下几个子系统: (1) 审计消息的生成和发送子系统: (2) 审计消息过滤子系统: (3) 审计系统初始化子系统: (4) 进程审计子系统: (5) 文件系 ...

  2. linux中probe函数中传递的参数来源(上)

    点击打开链接 上一篇中,我们追踪了probe函数在何时调用,知道了满足什么条件会调用probe函数,但probe函数中传递的参数我们并不知道在何时定义,到底是谁定义的,反正不是我们在驱动中定义的(当然 ...

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

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

  4. 需要在函数中传递的变量

    要在函数中传递的变量, 大致可以分为,单个数值的,一维数值的,或者二维数值的, 1)单个数值,  形如:float m_fElement;  (1) 在函数中定义float *m_fElement,调 ...

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

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

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

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

  7. 以下是一个使用 VBA 的例子,演示了 ByVal 和 ByRef 的区别,以及如何在函数中传递参数和返回值。

    以下是一个使用 VBA 的例子,演示了 ByVal 和 ByRef 的区别,以及如何在函数中传递参数和返回值: Sub Example()Dim x As Integer, y As Integerx ...

  8. c语言在函数中传递指针,[求助]关于文件指针在函数中传递的问题

    [求助]关于文件指针在函数中传递的问题 我写的一个程序中文件指针在各函数间传递.请各位整理一下思路. /*=============================================== ...

  9. 在setInterval函数中传递参数

    本文翻译自:Pass parameters in setInterval function Please advise how to pass parameters into a function c ...

最新文章

  1. 提供第三种代码生成方式——通过自定义BuildProvider为ASP.NET提供代码生成
  2. android stadio 快捷键最好的材料 android stadio大全 最牛逼的android stadio快捷键
  3. vs2015配置opencv3.3
  4. 如何用 Python 实现超级玛丽的人物行走和碰撞检测?
  5. 1.1.0-简介-P12-分布式锁的解决方案(二)
  6. css文字竖直显示_CSS属性设置 -- 盒子模型
  7. 算法笔记_101:蓝桥杯练习 算法提高 身份证号码升级(Java)
  8. 幼儿识字软件测试自学,2016幼儿识字APP哪家强?最新测评出炉!
  9. 2007年会计从业资格练习第三章会计科目和账户
  10. 什么是摄像头自带wifi热点
  11. 【算法】两矩形相交的判定
  12. uniapp得到用户当前定位以及用户选择位置
  13. 软件工程 3:模块化设计
  14. html 字体模糊,详解css3使用transform出现字体模糊的解决办法
  15. 宽和窄俯卧撑哪个更难_宽距俯卧撑与窄距俯卧撑,练出来的肌肉有什么差距?...
  16. 这么设置USB Copy数据就能轻松备份到NAS
  17. 英语总结系列(二十三):Baby上海一月游
  18. .net refit post请求body 无法序列化[JsonProperty(“A“)]大写
  19. Unity 烘焙问题
  20. 关于GOG Galaxy 2.0提示“无法下载所需文件”问题的解决方案:

热门文章

  1. java输出一个Int数据的补码
  2. MapReduce的优点
  3. 如何将SP1集成到Office 2007安装包
  4. mysql 白皮书_mysql企业版 《 MySQL企业版中文白皮书 》.cn.doc
  5. java 线性计算_计算线性指数Tensorflow
  6. 【学习笔记】系统观核心管理理论
  7. 【转:SAP学习篇】Fiori 的开发工具
  8. win7 64位数据库连接问题:在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
  9. SAP ABAP如何隐藏你写的程序代码
  10. ORA-00257: archiver error