audit可以配置规则,这个规则主要是给内核模块下发的,内核audit模块会按照这个规则获取审计信息,发送给auditd来记录日志。
规则类型可分为:
1、控制规则:控制audit系统的规则;
2、文件系统规则:也可以认为是文件监控,可以监控一个特定文件或者一个路径。
3、系统调用规则:可以记录特定程序的系统调用。
audit规则可以通过auditctl,在命令行里输入,这些设置的规则为临时的,当系统重启后就不存在了。可以通过配置/etc/audit/audit.rules文件,当每次audit服务启动后,都会从这个文件来加载规则。
auditctl,这个命令可以配置audit规则,audit根据这些规则来决定哪些事件会被记录。The auditctl program is used to control the behavior, get status, and add or delete rules into the 2.6 kernel‘s audit system.
控制规则:
-b 设置在内核中audit缓冲空间的最大值。
-f 这个选项来决定内核如何处理critical erros:0=silent 1=printk 2=panic.默认值为1。
-e 设置使能标志,设置为0,为关闭了audit,设置为1,则开启audit;当设置为2时,表示锁定,一般在设置完其他规则后最后设置,防止其他人修改规则;任何修改规则的行为都会被拒绝,并且记录审计日志,只有当重启系统后,这个使能标志才可以被修改。
-s 查询audit内核状态。如:
linux-xdYUnA:/var/log/audit # auditctl -s enabled 1 failure 1 pid 27106 rate_limit 0 backlog_limit 8192 lost 106978588 backlog 0
-l 列出所有当前配置的规则。
-D 删除所有当前加载的规则。
定义文件系统规则:
auditctl -w path_to_file -p permissions -k key_name
path_to_file 为要做审计的文件或路径;
permissions为要记录的许可:rwx 文件或路径的读写执行,a 修改文件或路径的属性。
r — read access to a file or a directory. w — write access to a file or a directory. x — execute access to a file or a directory. a — change in the file‘s or directory‘s attribute.
key_name 为一个可选字符串,明确哪些规则产生的这些日志。过滤时可以使用。
如下举例:
定义规则,记录所有对/etc/passwd文件的写入以及属性修改,可以输入如下命令:
~]# auditctl -w /etc/passwd -p wa -k passwd_changes
记录所有对/etc/selinux/目录的写入以及属性修改,可以输入如下命令:
~]# auditctl -w /etc/selinux/ -p wa -k selinux_changes
记录所有执行了/sbin/insmod命令,向内核插入模块的行为,输入如下命令:
~]# auditctl -w /sbin/insmod -p x -k module_insertion
定义系统调用规则:
auditctl -a action,filter -S system_call -F field=value -k key_name
action和filter 明确一个事件被记录。action可以为always或者never,filter明确出对应的匹配过滤,filter可以为:task,exit,user,exclude。
system_call 明确出系统调用的名字,几个系统调用可以写在一个规则里,如-S xxx -S xxx。系统调用的名字可以在/usr/include/asm/unistd_64.h文件中找到。
field=value 作为附加选项,修改规则以匹配特定架构、GroupID,ProcessID等的事件。具体有哪些字段,可以参考man linux https://linux.die.net/man/8/auditctl
例如:
定义一个规则,当每次使用系统调用adjtimex或者settimeofday时,并且为64位架构,记录审计日志,命令可以输入如下:
~]# auditctl -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
一个文件被user ID为1000或者更大的用户删除,或重命名,记录审计,命令如下:
~]# auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete
注意,-F auid!=4294967295 这个是为了排除login UID没有被设置的用户。
也可以通过系统调用规则,来定义文件系统规则,如下的系统调用规则,与-w /etc/shadow -p wa的文件系统规则等同:
~]# auditctl -a always,exit -F path=/etc/shadow -F perm=wa