原标题:Linux安全审计机制模块实现分析(12)-核心文件之一audit.c补充
2.4.1.2主要变量及宏定义
intaudit_enabled; //审计系统是否已开启的标志
int audit_pid; //审计后台进程auditd的pid
static intaudit_backlog_limit = 64; //审计缓冲区中的最大消息数
static intaudit_backlog_wait_time = 60 * HZ; //消息等待发送的最大时间
static atomic_t audit_lost = ATOMIC_INIT(0);//丢失的审计消息数目
static struct sock *audit_sock; //审计系统使用的netlink套接字
struct list_head audit_inode_hash[AUDIT_INODE_BUCKETS];//基于节点的规则哈希链表
static struct sk_buff_head audit_skb_queue;//审计netlink套接字缓冲区链表
DECLARE_WAIT_QUEUE_HEAD(kauditd_wait) //kauditd的等待队列
DECLARE_WAIT_QUEUE_HEAD(audit_backlog_wait);//消息发送进程的等待队列
#define AUDIT_BUFSIZ 1024 //审计消息缓冲区的大小
#define AUDIT_OFF0
#define AUDIT_ON1
#define AUDIT_LOCKED2
//以上三个宏是审计系统的三种模式,其中第三个模式是不允许修改审计规则和审计系统的状态
#define AUDIT_DISABLED-1
#define AUDIT_UNINITIALIZED0
#define AUDIT_INITIALIZED1
//以上三个宏表示审计系统的状态。
2.4.1.3结构体定义
struct audit_buffer { //审计缓冲区
struct list_head list;
struct sk_buff *skb; //格式化的netlink套接字缓冲区,准备用于发送审计消息
/*每个进程的审计上下文,包括进程的状态、时间和uid 等,与进程上下文相关,可以为空*/
struct audit_context *ctx;
gfp_t gfp_mask; //为缓冲区分配内存所使用的标识,如:__GFP_WAIT
};
struct audit_reply { //审计应答信息
int pid; //审计消息的目标进程
struct sk_buff *skb; // 存放应答信息的skb.
};
2.4.1.4外部函数
int netlink_unicast(struct sock *ssk, struct sk_buff *skb, u32 pid, int nonblock)
功能:利用netlink套接字实际发送消息的函数。
static inline struct sk_buff *__skb_dequeue(struct sk_buff_head *list)
功能:从套接字缓冲区队列上取一个skb。
void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err)
功能:发送一个套接字应答。
int audit_filter_type(int type)
功能:按照type规则链表进行消息过滤。
static inline __u32 skb_queue_len(const struct sk_buff_head *list_)
功能:求缓冲区队列的长度。
void add_wait_queue(wait_queue_head_t *q, wait_queue_t *wait)
功能:把wait加入等待队列。
void remove_wait_queue(wait_queue_head_t *q, wait_queue_t *wait)
功能:把wait从等待队列移出。
void skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk)
功能:把skb添加到队列list的尾部。
struct sock *netlink_kernel_create(struct net *net, int unit, struct module *module,
struct netlink_kernel_cfg *cfg)
功能:创建一个netlink套接字。
2.4.1.5内部函数
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, ...)
功能:生成并发送审计消息。
责任编辑: