19.3.审计配置 ============= 对事件审计的用户空间支持作为 FreeBSD 基本系统的一部分被预置。\ **GENERIC** 内核默认提供了内核的支持,并且可以通过在 **/etc/rc.conf** 中添加以下行来启用 `auditd(8) `__\ : .. raw:: latex \diilbookstyleinputcell .. code:: shell-session auditd_enable="YES" 然后,启动审计守护进程: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # service auditd start 喜欢编译定制内核的用户必须在其定制内核配置文件中包含以下行: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session 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. 审计事件类的前缀** ==== ================================== 前缀 操作 ==== ================================== + 审计此类中的成功事件。 - 审计此类中的失败事件。 ^ 审计此类中既不成功也不失败的事件。 ^+ 不要审计此类中的成功事件。 ^- 不要审计此类中的失败事件。 ==== ================================== 如果不存在前缀,则将审计事件的成功和失败实例。 以下示例选择字符串选择成功和失败的登录/注销事件,但仅选择成功的执行事件: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session 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** 中指定了一些审计子系统的默认值: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session 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`` 的登录/注销事件也将被审计。 .. raw:: latex \diilbookstyleinputcell .. code:: shell-session root:lo,+ex:no www:fc,+ex:no