开启linux内核层审计,Linuxn安全审计机制模块实现分析(11)-文件系统审计举例及核心文件分析...

原标题:Linuxn安全审计机制模块实现分析(11)-文件系统审计举例及核心文件分析

4.文件系统审计举例

下面以创建一个文件为例,说明审计系统对这个文件系统变化审计的过程。

创建文件调用open系统调用,open调用在调用vfs_create函数时,钩子函数fsnotify_create截获到文件系统发生了新建文件的变化,从而引发FS_CREATE事件,open系统调用的调用钩子函数fsnotify_create的调用层次图如下所示:

4dfbe3d256bf18c4b5e93ee233a9cef3.png

图 2-26 fsnotify_create的被调层次图

fsnotify_create的调用层次图如下:

3538c6d4148049e6e6973fac8c306d23.png

图2-27fsnotify_create的调用层次图

fsnotify_create除了生成FS_CREATE事件,并调用审计监视实例audit_watch_group的事件处理函数audit_watch_handle_event处理事件外,还要为父目录收集新将生成文件的inode信息,并将这些信息写入进程的审计上下文中。为父目录收集新生成文件的inode信息的函数是audit_inode_child。

2.4核心文件分析2.4.1文件一 audit.c2.4.1.1 文件描述

kernel/audit.c

static int audit_set_rate_limit(int limit, uid_t loginuid, u32 sessionid, u32 sid)

功能:设置消息发送的最大速率。

static int audit_set_backlog_limit(int limit, uid_t loginuid, u32 sessionid,u32 sid)

功能:设置消息缓冲区的最大消息数。

static int audit_set_enabled(int state, uid_t loginuid, u32 sessionid, u32 sid)

功能:开启内核审计功能。

static void audit_printk_skb(struct sk_buff *skb)

功能:通过printk发送审计消息给日志文件。

static void kauditd_send_skb(struct sk_buff *skb)

功能:kauditd线程通过netlink机制发送skb中的审计消息。

static int kauditd_thread(void *dummy)

功能:kauditd线程的线程函数。

static int audit_prepare_user_tty(pid_t pid, uid_t loginuid, u32 sessionid)

功能:为用户准备tty.

struct sk_buff *audit_make_reply(int pid, int seq, int type, int done, int multi, const void *payload, int size)

功能:给用户空间返回一个审计应答消息。

static int audit_send_reply_thread(void *arg)

功能:audit_send_reply线程的线程函数

static void audit_send_reply(int pid, int seq, int type, int done, int multi, const void *payload, int size)

功能:经由netlink套接字发送一个审计消息应答。

static int audit_netlink_ok(struct sk_buff *skb, u16 msg_type)

功能:判断skb中是否是合法的审计消息。

static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)

功能:从netlink套接字缓冲区接收一条消息并处理消息。

static void audit_receive_skb(struct sk_buff *skb)

功能:从skb接收一条消息。

static void audit_receive(struct sk_buff *skb)

功能:从skb接收一条消息

static int __init audit_init(void)

功能:内核审计系统初始化。

static int __init audit_enable(char *str)

功能:根据内核引导时传入的命令行参数设置审计系统的状态。

static void audit_buffer_free(struct audit_buffer *ab)

功能:释放审计缓冲区。

static struct audit_buffer * audit_buffer_alloc(struct audit_context *ctx, gfp_t gfp_mask, int type)

功能:分配一个审计缓冲区。

unsigned int audit_serial(void)

功能:分配一个审计消息序列号。

static inline void audit_get_stamp(struct audit_context *ctx, struct timespec *t, unsigned int *serial)

功能:获得时间戳。

struct audit_buffer *audit_log_start(struct audit_context *ctx, gfp_t gfp_mask, int type)

功能:审计消息发送函数

static inline int audit_expand(struct audit_buffer *ab, int extra)

功能:扩展审计缓冲区的空间。

static void audit_log_vformat(struct audit_buffer *ab, const char *fmt, va_list args)

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

void audit_log_format(struct audit_buffer *ab, const char *fmt, ...)

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

void audit_log_end(struct audit_buffer *ab)

功能:发送审计缓冲区中的消息。

void audit_log(struct audit_context *ctx, gfp_t gfp_mask, int type, const char *fmt, ...)

功能:生成并发送审计消息。

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值