CentOS下audit的介绍


=Start=

缘由:

Linux 审计系统(audit)为追踪系统中与安全相关的信息提供了途径。基于预配置原则,audit将生成日志项从而记录尽可能多的在系统中发生的事件。这一信息对执行关键任务的环境尤其重要,它可以确定那些违反安全策略的人以及他们的行为。audit不会为系统提供额外的安全保护;相反,它只是用来发现系统中违反安全策略的行为。通过额外的措施例如 SELinux 可以进一步地防止这些违反行为。

正文:

参考解答:

audit审计系统主要由以下几部分组成:

  • audit内核模块(kauditd);
  • audit用户态守护进程(auditd);
  • audit用户态实用工具(auditctl/audispd/aureport/ausearch/…);
# ps aux | grep --color "audit"
root       613  0.0  0.0      0     0 ?        S     2016   0:17 [kauditd] #用中括号括起来的进程都是内核进程/线程
root      2471  0.0  0.0  93156   896 ?        S<sl  2016   1:03 auditd
#上一行中的「S<sl」的含义解读:S表示进程正在睡眠,<表示具有较高的优先级,s表示多进程l表示多线程
#
# which auditctl
/sbin/auditctl
#
# ls -lt /sbin/au*
-rwxr-x--- /sbin/audispd  #转发事件通知给其他应用程序,而不是写入到审计日志文件中。
-rwxr-x--- /sbin/auditctl #即时控制审计守护进程的行为的工具,比如如添加规则等等。
-rwxr-x--- /sbin/auditd
-rwxr-xr-x /sbin/aureport #查看和生成审计报告的工具
-rwxr-xr-x /sbin/ausearch #查找审计事件的工具。
-rwxr-x--- /sbin/autrace  #用于跟踪进程的工具
-rwxr-x--- /sbin/augenrules #用于生成和更新审计规则的工具(一个bash脚本)

Linux的audit审计系统提供了一种记录系统安全信息的方法,为系统管理员在用户违反系统安全规则时提供及时的警告信息。内核其他线程通过内核审计API写入套接字缓冲区队列audit_skb_queue中,内核线程kauditd通过netlink机制(NETLINK_AUDIT)将审计消息定向发送给用户态的审计后台auditd的主线程auditd主线程再通过事件队列将审计消息传给审计后台的写log文件线程,写入log文件。另一方面,审计后台还通过一个与套接字绑定的管道将审计消息发送给audispd应用程序,可把事件传送给其他应用程序做进一步处理

下面用一张图说明一下audit审计系统的大体架构:

RedHat官方给出的那个架构图觉得没有上面这张图清晰易懂,就不放了,感兴趣的可以自己去看看。

参考链接:

第 5 章 系统审核
https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/Security_Guide/chap-system_auditing.html

linux服务之audit
http://www.cnblogs.com/createyuan/p/3861149.html

linux Audit 介绍【架构篇】
http://blog.chinaunix.net/uid-20786165-id-3166587.html

audispd – Unix,Linux命令
http://tutorialspoint.howtolib.com/unix_commands/audispd.htm
http://www.man7.org/linux/man-pages/man8/audispd.8.html

=END=


《 “CentOS下audit的介绍” 》 有 9 条评论

  1. `
    Audit框架的核心主要是由内核源代码树中的 audit.c / auditsc.c / audit_tree.c / audit_watch.c 和 auditfilter.c 这5个文件来实现的。Audit子系统提供可由内核其他部分使用的功能,可以使用审计功能。这些功能已经被导出,允许内核的其他部分(内部或外部)访问,例如可加载模块或Linux安全模块。
    为了记录内核中的事件,开发人员只需要调用 audit_log() 函数,该函数将消息交给Linux审计系统进行处理。从源代码中可以看出,audit_log()函数是一个方便的函数,它主要包含 audit_log_start() / audit_log_vformat() 和 audit_log_end() 函数,这些函数负责执行实际的日志记录。

    每个文件的功能和目的的简单说明:
    audit.c
        基本功能,如初始化,创建netlink套接字,审计日志生成和与用户空间的通信
    auditsc.c
        系统调用审计功能
    audit_tree.c
        用于管理框架内部使用的数据结构的辅助功能
    audit_watch.c
        执行监控功能(文件规则)
    auditfilter.c
        执行过滤器的功能(系统调用规则)
    `

  2. lkm入门&netlink通信示例
    https://blog.spoock.com/2019/11/25/lkm/
    `
    1. 说明
    2. 基本介绍
    3. 内核模块和应用程序的区别
    4. LKM入门编写
    4.1. 简单的lkm
    4.2. 查看运行结果
    4.2.1. modinfo查看信息
    4.2.2. insmod 加载模块
    4.2.3. 查看模块运行信息
    5. 用户态通过netlink与LKM通信
    5.1. 示例程序
    5.2. 代码说明
    5.2.1. netlink_kernel_create
    5.2.2. netlink type
    6. 总结
    7. 参考
    `

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注