19.3.审计配置

对事件审计的用户空间支持作为 FreeBSD 基本系统的一部分被预置。GENERIC 内核默认提供了内核的支持,并且可以通过在 /etc/rc.conf 中添加以下行来启用 auditd(8):

auditd_enable="YES"

然后,启动审计守护进程:

# service auditd start

喜欢编译定制内核的用户必须在其定制内核配置文件中包含以下行:

options AUDIT

19.3.1.事件选择表达式

审计配置中的许多地方都使用到了选择表达式,以确定应该审计哪些事件。表达式包含要匹配的事件类列表。选择表达式从左到右计算,两个表达式通过将一个附加到另一个来组合。

默认审计事件类 总结了默认审计事件类:

表 1. 默认审计事件类

类型名称

说明

操作

all

全部

匹配所有事件类。

aa

认证和授权

ad

管理

对整个系统执行的管理操作。

ap

应用

应用程序定义的操作。

cl

文件关闭

审计对 close 系统调用的调用。

ex

执行

审计程序的执行。审计命令行参数和环境变量是通过使用 audit_control(5) 中 policy 的 argv 和 envv 参数来控制的。

fa

文件属性访问

审计对象属性的访问,如 stat(1) 和 pathconf(2)。

fc

文件创建

审计创建文件的事件。

fd

文件删除

审计文件删除的事件。

fm

文件属性修改

审计文件属性被修改的事件,例如 chown(8)、chflags(1) 和 flock(2)。

fr

文件读取

对读取数据或打开文件进行读取的审计事件。

fw

文件写入

对写入数据、写入文件或修改文件的事件进行审计。

io

ioctl

审计 ioctl 系统调用的使用。

ip

ipc

审计各种形式的进程间通信,包括 POSIX 管道和 System V IPC 操作。

lo

登录_注销

审计 login(1) 和 logout(1) 事件。

na

无归属

审计无归属的事件。

no

无效的类

不匹配审计事件。

nt

网络

审计与网络操作相关的事件,例如 connect(2) 和 accept(2)。

ot

其他

审计杂项事件。

pc

过程

审计进程操作,例如 exec(3) 和 exit(3)。

这些审计事件类可以通过修改 audit_class 和 audit_event 配置文件来定制。

每个审计事件类可以与一个前缀组合,该前缀指示是否匹配成功/失败的操作,以及条目是添加还是删除类和类型的匹配。审计事件类的前缀总结了可用的前缀:

表 2. 审计事件类的前缀

前缀

操作

审计此类中的成功事件。

审计此类中的失败事件。

^

审计此类中既不成功也不失败的事件。

^+

不要审计此类中的成功事件。

^-

不要审计此类中的失败事件。

如果不存在前缀,则将审计事件的成功和失败实例。

以下示例选择字符串选择成功和失败的登录/注销事件,但仅选择成功的执行事件:

lo,+ex

19.3.2.配置文件

在 /etc/security 中可以找到以下用于安全事件审计的配置文件:

  • audit_class :包含审计类的定义。

  • audit_control :控制审计子系统的各个方面,例如默认审计类、审计日志卷上保留的最小磁盘空间以及最大审计跟踪大小。

  • audit_event :系统审计事件的文本名称和描述以及每个事件所在类的列表。

  • audit_user :用户特定的审计要求与登录时的全局默认值相结合。

  • audit_warn :auditd(8) 使用的可定制的 shell 脚本,用于在异常情况下生成警告消息,例如当审计记录的空间不足或审计跟踪文件已轮替时。

警告

应仔细编辑和维护审计配置文件,因为错误配置可能导致不正确的事件记录。

在大多数情况下,管理员只需修改 audit_control 和 audit_user。第一个文件控制系统范围的审计属性和策略,第二个文件可用于用户的审计微调。

19.3.2.1. audit_control 文件

在 audit_control 中指定了一些审计子系统的默认值:

dist:off
flags:lo,aa
minfree:5
naflags:lo,aa
policy:cnt,argv
filesz:2M
expire-after:10M

dir 条目用于设置将存储审计日志的一个或多个目录。如果出现多个目录条目,它们将在存储时按顺序使用。通常配置审计,以便审计日志存储在专用文件系统上,以防止在文件系统用完时引起审计子系统与其他子系统之间的干扰。

如果将 dist 字段设置为 on 或 yes,将创建指向 /var/audit/dist 中所有跟踪文件的硬链接。

flags 字段为归属事件设置系统范围的默认预选掩码。在上面的示例中,对所有用户的成功和失败登录/注销事件以及身份验证和授权进行审计。

minfree 条目定义了存储审计跟踪的文件系统的最小可用空间百分比。

naflags 条目指定了要针对无归属事件进行审计的审计类,例如登录/注销过程以及身份验证和授权。

policy 条目指定了一个以逗号分隔的策略标志列表,用于控制审计行为的各个方面。cnt 表示尽管审计失败,系统仍应继续运行(强烈建议使用此标志)。另一个标志 , argv 会让 execve(2) 系统调用的命令行参数作为命令执行的一部分被审计。

filesz 条目指定了在自动终止和轮替跟踪文件之前审计跟踪的最大大小。0 值禁用自动日志轮替。如果请求的文件大小低于 512k 的最小值,它将被忽略并生成一条日志消息。

expire-after 字段指定审计日志文件何时到期并被删除。

19.3.2.2. audit_user 文件

管理员可以在 audit_user 中为特定用户进一步指定审计要求。每行通过两个字段为用户配置审计:alwaysaudit 字段指定应始终为用户审计的 neveraudit 一组事件,该字段指定一组不应为用户审计的事件。

以下示例条目审计登录/注销事件和成功的命令执行—— root 以及文件创建和成功执行的 www 命令。如果与默认的 audit_control 一起使用,则 lo 条目 root 是多余的,并且对 www 的登录/注销事件也将被审计。

root:lo,+ex:no
www:fc,+ex:no