audit子系统利用netlink套接字作为它的用户态空间和内核空间的接口。在auditd或其他使用audit的用户态应用中有如下语句
这表示打开一个域为NETLINK协议为NETLINK_AUDIT的套接字。套接字缺乏自主访问控制,在强制访问控制(比如SELinux)不生效的情况下,这条语句总会成功。在向audit的套接字写入消息时,在内核代码中会根据消息类型判断进程需要的能力。代码如下:
netlink套接字作为audit子系统在内核和用户态之间的接口,主要用于两类工作。一类是传递audit消息,既可以是内核向用户态传递,也可以是用户态向内核传递。如sshd进程就向内核传递用户登录的审计消息。内核对这类消息不做处理,直接转发给auditd进程。另一类是对内核audit子系统进行控制,如注册auditd进程,修改audit规则,调整内核audit缓冲区参数等。向内核传递第一类消息需要CAP_AUDIT_WRITE权限,传递第二类消息需要CAP_AUDIT_CONTROL权限。(www.xing528.com)
即使没有用户态守护进程auditd,内核audit子系统也能工作,它将不通过netlink套接字送出消息,而是改为直接调用printk。相应地,audit消息就会出现在/proc/kmsg中。看下面代码:
此外,与audit相关的内核和用户态接口还包括一个proc伪文件系统的文件:/proc/[pid]/loginuid。它用于修改进程的loginuid。loginuid就是进程的task_struct中的auid,它是audit子系统引入到内核的,用于记录进程的登录id。loginuid/auid不随setuid等系统调用改变,通过它可以更好地跟踪一个进程的行为。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。