=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官方给出的那个架构图觉得没有上面这张图清晰易懂,就不放了,感兴趣的可以自己去看看。
参考链接:
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 条评论
审计事件字段
https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/Security_Guide/app-Audit_Reference.html#sec-Audit_Events_Fields
`
pid/ppid/uid/gid/…
`
审计记录类型
https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Audit_Record_Types.html
`
当用户登录时被触发
当服务启动时被触发
…
`
Linux Note – auditd
http://debugo.com/auditd/
审计系统在内核的实现-基本框架
http://edsionte.com/techblog/archives/4562
The Linux Audit Framework
https://doc.opensuse.org/documentation/leap/security/html/book.security/part.audit.html
https://doc.opensuse.org/documentation/leap/security/html/book.security/cha.audit.comp.html #Audit整体架构图
https://doc.opensuse.org/documentation/leap/security/html/book.security/cha.audit.setup.html
https://doc.opensuse.org/documentation/leap/security/html/book.security/cha.audit.scenarios.html
https://doc.opensuse.org/documentation/leap/security/html/book.security/cha.audit.moreinfo.html
site:doc.opensuse.org inurl:audit
Audit
http://jaseywang.me/2011/04/27/audit/
Config for auditd.conf
http://jaseywang.me/2011/04/25/config-for-auditd-conf/
通过 execv(snoopy) 来做用户行为 audit
http://jaseywang.me/2014/09/26/%E9%80%9A%E8%BF%87-execvsnoopy-%E6%9D%A5%E5%81%9A%E7%94%A8%E6%88%B7%E8%A1%8C%E4%B8%BA-audit/
http://thomasknowles.blogspot.ca/2011/03/linux-file-access-auditing.html
http://www.cyberciti.biz/tips/linux-audit-files-to-see-who-made-changes-to-a-file.html
`
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
执行过滤器的功能(系统调用规则)
`
审计系统在内核的实现-基本框架
https://mp.weixin.qq.com/s/EulDVTaplAi0e5WsRK8LUA
http://people.redhat.com/sgrubb/audit/
深入Linux内核架构
http://book.douban.com/subject/4843567/
如何使用 Linux 审计系统(Linux Audit System)以及 ELK 监测系统状态
http://blog.thinkst.com/2018/05/using-linux-audit-system-to-detect.html
基于Linux连接器的审计进程事件实现方案
https://blog.didiyun.com/index.php/2018/12/14/linux-3/
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. 参考
`