2.2.2 用户空间审计系统应用程序
在用户空间,审计系统由auditd、audispd、auditctl、autrace、ausearch和aureport等应用程序组成。
审计后台auditd应用程序通过netlink机制从内核中接收审计消息,然后,通过一个工作线程将审计消息写入到审计日志文件中,其中,还有一部分消息通过消息分发后台进程dispatcher调用syslog写入日志系统。
下面分别说明这些应用程序的功能。
1.审计后台auditd
在用户空间,审计系统通过auditd后台进程接收内核审计系统传送来的审计信息,将信息写入到/var/log/audit/audit.log 中,audit.log的路径可在/etc/auditd.conf 中指定。
![]() |
| 图2-3 Linux审计系统子系统之间通信 |
当auditd没有运行时,内核将审计信息传送给 syslog,这些消息通常保存在/var/log/messages文件中,可以用dmesg命令查看。
如果要启用内核中的审计功能,必须在系统启动时将audit=1传递给内核。也可以在运行时,使用下列命令来启用内核审计功能:
auditctl -e 1 |
审计系统后台应用程序auditd是Linux审计系统的用户空间部件,它负责将审计记录写入到硬盘中。ausearch或aureport工具用来查看写在文件中的审计记录,auditctl工具用来设置审计规则。系统启动时,auditctl读取/etc/audit.rules中的规则,审计后台可以通过auditd.conf文件定制配置。
运行auditd后台的命令如下:
auditd [ -f ] |
其中,选项-f表示让auditctl在前台运行,以方便调试,消息可以直接输出到stderr,而不是输出到log系统。
用于配置auditd后台的文件说明如下:
/etc/auditd.conf用于auditd后台的配置文件。 /etc/audit.rules启动时装载的审计规则。 |
2.auditctl
工具auditctl控制行为、得到状态、从内核审计系统增加或删除规则。命令格式如下:
auditctl [options] |
工具auditctl的命令行选项(options)很多,例如:-e [0|1]表示停止或启动内核审计功能;-a表示将规则追加到链表;-S表示系统调用号或名字;-F表示规则域。
工具auditctl设置规则的样例如下:
//查看程序所有的系统调用 auditctl -a entry,always -S all -F pid=1005 //查看指定用户打开的文件 auditctl -a exit,always -S open -F auid=510 //查看不成功的open系统调用 auditctl -a exit,always -S open -F success!=0 设置规则和显示规则的命令样例列出如下: ^-^$ auditctl -a entry,always -S all -F pid=1005 ^-^$ auditctl -l LIST_RULES: entry,always pid=1005 (0x3ed) syscall=all |
工具auditctl的选项说明如表2-1所示。
表2-1 工具auditctl的选项说明
|
选 项 名 |
选项的值 |
说 明 |
|
-b <backlog> |
|
设置内核允许的缓冲区数,默认值为64 |
|
-e [0|1] |
|
关闭或启动内核审计系统 |
|
-f [0..2] |
|
设置失败标识0=silent 1=printk 2=panic,默认值为1。设置内核如何处理临界错误,如:backlog限制超出、内存错误等 |
|
-h |
|
帮助信息 |
|
-i |
|
当从文件中读取规则时忽略错误 |
|
-l |
|
列出所有的规则,每行一条规则 |
|
-k <key> |
|
设置审计规则上的过滤关键词key,key是不超过32字节长的任意字符串,它能唯一鉴别由watch产生的审计记录 |
|
-m text |
|
仅由root用户发送用户空间消息到审计系统。为文件系统watch设置许可过滤器。r=read,w=write,x=execute,a=attribute change。这些许可不是文件的标准许可,而是系统调用使用的,read和write系统调用将忽略这种设置,否则它们将淹没log |
|
-r <rate> |
|
设置每秒传输的消息数限制,默认值为0,表示无限制 |
|
-R <file> |
|
从file文件中读取规则 |
|
-s |
|
报告状态 |
|
-a <l,a> |
|
追加规则到l链表,a表示规则的动作 |
|
有效链表名l |
task |
追加规则到每个任务链表AUDIT_FILTER_TASK 。域应用任务创建时的uid、gid等 |
|
entry |
追加规则到系统调用进入链表AUDIT_FILTER_ENTRY,用于决定进入到系统调用时是否创建审计事件 | |
|
exit |
追加规则到系统调用退出链表AUDIT_FILTER_EXIT 。用于决定退出系统调用时是否创建审计事件 | |
|
user |
追加规则到用户消息过滤链表AUDIT_FILTER_USER ,内核在转播用户空间产生的事件到审计后台之前,用这个链表过滤这些事件。仅域为uid、auid、gid和pid时有效 | |
|
exclude |
用于过滤不想看到的事件,对应内核消息过滤链表AUDIT_FILTER_TYPE | |
|
规则的有效动作a |
never |
不产生审计记录 |
|
always |
分配一个审计上下文,在系统调用退出时填充 | |
|
-A <l,a> |
|
添加规则到l链表头,动作为a |
|
-d <l,a> |
|
从带有a动作的l链表删除规则 |
|
-D |
|
删除所有的规则和watch |
|
-S [系统调用名或号|all] |
|
如果程序使用指定的系统调用,则它启动一项审计记录。如果给出域规则而没有指定系统调用,它将默认为所有系统调用 |
续表
|
选 项 名 |
选项的值 |
说 明 |
|
-F [n=v | n!=v | n<v | n>v | n<=v | n>=v] |
|
创建一个规则域:名字、操作、值。可以单个命令行传递最多64个域。每个域必须启动一个审计记录。可支持6种操作:等于、不等于、小于、大于、小于或等于和大于或等于 |
|
有效的规则域n |
a0, a1, a2, a3 |
对应系统调用的前4个参数。不支持字符串参数。常用于复合的套接字或IPC操作 |
|
arch |
系统调用的CPU构架 | |
|
auid |
audit uid,是用户注册的最初的ID | |
|
b32 |
用于32位系统调用表的arch | |
|
b64 |
用于64位系统调用表的arch | |
|
devmajor |
主设备号(Device Major Number) | |
|
devminor |
次设备号(Device Minor Number) | |
|
egid |
有效组ID | |
|
euid |
有效用户ID | |
|
exit |
从一个系统调用退出时的值 | |
|
fsgid |
文件系统组ID | |
|
gid |
组ID | |
|
inode |
节点号 | |
|
key |
设置过滤关键字,与-k选项一样 | |
|
msgtype |
用于匹配消息类型编号,仅用于排除(exclude)过滤链表 | |
|
obj_user |
资源的SELinux用户 | |
|
obj_role |
资源的SELinux角色 | |
|
obj_type |
资源的SELinux类型 | |
|
obj_lev_low |
资源的SELinux低级别 | |
|
obj_lev_high |
资源的SELinux高级别 | |
|
path |
监视的文件的全路径,仅用于exit链表 | |
|
pers |
操作系统(OS)个人特征序列号 | |
|
pid |
进程ID | |
|
ppid |
父进程ID | |
|
subj_user |
程序的SELinux用户 | |
|
subj_role |
程序的SELinux角色 | |
|
subj_type |
程序的SELinux类型 | |
|
subj_sen |
程序的SELinux敏感度(Sensitivity) | |
|
subj_clr |
程序的SELinux的间隔(Clearance) | |
|
sgid |
设置组ID | |
|
success |
如果退出值大于或等于0,这个值为true/yes,否则为false/no。当写规则时,用1表示true/yes,用0表示false/no | |
|
suid |
设置用户ID(Set User ID) | |
|
uid |
用户ID(User ID) | |
|
-w <path> |
|
为文件系统对象<path>插入一个watch(监视)。不支持匹配符 |
|
-W <path> |
|
移去文件系统对象<path>上的watch |
autrace program |
^-^$ auditd ^-^$ autrace /bin/ls /tmp Waiting to execute: /bin/ls gconfd-root virtual-root.SReCx6 Cleaning up... No rules Trace complete. You can locate the records with 'ausearch -i -p 5722' ^-^$ vi /var/log/audit/audit.log type=DAEMON_START msg=audit(1174214581.293:1962) auditd start, ver=1.2.8, format=raw, auid=4294967295 pid=5477 res=success, auditd pid=54 type=CONFIG_CHANGE msg=audit(1174214581.514:38): audit_enabled=1 old=1 by auid=4294967295 subj=user_u:system_r:unconfined_t:s0 |
ausearch [ options ] |
^-^$ ausearch -ui 4294967295 ---- time->Sun Mar 18 18:43:01 2007 type=DAEMON_START msg=audit(1174214581.293:1962) auditd start, ver=1.2.8, format=raw, auid=4294967295 pid=5477 res=success, auditd pid=54 ---- time->Sun Mar 18 18:43:01 2007 type=CONFIG_CHANGE msg=audit(1174214581.514:38): audit_enabled=1 old=1 by auid=4294967295 subj=user_u: system_r:unconfined_t:s0 |
aureport [ options ] |
^-^$ aureport Summary Report ====================== Range of time: 03/18/2007 18:43:01.293 - 03/18/2007 18:43:01.514 Number of changes in configuration: 1 Number of changes to accounts or groups: 0 Number of logins: 0 Number of failed logins: 0 Number of users: 0 Number of terminals: 0 Number of host names: 0 Number of executables: 0 Number of files: 0 Number of avc denials: 0 Number of failed syscalls: 0 Number of anomaly events: 0 Number of responses to anomaly events: 0 Number of process IDs: 1 Number of events: 2 |
| 回书目 上一节 下一节 |