Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

7.5. 定义审计规则

Audit 系统在一组规则上运行,这些规则定义要在日志文件中捕获的内容。可以指定以下审计规则类型:
控制规则
允许修改 Audit 系统的行为及其部分配置。
文件系统规则
也称为文件监视,允许审核特定文件或目录的访问权限。
系统调用规则
允许记录任何指定程序进行的系统调用。
可以设置审计规则:

7.5.1. 使用 auditctl定义审计规则

auditctl 命令允许您控制 Audit 系统的基本功能,并定义决定记录哪些审计事件的规则。
注意
与 Audit 服务和 Audit 日志文件交互的所有命令都需要 root 特权。确保您以 root 用户身份执行这些命令。此外,需要 CAP_AUDIT_CONTROL 来设置审计服务,并且需要 CAP_AUDIT_WRITE 来记录用户消息。

定义控制规则

以下是一些控制规则,允许您修改审计系统的行为:
-b
在内核中设置最大现有审计缓冲量,例如:
~]# auditctl -b 8192
-f
设置在检测到关键错误时执行的操作,例如:
~]# auditctl -f 2
如果出现严重错误,以上配置会触发内核 panic。
-e
启用或禁用 Audit 系统或锁定其配置,例如:
~]# auditctl -e 2
以上命令将锁定 Audit 配置。
-r
设置每秒生成的消息率,例如:
~]# auditctl -r 0
以上配置不会设置所生成消息的速率限制。
-s
报告 Audit 系统的状态,例如:
~]# auditctl -s
AUDIT_STATUS: enabled=1 flag=2 pid=0 rate_limit=0 backlog_limit=8192 lost=259 backlog=0
-l
列出所有当前载入的审计规则,例如:
~]# auditctl -l
-w /etc/passwd -p wa -k passwd_changes
-w /etc/selinux -p wa -k selinux_changes
-w /sbin/insmod -p x -k module_insertion
⋮
-D
删除所有当前载入的审计规则,例如:
~]# auditctl -D
No rules

定义文件系统规则

要定义文件系统规则,请使用以下语法:
auditctl -w path_to_file -p permissions -k key_name
其中:
  • path_to_file 是被审计的文件或目录。
  • 权限是记录的权限
    • r - 对文件或目录的读取访问权限.
    • w - 对文件或目录的写入访问权限.
    • x - 执行对文件或目录的访问权限。
    • a - 更改文件或目录的属性.
  • key_name 是一个可选字符串,可帮助您识别生成了特定日志条目的规则或一组规则。

例 7.1. 文件系统规则

要定义一条规则,记录 /etc/passwd 文件的所有写入访问权限和每个属性更改,请执行以下命令:
~]# auditctl -w /etc/passwd -p wa -k passwd_changes
请注意,在 -k 选项后面的字符串是任意的。
要定义一条规则,记录 /etc/selinux/ 目录中所有文件的写入访问和每个属性更改,请执行以下命令:
~]# auditctl -w /etc/selinux/ -p wa -k selinux_changes
要定义一个规则来记录 /sbin/insmod 命令的执行(在 Linux 内核中插入模块),请执行以下命令:
~]# auditctl -w /sbin/insmod -p x -k module_insertion

定义系统调用规则

要定义系统调用规则,请使用以下语法:
auditctl -a action,filter -S system_call -F field=value -k key_name
其中:
  • 操作和 过滤指定记录特定事件的时间操作 可以是 alwaysneverfilter 指定将哪个内核规则匹配过滤器应用到事件。rule-matching 过滤器可以是以下之一: taskexituserexclude。有关这些过滤器的更多信息,请参阅 第 7.1 节 “Audit 系统架构” 的开头。
  • system_call 指定系统调用的名称。可以在 /usr/include/asm/unistd_64.h 文件中找到所有系统调用的列表。可将多个系统调用分组成一个规则,各自在其自己的 -S 选项后指定。
  • Field=value 指定进一步修改规则以根据指定的体系结构、组 ID、进程 ID 和其他选项匹配的额外选项。有关所有可用字段类型及其值的完整列表,请查看 auditctl(8) man page。
  • key_name 是一个可选字符串,可帮助您识别生成了特定日志条目的规则或一组规则。

例 7.2. 系统调用规则

要定义当程序每次使用 adjtimexsettimeofday 系统调用时创建日志条目的规则,且系统使用 64 位构架,请执行以下命令:
~]# auditctl -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
要定义规则,在每次删除文件时创建一个日志条目,或者由 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 选项用于排除未设置登录 UID 的用户。
也可以使用系统调用规则语法定义文件系统规则。以下命令为系统调用创建类似于 -w /etc/shadow -p wa 文件系统规则的规则:
~]# auditctl -a always,exit -F path=/etc/shadow -F perm=wa