系统管理指南:安全性服务

第 7 部分 Solaris 审计

本部分提供有关 Solaris 审计子系统的配置、管理和使用方法的信息。

第 27 章 Solaris 审计(概述)

Solaris 审计保留系统使用情况的记录。审计服务包括帮助分析审计数据的工具。

本章介绍在 Solaris 操作系统 中审计如何工作。以下是本章中信息的列表:

有关规划建议,请参见第 28 章,规划 Solaris 审计。有关在站点上配置审计的过程,请参见第 29 章,管理 Solaris 审计(任务)。有关参考信息,请参见第 30 章,Solaris 审计(参考)

什么是审计?

审计是指收集有关系统资源使用情况的数据。审计数据提供与安全相关的系统事件的记录。以后便可以使用此数据来指定主机上执行的操作的职责。成功的审计应包括两个安全功能:识别和验证。每次登录时,在用户提供用户名和口令之后,都将生成一个与此用户的进程关联的唯一审计会话 ID。登录会话期间启动的每个进程都会继承此审计会话 ID。即使用户在单个会话期间更改了身份,也会使用同一个审计会话 ID 跟踪所有的用户操作。有关更改身份的更多详细信息,请参见 su(1M) 手册页。

使用审计服务可以:

在系统配置期间,可以预先选择要监视的审计记录类。还可以微调针对单个用户执行审计的程度。

收集完审计数据之后,便可使用后选工具来减少和检查所需的审计跟踪部分。例如,您可以选择查看单个用户或特定组的审计记录。可以在特定日期检查某个事件类型的所有记录。或者,可以选择在特定时间生成的记录。

安装非全局区域的系统可以从全局区域以相同的方式审计所有区域。还可以配置这些系统,使其收集非全局区域中的不同记录。有关更多信息,请参见审计和 Solaris Zones

审计如何工作?

审计在指定事件发生时生成审计记录。通常,生成审计记录的事件包括:

审计记录从以下三个源生成:

一旦捕获相关的事件信息,便会将此信息格式化为审计记录。然后将此记录写入审计文件。完整的审计记录以二进制格式存储。对于 Solaris 10 发行版,也可使用 syslog 实用程序记录审计记录。

以二进制格式存储的审计文件可以存储在本地分区中,也可以存储在挂载了 NFS 的文件服务器中。存储位置可以是同一系统上的多个分区、不同系统上的分区,或者相互链接的不同网络中系统上的分区。相互链接的审计文件的集合称为审计跟踪。审计记录在审计文件中按时间顺序累积。每条审计记录都包含识别事件的信息、导致事件的原因、事件发生的时间,以及其他相关信息。

审计记录还可以使用 syslog 实用程序进行监视。这些审计日志可以在本地存储。或者,可以通过 UDP 协议将这些日志发送到远程系统。有关更多信息,请参见审计文件

审计如何与安全相关?

Solaris 审计通过显示可疑的或异常的系统使用模式来帮助检测潜在的安全破坏。Solaris 审计还提供一种根据可疑操作追溯到特定用户的方法,因此可以起到一种威慑的作用。知道自己的操作正在被审计的用户很少会尝试执行恶意操作。

要保护计算机系统,特别是网络中的系统,需要在系统进程或用户进程开始之前具备控制活动的机制。安全性要求系统上安装有在活动发生时用于监视活动的工具,同时还要求在活动发生后报告活动。Solaris 审计的初始配置要求在用户登录或系统进程开始之前设置参数。大多数审计活动都涉及监视当前事件和报告符合指定参数的事件。Solaris 审计如何监视和报告这些事件的信息在第 28 章,规划 Solaris 审计第 29 章,管理 Solaris 审计(任务)中详细介绍。

审计不能防止黑客未经授权的侵入。但是,审计服务可以报告特定用户在特定日期和时间执行了特定操作之类的信息。审计报告可以按登录路径和用户名来标识用户。此类信息可立即报告给终端和文件,以供以后分析。因此,审计服务提供的数据有助于确定以下内容:

审计术语和概念

以下术语用于说明审计服务。某些定义包含更完整说明的链接。

表 27–1 Solaris 审计术语

术语 

定义 

Audit class(审计类) 

一组审计事件。审计类提供选择一组要审计的事件的方法。有关更多信息,请参见审计类和预选

Audit directory(审计目录) 

二进制格式的审计文件的仓库。有关审计目录类型的说明,请参见审计文件

Audit event(审计事件) 

被审计的与安全相关的系统操作。为了便于选择,将事件分为各个审计类。有关可以审计的系统操作的介绍,请参见审计事件

Audit policy(审计策略) 

一组可以在您的站点中启用或禁用的审计选项。这些选项包括是否记录某种审计数据,同时还包括是否在写满审计跟踪时暂停可审计的操作。有关更多信息,请参见确定审计策略

Audit record(审计记录) 

存储在审计文件中的审计数据。一条审计记录描述一个审计事件。每条审计记录由多个审计标记组成。有关审计记录的更多信息,请参见审计记录和审计标记

Audit token(审计标记) 

审计记录或审计事件字段。每个审计标记描述审计事件的一个属性,例如用户、程序或其他对象。有关所有审计标记的说明,请参见审计标记格式

Audit trail(审计跟踪) 

一个或多个审计文件的集合,用于存储运行审计服务的所有系统上的审计数据。有关更多信息,请参见审计跟踪

Preselection(预选) 

预选是指在启用审计服务之前选择要监视的审计类。预选的审计类的审计事件将会在审计跟踪中出现。由于不会审计未预选的审计类,因此这些审计类的事件将不会出现在审计跟踪中。后选工具 auditreduce 命令将从审计跟踪中选择记录。有关更多信息,请参见审计类和预选

Public object(公共对象) 

公共对象是一个由 root 用户拥有且任何人都可读取的文件。例如,/etc 目录和 /usr/bin 目录中的文件就是公共对象。不能审计只读事件的公共对象。例如,即使预选了 file_read (fr) 审计类,也不会审计公共对象的读取。您可以通过更改 public 审计策略选项来覆盖缺省值。

审计事件

可以审计与安全相关的系统操作。这些可审计的操作称为审计事件。审计事件在 /etc/security/audit_event 文件中列出。在此文件中,会根据事件编号、符号名称、简短说明以及事件所属的审计类集定义每个审计事件。 有关 audit_event 文件的更多信息,请参见 audit_event(4) 手册页。

例如,以下项定义了 exec() 系统调用的审计事件:


7:AUE_EXEC:exec(2):ps,ex

当您预选审计类 ps 或审计类 ex 进行审计时,将在审计跟踪中记录 exec() 系统调用。

Solaris 审计可处理可归属事件和无归属事件。exec() 系统调用可归属到某个用户,因此可将该调用视为可归属事件。而在内核中断级别发生的事件则为无归属事件。对用户进行验证之前发生的事件也是无归属事件。na 审计类处理无归属审计事件。例如,引导系统便是一个无归属事件。


113:AUE_SYSTEMBOOT:system booted:na

预选某个审计事件所属的类以进行审计时,会在审计跟踪中记录此事件。例如,预选 psna 审计类以进行审计时,除其他事件之外,还会在审计跟踪中记录 exec() 系统调用和系统引导操作。

除 Solaris 审计服务定义的审计事件之外,第三方应用程序也可以生成审计事件。审计事件编号 32768 到 65535 适用于第三方应用程序。

审计类和预选

每个审计事件都属于一个或多个审计类。审计类是用于容纳大量审计事件的一种很方便的容器。预选要审计的类时,可以指定应在审计跟踪中记录该类中的所有事件。可以预选系统中的事件和特定用户启动的事件。运行审计服务之后,可以从预选类中动态添加或删除审计类。

可以使用后选命令 auditreduce 从预选审计记录中选择记录。有关更多信息,请参见检查审计跟踪auditreduce(1M) 手册页。

审计类在 /etc/security/audit_class 文件中定义。每个项都包含类的审计掩码、类的名称,以及类的描述性名称。例如,在 audit_class 文件中 psna 类的定义为:


0x00100000:ps:process start/stop

0x00000400:na:non-attribute

有 32 种可能的审计类。其中包括两个全局类:allno。这些审计类将在 audit_class(4) 手册页中介绍。

可以配置审计事件到类的映射。可以从类中删除事件、向类中添加事件,以及创建新类以包含选定事件。有关过程,请参见如何更改审计事件的类成员关系

审计记录和审计标记

每条审计记录记录一个审计事件的发生。此记录包含操作执行者、受影响的文件、已尝试执行的操作以及操作发生的时间和位置等信息。以下示例给出了一条 login 审计记录:


header,81,2,login - local,,2003-10-13 11:23:31.050 -07:00

subject,root,root,other,root,other,378,378,0 0 example_system

text,successful login

return,success,0

为每个审计事件保存的信息类型由一组审计标记进行定义。每次为事件创建审计记录时,记录中都会包含为事件定义的部分或全部标记。事件的性质确定要记录的标记。在前面的示例中,每行都以审计标记的名称开头。名称后跟审计标记的内容。login 审计记录共由四种审计标记组成。

有关每个审计标记结构的详细说明和 praudit 输出示例,请参见审计标记格式。有关审计标记的二进制流的说明,请参见 audit.log(4) 手册页。

审计文件

审计记录收集在审计日志中。Solaris 审计为审计日志提供两种输出模式。称为审计文件的日志以二进制格式存储审计记录。系统或站点的审计文件组提供完整的审计记录。完整的审计记录称为审计跟踪

syslog 实用程序收集并存储审计记录的文本版本的摘要。syslog 记录不是完整的记录。以下示例给出了 login 审计记录的 syslog 项:


Oct 13  11:24:11 example_system auditd: [ID 6472 audit.notice] \

        login - login ok session 378 by root as root:other

一个站点可以使用两种格式存储审计记录。可以配置站点中的系统,使其可以使用二进制模式,或者可以同时使用这两种模式。下表对二进制审计记录和 syslog 审计记录进行了比较。

表 27–2 二进制审计记录和 syslog 审计记录的比较

功能 

二进制记录 

syslog 记录

协议 

写入文件系统 

将 UDP 用于远程日志 

数据类型 

二进制 

文本 

记录长度 

无限制 

每条审计记录最多 1024 个字符 

位置 

存储在本地磁盘上以及使用 NFS 挂载的目录中 

存储在 syslog.conf 文件中指定的位置

配置方式 

编辑 audit_control 文件,并保护 NFS 挂载审计目录

编辑 audit_control 文件,编辑 syslog.conf 文件

读取方式 

通常,以批处理模式读取 

XML 格式的浏览器输出 

实时读取,或者通过为 syslog 创建的脚本进行搜索

纯文本输出 

完整性 

保证完整,并且以正确的顺序显示 

不能保证完整 

时间标记 

格林威治标准时间 (Greenwich Mean Time, GMT) 

被审计的系统时间 

二进制记录提供最高的安全性和最大的范围。二进制输出满足安全证书的要求,例如公共标准受控制访问保护配置 (Controlled Access Protection Profile, CAPP)。这些记录将写入被保护不受窥探的文件系统中。在单独的系统上,将收集所有二进制记录并按顺序显示它们。当某个审计跟踪内的各系统跨时间区域分布时,便可使用二进制日志中的 GMT 时间标记进行精确比较。使用 praudit -x 命令可在浏览器中查看 XML 格式的记录。还可以使用脚本来解析 XML 输出。

相反,syslog 记录可以提供更大的便利性和灵活性。例如,您可以从各种源收集 syslog 数据。此外,当您监视 syslog.conf 文件中的 audit.notice 事件时,syslog 实用程序会记录一条带有当前时间标记的审计记录摘要。您可以使用为来自各种源(包括工作站、服务器、防火墙,以及路由器)的 syslog 消息开发的管理和分析工具。可以实时查看记录,并将其存储在远程系统中。

通过使用 syslog.conf 远程存储审计记录,可以保护日志数据免遭攻击者改动或删除。另一方面,远程存储审计记录时,这些记录容易遭受拒绝服务、伪装源地址等网络攻击。此外,UDP 会丢包或无序发送包。syslog 项的限制为 1024 个字符,所以可能截断日志中的某些审计记录。在单独的系统上,并非收集所有的审计记录。可能不会按顺序显示记录。由于每条审计记录都使用本地系统的日期和时间进行标记,因此不能根据时间标记为多个系统构造审计跟踪。

有关审计日志的更多信息,请参阅以下内容:

审计存储

审计目录以二进制格式保留审计文件。典型安装使用许多审计目录。所有审计目录的内容组成了审计跟踪。审计记录按以下顺序存储在审计目录中:

这些目录在 audit_control 文件中指定。列表中早于此目录的目录已满时才会使用该目录。有关带有目录项列表的 audit_control 注释文件的信息,请参见示例 29–3

检查审计跟踪

审计服务提供用于合并和减少审计跟踪文件的命令。auditreduce 命令可以合并审计跟踪中的审计文件。此命令还可以过滤文件以查找特定事件。praudit 命令读取二进制文件。praudit 命令的选项提供适合借助脚本和浏览器显示的输出。

Solaris 10 发行版中的 Solaris 审计增强功能

从 Solaris 9 发行版开始,已将以下功能引入 Solaris 审计中:

第 28 章 规划 Solaris 审计

本章介绍如何针对 Solaris 安装设置审计服务。特别是,本章介绍了您在启用审计服务之前需要考虑的问题。以下是本章中规划信息的列表:

有关审计的概述,请参见第 27 章,Solaris 审计(概述)。有关在站点上配置审计的过程,请参见第 29 章,管理 Solaris 审计(任务)。有关参考信息,请参见第 30 章,Solaris 审计(参考)

规划 Solaris 审计(任务列表)

以下任务列表介绍了规划磁盘空间及要记录的事件时所需执行的主要任务。

任务 

参考 

确定非全局区域的审计策略 

如何在区域中规划审计

规划审计跟踪的存储空间 

如何规划审计记录的存储

确定要审计的对象及内容 

如何规划要审计的对象及内容

规划 Solaris 审计(任务)

您需要选择审计的活动类型,同时需要收集有用的审计信息。审计文件不断增大,可能会很快占满可用空间,因此应该分配足够的磁盘空间。您还需要仔细规划要审计的对象及内容。

Procedure如何在区域中规划审计

如果您的系统实现了区域,则可以进行两种审计配置:

  1. 确定是否要在非全局区域中自定义审计。

    • 如果不想在非全局区域中自定义审计,请转至步骤 2

    • 如果要在非全局区域中自定义审计,请考虑以下事项:

      • 还必须配置全局区域。

        要根据非全局区域中的审计配置文件收集审计记录,必须在全局区域中设置 perzone 审计策略。


        注 –

        如果使用自定义名称服务文件实现非全局区域,则应设置 perzone 审计策略选项。名称服务文件包括 /etc/password/etc/shadow nsswitch.conf。有关不设置 perzone 选项的信息,请参见审计和 Solaris Zones


      • 区域中的审计配置文件由此区域的审计守护进程读取。

        每个区域都运行自己的审计守护进程,具有自己的审计队列,并收集自己的审计日志。这些操作由计算机集中执行。

      • 各个区域都可以设置除 perzoneahlt 以外的所有策略选项。这些策略选项在全局区域中设置。

      如果在每个区域中自定义审计配置文件,应使用如何规划要审计的对象及内容规划每个区域。可以跳过第一步。还必须使用如何规划审计记录的存储规划每个区域。

  2. 确定是否需要单映像审计跟踪。

    单映像审计跟踪将正在审计的系统视为一台计算机。全局区域会在系统上运行唯一的审计守护进程,并收集每个区域的审计日志。仅可在全局区域中自定义审计配置文件。

    此配置将所有区域视为单一系统的一部分。要区分区域审计记录,可以设置 zonename 策略。然后,可以使用 auditreduce 命令,按区域来选择审计事件。有关示例,请参见 auditreduce(1M) 手册页。

    要规划单映像审计跟踪,请使用如何规划要审计的对象及内容进行规划。从第一步开始。还必须使用如何规划审计记录的存储规划每个区域。

Procedure如何规划审计记录的存储

审计跟踪需要专用文件空间。审计文件的专用文件空间必须可用且安全。各个系统都应具有多个为审计文件配置的审计目录。作为首要任务之一,在任何系统上启用审计之前,都应决定如何配置审计目录。以下过程介绍了规划审计跟踪存储时要解决的问题。

开始之前

如果要实现非全局区域,请在使用此过程之前完成如何在区域中规划审计

  1. 确定您站点所需的审计量。

    针对审计跟踪平衡磁盘空间可用性和站点的安全需求。

    有关如何在保持站点安全的同时降低空间需求,以及如何设计审计存储的指南,请参见控制审计成本有效审计

  2. 确定要审计的系统。

    在这些系统上,至少为一个本地审计目录分配空间。有关如何指定审计目录的信息,请参见示例 29–3

  3. 确定要存储审计文件的系统。

    确定要保存主审计目录和辅助审计目录的服务器。有关为审计目录配置磁盘的示例,请参见如何创建审计文件的分区

  4. 命名审计目录。

    创建计划使用的所有审计目录的列表。有关命名约定,请参见二进制审计文件名称约定

  5. 确定哪些系统要使用哪些审计目录。

    创建一个列表,显示哪个系统应使用哪个审计目录。此列表有助于您平衡审计活动。有关图解,请参见图 30–1图 30–2

Procedure如何规划要审计的对象及内容

开始之前

如果要实现非全局区域,请在使用此过程之前完成如何在区域中规划审计

  1. 确定是否需要单映像审计跟踪。

    如果计划以不同的方式审计各个系统,请从下一步开始。应该针对每个系统完成其余的规划步骤。

    单映像审计跟踪将正在审计的系统视为一台计算机。要为某个站点创建单映像审计跟踪,安装中的每个系统都应进行如下配置:

    • 与其他所有系统使用相同的 audit_warnaudit_event audit_classaudit_startup 文件。

    • 使用相同的 audit_user 数据库。此数据库可以位于名称服务中。

    • audit_control 文件中具有相同的 flagsnaflagsplugin 项。

  2. 确定审计策略。

    使用 auditconfig -lspolicy 命令查看可用策略选项的简短说明。缺省情况下,仅打开 cnt 策略。有关更全面的介绍,请参见步骤 8

    有关策略选项的影响,请参见确定审计策略。有关如何设置审计策略的信息,请参见如何配置审计策略

  3. 确定是否要修改事件到类的映射。

    在多数情况下,缺省映射便已够用。但是,如果添加新类、更改类定义,或者确定某特定系统调用的记录无用,则可能需要将某个事件移动到其他类。

    有关示例,请参见如何更改审计事件的类成员关系

  4. 确定要预选的审计类。

    添加审计类或更改缺省类的最佳时机是在启动审计服务之前。

    audit_control 文件中 flagsnaflagsplugin 项的审计类值适用于所有用户和进程。预选类可以确定是只针对成功情况对审计类进行审计,还是只针对失败情况对其进行审计,或者同时针对两种情况对其进行审计。

    有关如何预选审计类的信息,请参见如何修改 audit_control 文件

  5. 确定系统范围预选审计类的用户例外情况。

    如果决定使用系统范围预选审计类以外的方式来审计某些用户,请修改 audit_user 数据库中单个用户项。

    有关示例,请参见如何更改用户审计特征

  6. 确定最小可用磁盘空间。

    当审计文件系统上的磁盘空间低于 minfree 百分比时,auditd 守护进程将切换到下一个可用审计目录。然后,此守护进程将发送一条警告,指出已超过软限制。

    有关如何设置最小可用磁盘空间的信息,请参见示例 29–4

  7. 决定如何管理 audit_warn 电子邮件别名。

    只要审计系统需要通知您出现了需要管理干预的情况,就会运行 audit_warn 脚本。缺省情况下,audit_warn 脚本会向 audit_warn 别名发送电子邮件,并向控制台发送消息。

    要设置别名,请参见如何配置 audit_warn 电子邮件别名

  8. 决定当所有审计目录已满时需要执行的操作。

    缺省情况下,当审计跟踪溢出时,系统还会继续工作。系统会对已删除的审计记录进行计数,但是不会记录事件。要获得更大的安全性,可以禁用 cnt 策略,同时启用 ahlt 策略。当审计跟踪溢出时,ahlt 策略将停止系统。

    有关如何配置这些策略选项的信息,请参见示例 29–14

  9. 决定是否收集 syslog 格式以及二进制日志格式的审计记录。

    有关概述信息,请参见审计文件

    有关示例,请参见如何配置 syslog 审计日志

确定审计策略

审计策略确定本地系统审计记录的特征。策略选项由启动脚本设置。启用审计服务的 bsmconv 脚本会创建 /etc/security/audit_startup 脚本。audit_startup 脚本执行 auditconfig 命令来建立审计策略。有关此脚本的详细信息,请参见 audit_startup(1M) 手册页。

缺省情况下,禁用大多数审计策略选项来最大程度地减少存储需求和系统处理需求。您可以使用 auditconfig 命令动态启用和禁用审计策略选项。可以使用 audit_startup 脚本永久启用和禁用策略选项。

使用下表确定您站点的需求是否可以解释启用一个或多个审计策略选项而造成的额外开销。

表 28–1 审计策略选项的影响

策略名称 

说明 

更改策略选项的原因 

ahlt

此策略仅适用于异步事件。禁用后,此策略允许在不生成审计记录的情况下完成事件。 

启用后,此策略会在审计文件系统已满时停止系统。需要管理干预才能清除审计队列、为审计记录提供空间,以及重新引导系统。只能在全局区域中启用此策略。此策略影响所有区域。 

当系统可用性比安全性更重要时,适合使用禁用选项。 

在安全性极为重要的环境中,适合使用启用选项。 

arge

禁用后,此策略将从 exec 审计记录中忽略已执行程序的环境变量。

启用后,此策略会将已执行程序的环境变量添加到 exec 审计记录。与禁用此策略的情况相比,生成的审计记录包含更多详细信息。

与启用选项相比,禁用选项收集的信息要少很多。 

当审计数个用户时,适合使用启用选项。怀疑 exec 程序中使用的环境变量有问题时,也可以使用此选项。

argv

禁用后,此策略将从 exec 审计记录中忽略已执行程序的参数。

启用后,此策略会将已执行程序的参数添加到 exec 审计记录。与禁用此策略的情况相比,生成的审计记录包含更多详细信息。

与启用选项相比,禁用选项收集的信息要少很多。 

当审计数个用户时,适合使用启用选项。当您确信所运行的 exec 程序异常时,也可以使用此选项。

cnt

禁用后,此策略将阻止用户或应用程序运行。由于没有可用磁盘空间而导致审计记录无法添加到审计跟踪时,会发生阻止。 

启用后,此策略允许在不生成审计记录的情况下完成事件。此策略维护已删除审计记录的计数。 

在安全性极为重要的环境中,适合使用禁用选项。 

当系统可用性比安全性更重要时,适合使用启用选项。 

group

禁用后,此策略不会在审计记录中添加组列表。 

启用后,此策略会在每条审计记录中添加组列表作为特殊标记。

禁用选项通常可以满足站点的安全要求。 

当需要审计哪些组正在生成审计事件时,适合使用启用选项。 

path

禁用后,此策略会在每条审计记录中最多记录一条在系统调用期间所使用的路径。 

启用后,此策略会将与审计事件结合使用的每条路径记录到每条审计记录中。 

禁用选项在审计记录中最多放置一条路径。 

启用选项会将系统调用期间使用的每个文件名或路径输入到审计记录中,作为 path 标记。

perzone

禁用后,此策略针对每个系统只维护一个审计配置。全局区域中运行一个审计守护进程。通过预选 zonename 审计标记,可在审计记录中找到非全局区域中的审计事件。

启用后,此策略会为每个区域维护单独的审计配置、审计队列和审计日志。每个区域中运行单独的审计守护进程版本。只能在全局区域中启用此策略。 

当您没有特殊的理由为每个区域维护单独的审计日志、队列和守护进程时,禁用选项很有用。 

当您无法仅通过预选 zonename 审计标记来有效监视系统时,启用选项很有用。

public

禁用后,如果预选文件的读取,则此策略不会将公共对象的只读事件添加到审计跟踪。包含只读事件的审计类包括 frfacl

启用后,如果预选了适当的审计类,则此策略会记录公共对象的每个只读审计事件。

禁用选项通常可以满足站点的安全要求。 

启用选项很少有用。 

seq

禁用后,此策略不会将序列号添加到每条审计记录中。 

启用后,此策略会将序列号添加到每条审计记录中。sequence 标记保留序列号。

当审计顺利进行时,禁用选项便已够用。 

当启用 cnt 策略后,适合使用启用选项。利用 seq 策略,可以确定废弃数据的时间。

trail

禁用后,此策略不会将 trailer 标记添加到审计记录中。

启用后,此策略会将 trailer 标记添加到每条审计记录中。

禁用选项会创建一条较短的审计记录。 

启用选项会使用 trailer 标记清晰地标记每条审计记录的结束。trailer 标记经常与 sequence 标记结合使用。trailer 标记可以使审计记录的重新同步更简单、更精确。

zonename

禁用后,此策略不会在审计记录中包括 zonename 标记。

启用后,此策略会在非全局区域的每条审计记录中包括 zonename 标记。

当无需跨区域比较审计行为时,禁用选项很有用。 

当需要区分各区域中的审计行为并对其进行比较时,启用选项很有用。 

控制审计成本

由于审计会占用系统资源,因此必须控制所记录内容的详细程度。当您决定要审计的内容时,请考虑以下审计成本:

延长审计数据的处理时间带来的成本

延长处理时间带来的成本是审计成本中最不重要的部分。第一个原因是在执行需要大量运算的任务(例如映像处理、复杂计算等)时一般不会进行审计。另一个原因是单用户系统的成本通常会小到可以忽略。

分析审计数据的成本

分析成本大致上与收集的审计数据量成比例。分析成本包括合并与查看审计记录所需的时间,还包括将记录进行归档并保存在安全位置所需的时间。

生成的记录越少,分析审计跟踪数据所需的时间就越短。下面的存储审计数据的成本有效审计部分介绍了高效进行审计的方法。有效的审计可减少审计数据量,同时仍保证足够的审计范围以实现站点的安全目标。

存储审计数据的成本

存储成本是最重要的审计成本。审计数据量取决于以下各项:

由于上述因素随站点不同而不同,因此没有公式可预先确定为审计数据存储预留的磁盘空间量。请遵循以下原则:

有效审计

以下技术可帮助您在更有效地进行审计的同时实现组织的安全目标。

第 29 章 管理 Solaris 审计(任务)

本章介绍有助于设置和管理所审计的 Solaris 系统的过程,同时还包括管理审计跟踪的说明。以下是本章中信息的列表:

有关审计服务的概述,请参见第 27 章,Solaris 审计(概述)。有关规划建议的信息,请参见第 28 章,规划 Solaris 审计。有关参考信息,请参见第 30 章,Solaris 审计(参考)

Solaris 审计(任务列表)

以下任务列表介绍了管理审计所需执行的主要任务。这些任务是有序的。

任务 

说明 

参考 

1. 规划审计 

包含在配置审计服务之前要决定的配置问题。 

规划 Solaris 审计(任务列表)

2. 配置审计文件 

定义需要审计的事件、类和用户。 

配置审计文件(任务列表)

3. 配置和启用审计 

针对磁盘空间需求和其他审计服务要求配置每台主机。然后,启动审计服务。 

配置和启用审计服务(任务列表)

4. 管理审计记录 

收集并分析审计数据。 

管理审计记录(任务列表)

配置审计文件(任务列表)

以下任务列表介绍了在站点上配置文件以自定义审计的过程。大多数任务是可选的。

任务 

说明 

参考 

选择审计类,并自定义 audit_control 设置

涉及以下内容: 

  • 预选系统范围的审计类

  • 指定每个系统的审计目录

  • 对审计文件系统设置磁盘空间限制

如何修改 audit_control 文件

(可选)以两种模式记录审计事件 

除了存储二进制格式的审计记录之外,还可以实时监视审计事件。 

如何配置 syslog 审计日志

(可选)更改用户的审计特征 

设置系统范围的预选审计类的特定于用户的例外情况。 

如何更改用户审计特征

(可选)添加审计类 

通过创建用来保存事件的新审计类来减少审计记录数目。 

如何添加审计类

(可选)更改事件到类的映射 

通过更改事件到类的映射来减少审计记录数目。 

如何更改审计事件的类成员关系

配置审计文件

在网络中启用审计之前,可以针对站点的审计要求自定义审计配置文件。另外,还可以在启用审计服务之后重新启动审计服务或重新引导本地系统,以读取已更改的配置文件。但是,推荐的做法是在启动审计服务前尽可能多地自定义审计配置。

如果已实现区域,则可以选择从全局区域审计所有区域。要区分审计输出中的区域,可以设置 zonename 策略选项。或者,可以在全局区域中设置 perzone 策略,并在非全局区域中自定义审计配置文件,以单独审计非全局区域。有关概述,请参见审计和 Solaris Zones。有关规划的信息,请参见如何在区域中规划审计

Procedure如何修改 audit_control 文件

/etc/security/audit_control 文件配置系统范围的审计。此文件可确定审计的事件,发出审计警告的时间,以及审计文件的位置。

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. (可选的)保存 audit_control 文件的副本。


    # cp /etc/security/audit_control /etc/security/audit_control.orig
    
  3. 修改站点的 audit_control 文件。

    每一项都具有以下格式:


    keyword:value
    
    keyword

    定义行的类型。类型包括 dirflagsminfreenaflagsplugindir 行可以重复。

    有关关键字的说明,请参见以下示例。有关 plugin 项的示例,请参见如何配置 syslog 审计日志

    value

    指定与行类型相关联的数据。


示例 29–1 预选所有用户的审计类

audit_control 文件中的 flags 行定义了针对系统上所有用户审计的可归属事件的类。这些类用逗号分隔。允许使用空格。在本示例中,将为所有用户审计 lo 类中的事件。


# audit_control file

dir:/var/audit

flags:lo

minfree:20

naflags:lo

要查看哪些事件位于 lo 类中,请读取 audit_event 文件。另外,还可以使用 bsmrecord 命令,如示例 29–22 中所示。



示例 29–2 预选无归属事件

在本示例中,将审计 na 类中的所有事件,以及所有无归属的 login 事件。


# audit_control file

dir:/var/audit

flags:lo

minfree:20

naflags:lo,na


示例 29–3 指定二进制审计数据的位置

audit_control 文件中的 dir 行列出了要用于二进制审计数据的审计文件系统。在本示例中,定义了三个存放二进制审计数据的位置。


# audit_control file

#

# Primary audit directory - NFS-mounted from audit server

dir:/var/audit/egret.1/files

#

# Secondary audit directory - NFS-mounted from audit server

dir:/var/audit/egret.2/files

#

# Directory of last resort local directory

dir:/var/audit

flags:lo

minfree:20

naflags:lo,na

plugin:

要设置文件系统来保存二进制审计数据,请参见如何创建审计文件的分区



示例 29–4 更改警告的软限制

在本示例中,设置了所有审计文件系统的最低空闲空间级别,以便在文件系统的可用率只有 10% 时发出警告。


# audit_control file

#

dir:/var/audit/examplehost.1/files

dir:/var/audit/examplehost.2/files

dir:/var/audit/localhost/files

flags:lo

minfree:10

naflags:lo,na

audit_warn 别名可接收警告。要设置别名,请参见如何配置 audit_warn 电子邮件别名


Procedure如何配置 syslog 审计日志

可以指示审计服务只收集二进制审计数据,也可以指示审计服务收集二进制数据和文本数据。在以下过程中,将收集二进制审计数据和文本审计数据。收集的文本审计数据是二进制数据的子集。

开始之前

必须在 audit_control 文件的 flags 行或 naflags 行上指定预选审计类。文本数据是预选二进制数据的子集。

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. (可选的)保存 audit_control 文件的副本。


    # cp /etc/security/audit_control /etc/security/audit_control.save
    
  3. 添加 plugin 项。

    审计服务中的插件实现审计数据的二进制输出和 syslog 输出。未指定二进制插件。必须指定 syslog 插件。有关更多信息,请参见auditd 守护进程

    plugin 项具有以下格式:


    plugin:name=value; p_flags=classes
    
    value

    列出要使用的插件的名称。当前,唯一有效的值是 audit_syslog.so.1 插件。

    classes

    列出在 flags 行和 naflags 行中指定的审计类的子集。

    有关 plugin 值的更多信息,请参见 audit_syslog(5) 手册页。

  4. syslog.conf 文件中添加 audit.notice 项。

    此项包括日志文件的位置。


    # cat /etc/syslog.conf
    
    …
    
    audit.notice       /var/adm/auditlog

    不应将文本日志和二进制审计文件存储在同一位置。auditreduce 命令假设审计分区中的所有文件都是二进制审计文件。

  5. 创建日志文件。


    # touch /var/adm/auditlog
    
  6. 刷新 syslog 服务的配置信息。


    # svcadm refresh system/system-log
    
  7. 定期归档 syslog 日志文件。

    审计服务可生成大量输出。要管理日志,请参见 logadm(1M) 手册页。


示例 29–5 指定 syslog 输出的审计类

在以下示例中,syslog 实用程序收集预选审计类的子集。


# audit_control file

dir:/var/audit/host.1/files

dir:/var/audit/host.2/files

dir:/var/audit/localhost/files

flags:lo,ss

minfree:10

naflags:lo,na

plugin:name=audit_syslog.so.1; p_flags=-lo,-na,-ss

flagsnaflags 项会指示系统收集所有二进制格式的登录/退出、无归属以及系统状态更改的审计记录。plugin 项会指示 syslog 实用程序仅收集失败登录、失败的无归属事件以及失败的系统状态更改。



示例 29–6 将 syslog 审计记录放在远程系统上

可以通过更改 syslog.conf 文件中的 audit.notice 项来指向远程系统。在本示例中,本地系统的名称为 example1。远程系统的名称为 remote1


example1 # cat /etc/syslog.conf

…

audit.notice       @remote1

remote1 系统上 syslog.conf 文件中的 audit.notice 项指向日志文件。


remote1 # cat /etc/syslog.conf

…

audit.notice       /var/adm/auditlog

Procedure如何更改用户审计特征

每个用户的定义都存储在 audit_user 数据库中。这些定义为指定的用户修改 audit_control 文件中的预选类。nsswitch.conf 文件确定是否使用了本地文件或名称服务数据库。要计算用户的最终审计预选掩码,请参见进程审计特征

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. (可选的)保存 audit_user 数据库的副本。


    # cp /etc/security/audit_user /etc/security/audit_user.orig
    
  3. audit_user 数据库中添加新项。

    在本地数据库中,每一项都具有以下格式:


    username:always-audit:never-audit
    
    username

    选择要审计的用户的名称。

    always-audit

    选择总是应该针对指定用户进行审计的审计类列表。

    never-audit

    选择绝对不要针对指定用户进行审计的审计类列表。

    可以通过用逗号分隔审计类来指定多个类。

    audit_user 项将在用户下一次登录时生效。


示例 29–7 更改针对单个用户进行审计的事件

在本示例中,audit_control 文件包含系统的预选审计类:


# audit_control file

…

flags:lo,ss

minfree:10

naflags:lo,na

audit_user 文件显示了一个例外情况。当用户 jdoe 使用配置文件 shell 时,将审计此使用情况:


# audit_user file

jdoe:pf

jdoe 的审计预选掩码是 audit_user 设置和 audit_control 设置的组合。auditconfig -getaudit 命令显示 jdoe 的预选掩码:


# auditconfig -getaudit

audit id = jdoe(1234567)

process preselection mask = ss,pf,lo(0x13000,0x13000)

terminal id (maj,min,host) = 242,511,example1(192.168.160.171)

audit session id = 454


示例 29–8 只审计用户,而不审计系统

在本示例中,只在此系统上审计四个用户的登录和角色活动。audit_control 文件不预选系统的审计类:


# audit_control file

…

flags:

minfree:10

naflags:

audit_user 文件为四个用户预选两个审计类:


# audit_user file

jdoe:lo,pf

kdoe:lo,pf

pdoe:lo,pf

sdoe:lo,pf

以下 audit_control 文件可防止系统受到无担保的侵入。在与 audit_user 文件合并后,此文件比本示例中第一个 audit_control 文件更能保护系统安全。


# audit_control file

…

flags:

minfree:10

naflags:lo

Procedure如何添加审计类

当创建自己的审计类时,可以只将需要针对您所在站点审计的审计事件存放其中。在一个系统上添加该类时,应将此更改复制到正在审计的所有系统中。

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. (可选的)保存 audit_class 文件的副本。


    # cp /etc/security/audit_class /etc/security/audit_class.orig
    
  3. audit_class 文件中添加新项。

    每一项都具有以下格式:


    0xnumber:name:description
    
    0x

    number 标识为十六进制。

    number

    定义唯一审计类掩码。

    name

    定义审计类的字母名称。

    description

    定义审计类的说明性名称。

    添加的项在该文件中必须唯一。请勿使用现有审计类掩码。


示例 29–9 创建新审计类

本示例会创建类来保存一个小型的审计事件组。audit_class 文件的添加项如下所示:


0x01000000:pf:profile command

此项创建名为 pf 的新审计类。示例 29–10 填充此新审计类。


Procedure如何更改审计事件的类成员关系

可能需要更改审计事件的类成员关系来减小现有审计类的大小,或者将事件放置在它自己的类中。在一个系统上重新配置审计事件到类的映射时,应将此更改复制到正在审计的所有系统中。

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. (可选的)保存 audit_event 文件的副本。


    # cp /etc/security/audit_event /etc/security/audit_event.orig
    
  3. 通过更改事件的 class-list 来更改特定事件所属的类。

    每一项都具有以下格式:


    number:name:description:class-list
    
    number

    审计事件 ID。

    name

    审计事件的名称。

    description

    通常为触发创建审计记录的系统调用或可执行文件。

    class-list

    审计类的逗号分隔列表。


示例 29–10 将现有审计事件映射到新类

本示例将现有审计事件映射到在示例 29–9 中创建的新类。在 audit_control 文件中,二进制审计记录捕获 pf 类中事件的成功和失败信息。syslog 审计日志只包含 pf 类中事件的失败信息。


# grep pf | /etc/security/audit_class

0x01000000:pf:profile command

# vi /etc/security/audit_event

6180:AUE_prof_cmd:profile command:ua,as,pf

# vi audit_control

...

flags:lo,pf

plugin:name=audit_syslog.so.1; p_flags=-lo,-pf


示例 29–11 审计 setuid 程序的使用

本示例创建用来保存监视 setuidsetgid 程序调用事件的类。audit_control 项审计 st 类中事件的所有成功调用。


# vi /etc/security/audit_class

0x00000800:st:setuid class

# vi /etc/security/audit_event

26:AUE_SETGROUPS:setgroups(2):st

27:AUE_SETPGRP:setpgrp(2):st

40:AUE_SETREUID:setreuid(2):st

41:AUE_SETREGID:setregid(2):st

214:AUE_SETEGID:setegid(2):st

215:AUE_SETEUID:seteuid(2):st

# vi audit_control

...

flags:lo,+st

plugin:name=audit_syslog.so.1; p_flags=-lo,+st

配置和启用审计服务(任务列表)

以下任务列表介绍了配置和启用审计服务的过程。这些任务是有序的。

任务 

说明 

参考 

1. (可选)更改审计配置文件 

选择需要审计的事件、类和用户。 

配置审计文件(任务列表)

2. 创建审计分区 

创建审计文件的磁盘空间,并且使用文件权限来保护它们。 

如何创建审计文件的分区

3. 创建 audit_warn 别名

定义需要关注审计服务时应收到电子邮件警告的对象。 

如何配置 audit_warn 电子邮件别名

4. (可选)更改审计策略 

定义站点所需的其他审计数据。 

如何配置审计策略

5. 启用审计 

启用审计服务。 

如何启用审计

6. (可选)禁用审计 

禁用审计服务。 

如何禁用审计

7. (可选)重新读取审计配置更改 

auditd 守护进程正在运行时,将审计配置更改读入内核。

如何更新审计服务

8. (可选)在非全局区域中配置审计 

将策略设置为启用非全局区域,使其运行自己的审计守护进程 

示例 29–16

配置和启用审计服务

为站点设置配置文件之后,需要为审计文件设置磁盘空间。还需要设置审计服务的其他属性,然后启用此服务。本节还包含更改配置设置时刷新审计服务的过程。

安装非全局区域后,可以采用与审计全局区域完全相同的方式来审计此非全局区域。或者,可以在非全局区域中修改审计配置文件,以便单独审计非全局区域。要自定义审计配置文件,请参见配置审计文件(任务列表)

Procedure如何创建审计文件的分区

以下过程说明如何创建审计文件及相应文件系统和目录的分区。根据需要可跳过一些步骤,具体取决于是否已经具有空分区,或者是否已经挂载了空文件系统。

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 确定所需的磁盘空间量。

    至少为每台主机指定 200 MB 磁盘空间。但是,由于所需审计量决定磁盘空间需求,因此,所需的磁盘空间可能远大于此数字。请记住要包括一个用于最后使用的目录的本地分区。

  3. 根据需要创建专用的审计分区。

    此步骤可以在服务器安装期间非常轻松地完成。另外,还可以在尚未挂载到服务器上的磁盘中创建分区。有关如何创建分区的完整说明,请参见《系统管理指南:设备和文件系统》中的第 12  章 “管理磁盘(任务)”


    # newfs /dev/rdsk/cwtxdysz
    

    其中 /dev/rdsk/cwtxdysz 是分区的原始设备名称。

    如果要审计本地主机,还要为本地主机创建最后使用的审计目录。

  4. 为每个新分区创建挂载点。


    # mkdir /var/audit/server-name.n
    

    其中 server-name.n 是服务器名称加一个标识各个分区的数字。数字是可选的,但是存在多个审计目录时,此数字非常有用。

  5. 添加自动挂载新分区的项。

    将类似以下内容的行添加到 /etc/vfstab 文件:


    /dev/dsk/cwtxdysz /dev/rdsk/cwtxdysz /var/audit/server-name.n   ufs  2  yes
  6. (可选的)删除每个分区上的最小空闲空间阈值。

    如果使用缺省配置,则会在目录的使用率达到 80% 时生成警告,出现此消息后,便无需再在分区上保留空闲空间。


    # tunefs -m 0 /var/audit/server-name.n
    
  7. 挂载新的审计分区。


    # mount /var/audit/server-name.n
    
  8. 在新分区上创建审计目录。


    # mkdir /var/audit/server-name.n/files
  9. 更正挂载点和新目录的权限。


    # chmod -R 750 /var/audit/server-name.n/files
  10. 在文件服务器上,定义其他主机可以使用的文件系统。

    通常,会安装磁盘组来存储审计记录。如果一个审计目录要供多个系统使用,则必须通过 NFS 服务来共享此目录。在 /etc/dfs/dfstab 文件中针对每个目录添加类似以下内容的项:


    share -F nfs /var/audit/server-name.n/files
  11. 在文件服务器上,重新启动 NFS 服务。

    如果该命令是已启动的第一个或第一组 share 命令,则 NFS 守护进程可能未运行。

    • 如果 NFS 服务处于脱机状态,请启用此服务。


      % svcs \*nfs\*
      
      disabled       Nov_02   svc:/network/nfs/rquota:default
      
      offline        Nov_02   svc:/network/nfs/server:default
      
      # svcadm enable network/nfs/server
      
    • 如果 NFS 服务正在运行,请重新启动此服务。


      % svcs \*nfs\*
      
      online         Nov_02   svc:/network/nfs/client:default
      
      online         Nov_02   svc:/network/nfs/server:default
      
      # svcadm restart network/nfs/server
      

    有关 NFS 服务的更多信息,请参阅《系统管理指南:网络服务》中的“设置 NFS 服务”。有关管理持久性服务的信息,请参见《系统管理指南:基本管理》中的第 14  章 “管理服务(概述)”smf(5) 手册页。


示例 29–12 创建最后使用的审计目录

运行审计服务的所有系统都应具有一个本地文件系统,当其他文件系统不可用时可以使用此本地文件系统。在本示例中,将在名为 egret 的系统上添加一个文件系统。由于此文件系统只在本地使用,因此无需执行任何关于文件服务器的步骤。


# newfs /dev/rdsk/c0t2d0

# mkdir /var/audit/egret

# grep egret /etc/vfstab

/dev/dsk/c0t2d0s1  /dev/rdsk/c0t2d0s1  /var/audit/egret ufs  2  yes  -

# tunefs -m 0 /var/audit/egret

# mount /var/audit/egret

# mkdir /var/audit/egret/files

# chmod -R 750 /var/audit/egret/files


示例 29–13 创建新的审计分区

在本示例中,将在由网络中其他系统使用的两个新磁盘上创建一个新的文件系统。


# newfs /dev/rdsk/c0t2d0

# newfs /dev/rdsk/c0t2d1

# mkdir /var/audit/egret.1

# mkdir /var/audit/egret.2

# grep egret /etc/vfstab

/dev/dsk/c0t2d0s1  /dev/rdsk/c0t2d0s1  /var/audit/egret.1 ufs  2  yes  -

/dev/dsk/c0t2d1s1  /dev/rdsk/c0t2d1s1  /var/audit/egret.2 ufs  2  yes  -

# tunefs -m 0 /var/audit/egret.1

# tunefs -m 0 /var/audit/egret.2

# mount /var/audit/egret.1

# mount /var/audit/egret.2

# mkdir /var/audit/egret.1/files

# mkdir /var/audit/egret.2/files

# chmod -R 750 /var/audit/egret.1/files /var/audit/egret.2/files

# grep egret /etc/dfs/dfstab

 share -F nfs /var/audit/egret.1/files

 share -F nfs /var/audit/egret.2/files

# svcadm enable network/nfs/server

Procedure如何配置 audit_warn 电子邮件别名

audit_warn 脚本会针对名为 audit_warn 的电子邮件别名生成邮件。要将此邮件发送到有效的电子邮件地址,可以执行步骤 2 中介绍的选项之一:

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 配置 audit_warn 电子邮件别名。

    选择以下选项之一:

    • 选项 1-使用 audit_warn 脚本中的另一个电子邮件帐户替换 audit_warn 电子邮件别名。

      在脚本的以下行中更改电子邮件别名:


      ADDRESS=audit_warn            # standard alias for audit alerts
    • 选项 2-audit_warn 电子邮件重定向到另一个邮件帐户。

      在这种情况下,需要将 audit_warn 电子邮件别名添加到适当的邮件别名文件。可以将别名添加到本地 /etc/mail/aliases 文件或名称空间中的 mail_aliases 数据库。如果 root 邮件帐户成为 audit_warn 电子邮件别名的成员,则新项可能类似以下内容:


      audit_warn: root

Procedure如何配置审计策略

审计策略确定本地主机审计记录的特征。启用审计后,/etc/security/audit_startup 文件的内容将确定审计策略。

可以使用 auditconfig 命令来检查、启用或禁用当前审计策略选项。另外,还可以通过修改 audit_startup 脚本中 auditconfig 命令的策略选项来做出永久的审计策略更改。

  1. 承担拥有审计控制配置文件的角色或成为超级用户。

    要创建拥有审计控制配置文件的角色并将该角色指定给用户,请参见配置 RBAC(任务列表)

  2. 查看审计策略。

    在启用审计之前,audit_startup 文件的内容将确定审计策略:


    #!/bin/sh
    
    /usr/bin/echo "Starting BSM services."
    
    /usr/sbin/deallocate -Is
    
    /usr/sbin/auditconfig -conf    配置事件类映射
    
    /usr/sbin/auditconfig -aconf   配置无属性事件
    
    /usr/sbin/auditconfig -setpolicy +cnt   对记录进行计数,而非删除
    
  3. 查看可用的策略选项。


    $ auditconfig -lspolicy
    

    注 –

    只能在全局区域中设置 perzoneahlt 策略选项。


  4. 启用或禁用选定的审计策略选项。


    # auditconfig -setpolicy prefixpolicy
    
    prefix

    prefix+ 会启用策略选项。prefix- 会禁用策略选项。

    policy

    选择要启用或禁用的策略。

    直到下次引导,或者由 auditconfig -setpolicy 命令修改此策略后,此策略才生效。

    有关每个策略选项的说明,请参见确定审计策略


示例 29–14 设置 cntahlt 审计策略选项

在本示例中,禁用了 cnt 策略,同时启用了 ahlt 策略。在此设置下,当审计分区已满时,会停止系统的使用。这些设置适合在安全性比可用性更重要时使用。有关设置此策略的限制的信息,请参见步骤 3

以下 audit_startup 项会在重新引导后禁用 cnt 策略,同时启用 ahlt 策略:


# cat /etc/security/audit_startup

#!/bin/sh

/usr/bin/echo "Starting BSM services."

/usr/sbin/deallocate -Is

/usr/sbin/auditconfig -conf

/usr/sbin/auditconfig -aconf

/usr/sbin/auditconfig -setpolicy -cnt	

/usr/sbin/auditconfig -setpolicy +ahlt


示例 29–15 临时设置 seq 审计策略

在本示例中,auditd 守护进程正在运行,并已设置 ahlt 审计策略。seq 审计策略添加到当前策略。seq 策略会在每条审计记录中添加 sequence 标记。在正在删除记录或审计记录已损坏时,此操作可以用来调试审计服务。

+ 前缀将 seq 选项添加到审计策略,而不是使用 seq 替换当前审计策略。auditconfig 命令直到下次调用此命令或下次引导时才使此策略生效。


$ auditconfig -setpolicy +seq

$ auditconfig -getpolicy

audit policies = ahlt,seq	


示例 29–16 设置 perzone 审计策略

在本示例中,在全局区域的 audit_startup 脚本中设置 perzone 审计策略。引导区域时,非全局区域将根据其区域中的审计配置设置收集审计记录。


$ cat /etc/security/audit_startup

#!/bin/sh

/usr/bin/echo "Starting BSM services."

/usr/sbin/deallocate -Is

/usr/sbin/auditconfig -conf

/usr/sbin/auditconfig -aconf

/usr/sbin/auditconfig -setpolicy +perzone

/usr/sbin/auditconfig -setpolicy +cnt


示例 29–17 更改审计策略

在本示例中,审计守护进程正在运行,并已设置审计策略。auditconfig 命令会针对会话持续时间更改 ahltcnt 策略。在此设置下,当审计文件系统已满时,会删除审计记录,但也会对审计记录进行计数。有关设置 ahlt 策略的限制,请参见步骤 3


$ auditconfig -setpolicy +cnt

$ auditconfig -setpolicy -ahlt

$ auditconfig -getpolicy

audit policies = cnt,seq

将更改置于 audit_startup 文件中后,更改后的策略将永久有效:


$ cat /etc/security/audit_startup

#!/bin/sh

/usr/bin/echo "Starting BSM services."

/usr/sbin/deallocate -Is

/usr/sbin/auditconfig -conf

/usr/sbin/auditconfig -aconf

/usr/sbin/auditconfig -setpolicy +cnt

不必在此文件中指定 -ahlt 选项,因为缺省情况下禁用 ahlt 策略选项。当可用性比审计记录提供的安全性更重要时,适合使用此设置。


Procedure如何启用审计

此过程在全局区域中启动审计服务。要在非全局区域中启用审计服务,请参见示例 29–18

开始之前

应该在完成以下任务后执行此过程:

  1. 成为超级用户并使系统进入单用户模式。


    % su
    
    Password: <键入超级用户口令>
    
    # init S
    

    有关更多信息,请参见 init(1M) 手册页。

  2. 运行启用审计服务的脚本。

    转至 /etc/security 目录,并在其中执行 bsmconv 脚本。


    # cd /etc/security
    
    # ./bsmconv
    
    This script is used to enable the Basic Security Module (BSM).
    
    Shall we continue with the conversion now? [y/n] y
    
    bsmconv: INFO: checking startup file.
    
    bsmconv: INFO: move aside /etc/rc3.d/S81volmgt.
    
    bsmconv: INFO: turning on audit module.
    
    bsmconv: INFO: initializing device allocation files.
    
    
    
    The Basic Security Module is ready.
    
    If there were any errors, please fix them now.
    
    Configure BSM by editing files located in /etc/security.
    
    Reboot this system now to come up with BSM enabled.

    有关此脚本的影响,请参见 bsmconv(1M) 手册页。

  3. 使系统进入多用户模式。


    # init 6
    

    启动文件 /etc/security/audit_startup 使 auditd 守护进程在系统进入多用户模式时自动运行。

    此脚本的另一个影响是启用设备分配。要配置设备分配,请参见管理设备分配(任务列表)


示例 29–18 在非全局区域中启用审计

以下示例中,在全局区域中启用审计并引导非全局区域后,全局区域管理员启动了 perzone 策略。非全局区域的区域管理员配置了此区域的审计文件,随后在此区域中启动审计守护进程。


zone1# /usr/sbin/audit -s

Procedure如何禁用审计

如果在某一点不再需要审计服务,则此过程会使系统返回到启用审计之前的系统状态。如果正在审计非全局区域,则其审计服务也将禁用。


注意 – 注意 –

此命令还禁用设备分配。如果需要分配设备,请勿运行此命令。要禁用审计并保留设备分配,请参见示例 29–19


  1. 成为超级用户并使系统进入单用户模式。


    % su
    
    Password: <键入超级用户口令>
    
    # init S
    

    有关更多信息,请参见 init(1M) 手册页。

  2. 运行此脚本以禁用审计。

    转至 /etc/security 目录,并执行 bsmunconv 脚本。


    # cd /etc/security
    
    # ./bsmunconv
    

    此脚本的另一个影响是禁用设备分配。

    有关 bsmunconv 脚本的全部影响的信息,请参见 bsmconv(1M) 手册页。

  3. 使系统进入多用户模式。


    # init 6
    

示例 29–19 禁用审计并保持设备分配

在本示例中,审计服务停止收集记录,但是设备分配继续工作。将删除 audit_control 文件中 flagsnaflagsplugin 项的所有值,同时也将删除 audit_user 文件中所有用户项。


# audit_control file

…

flags:

minfree:10

naflags:

plugin:



# audit_user file


auditd 守护进程将运行,但是不保留任何审计记录。


Procedure如何更新审计服务

当在运行守护进程之后更改审计配置时,此过程将重新启动 auditd 守护进程。

  1. 承担拥有审计控制权限配置文件的角色或成为超级用户。

    要创建拥有审计控制权限配置文件的角色并将该角色指定给用户,请参见配置 RBAC(任务列表)

  2. 选择适当的命令。

    • 如果修改 audit_control 文件中的 naflags 行,请更改无归属事件的内核掩码。


      $ /usr/sbin/auditconfig -aconf
      

      也可以重新引导。

    • 如果修改 audit_control 文件中的其他行,请重新读取 audit_control 文件。

      审计守护进程内部存储 audit_control 文件的信息。要使用新信息,请重新引导系统或指示审计守护进程读取已修改的文件。


      $ /usr/sbin/audit -s
      

      注 –

      将基于与每个进程相关联的审计预选掩码生成审计记录。执行 audit -s会在现有进程中更改掩码。要更改现有进程的预选掩码,必须重新启动此进程。也可以重新引导。


      audit -s 命令使审计守护进程从 audit_control 文件中重新读取 directoryminfree 值。此命令会更改后续登录所产生进程的预选掩码的生成。

    • 如果在审计守护进程运行时修改 audit_event 文件或 audit_class 文件,请刷新审计服务。

      将已修改事件到类的映射读入系统,并且确保正确审计使用此计算机的每个用户。


      $ auditconfig -conf
      
      $ auditconfig -setumask auid classes
      
      auid

      用户 ID。

      classes

      预选审计类。

    • 要在正在运行的系统上更改审计策略,请参见示例 29–15


示例 29–20 重新启动审计守护进程

在本示例中,系统降为单用户模式,随后回升到多用户模式。当系统进入多用户模式时,会将已修改的审计配置文件读入系统。


# init S

# init 6

管理审计记录(任务列表)

以下任务列表介绍了选择、分析和管理审计记录的过程。

任务 

说明 

参考 

显示审计记录格式 

显示为审计事件收集的信息类型和显示信息的顺序。 

如何显示审计记录格式

合并审计记录 

将多台计算机中的审计文件合并到一个审计跟踪。 

如何合并审计跟踪中的审计文件

选择要检查的记录 

选择要研究的特定事件。 

如何从审计跟踪中选择审计事件

显示审计记录 

可以查看二进制审计记录。 

如何查看二进制审计文件的内容

清除错误命名的审计文件 

向审计服务意外打开的审计文件提供结束时间标记。 

如何清除 not_terminated 审计文件

防止审计跟踪溢出 

防止写满审计文件系统。 

如何防止审计跟踪溢出

管理审计记录

通过管理审计跟踪,可以监视网络中的用户操作。审计可以生成大量数据。以下任务显示如何使用所有这些数据。

Procedure如何显示审计记录格式

要编写可查找所需审计数据的脚本,需要了解审计事件中的标记顺序。bsmrecord 命令显示审计事件的审计事件编号、审计类、选择掩码和记录格式。

    将所有审计事件记录格式置于 HTML 文件中。

    -a 选项列出所有审计事件记录格式。-h 选项以可在浏览器中显示的 HTML 格式显示此列表。


    % bsmrecord -a -h > audit.events.html
    

    在浏览器中显示 *html 文件时,请使用浏览器的“查找”工具来查找特定记录。

    有关更多信息,请参见 bsmrecord(1M) 手册页。


示例 29–21 显示程序的审计记录格式

在本示例中,将显示由 login 程序生成的所有审计记录的格式。登录程序包括 rlogintelnetnewgrp、Solaris Management Console 的角色登录,以及 Solaris 安全 Shell。


% bsmrecord -p login

terminal login

  program     /usr/sbin/login      See login(1)

              /usr/dt/bin/dtlogin  See dtlogin

  event ID    6152                 AUE_login

  class       lo                   (0x00001000)

      header

      subject

      text                         error message or "successful login"

      return



login: logout

  program     various              See login(1)

  event ID    6153                 AUE_logout

…



newgrp

  program     newgrp               See newgrp login

  event ID    6212                 AUE_newgrp_login

…



rlogin

  program     /usr/sbin/login      See login(1) - rlogin

  event ID    6155                 AUE_rlogin

…



SMC: role login

  program     SMC server           See role login

  event ID    6173                 AUE_role_login

…



/usr/lib/ssh/sshd

  program     /usr/lib/ssh/sshd    See login - ssh

  event ID    6172                 AUE_ssh

…



telnet login

  program     /usr/sbin/login      See login(1) - telnet

  event ID    6154                 AUE_telnet

  …


示例 29–22 显示审计类的审计记录格式

在本示例中,将显示 fd 类的所有审计记录的格式。


% bsmrecord -c fd



rmdir

  system call rmdir                See rmdir(2)

  event ID    48                   AUE_RMDIR

  class       fd                   (0x00000020)

      header

      path

      [attribute]

      subject

      [use_of_privilege]

      return



unlink

  system call unlink               See unlink(2)

  event ID    6                    AUE_UNLINK

  …



unlinkat

  system call unlinkat             See openat(2)

  event ID    286                  AUE_UNLINKAT

  …

Procedure如何合并审计跟踪中的审计文件

通过合并所有审计目录中的所有审计文件,可以分析整个审计跟踪的内容。auditreduce 命令将其输入文件中的所有记录合并到单个输出文件中。然后可以删除输入文件。将输出文件置于名为 /etc/security/auditserver-name/files 的目录中时,auditreduce 命令可以查找此输出文件,而无需指定全路径。


注 –

此过程仅适用于二进制审计记录。


  1. 承担拥有审计查看配置文件的角色或成为超级用户。

    系统管理员角色拥有审计查看配置文件。另外,还可以创建拥有审计查看配置文件的单独用户。要创建角色并将其指定给用户,请参见配置 RBAC(任务列表)

  2. 创建存储合并审计文件的目录。


    # mkdir audit-trail-directory
    
  3. 限制对此目录的访问。


    # chmod 700 audit-trail-directory
    
    # ls -la audit-trail-directory
    
    drwx------   3 root     sys          512 May 12 11:47 .
    
    drwxr-xr-x   4 root     sys         1024 May 12 12:47 ..
  4. 合并审计跟踪中的审计记录。

    转至 audit-trail-directory 目录并将审计记录合并到带有指定后缀的文件中。将合并在本地系统上 audit_control 文件中 dir 行列出的所有目录。


    # cd audit-trail-directory
    
    # auditreduce -Uppercase-option -O suffix
    

    auditreduce 命令的大写选项处理审计跟踪中的文件。大写选项包括以下内容:

    -A

    选择审计跟踪中的所有文件。

    -C

    只选择完整文件。此选项会忽略带有后缀 not_terminated 的文件。

    -M

    选择带有特定后缀的文件。后缀可以是机器名,也可以是为摘要文件指定的后缀。

    -O

    在当前目录中创建一个带有开始时间和结束时间的 14 字符时间标记以及后缀 suffix 的审计文件。


示例 29–23 将审计文件复制到摘要文件

在以下示例中,系统管理员角色 sysadmin 将所有文件从审计跟踪复制到合并文件中。


$ whoami

sysadmin

$ mkdir /var/audit/audit_summary.dir

$ chmod 700 /var/audit/audit_summary.dir

$ cd /var/audit/audit_summary.dir

$ auditreduce -A -O All

$ ls *All

20030827183214.20030827215318.All

在以下示例中,只将完整文件从审计跟踪复制到合并文件中。


$ cd /var/audit/audit_summary.dir

$ auditreduce -C -O Complete

$ ls *Complete

20030827183214.20030827214217.Complete

在以下示例中,只将完整文件从 example1 计算机复制到合并文件中。


$ cd /var/audit/audit_summary.dir

$ auditreduce -M example1 -O example1summ

$ ls *summ

20030827183214.20030827214217.example1summ


示例 29–24 将审计文件移动到摘要文件

auditreduce 命令的 -D 选项会在您将审计文件复制到另一位置时将其删除。在以下示例中,会将一个系统中的完整审计文件复制到摘要目录以供以后检查。


$ cd /var/audit/audit_summary.dir

$ auditreduce -C -O daily_example1 -D example1

$ ls *example1

20030827183214.20030827214217.daily_example1

当此命令成功完成时,将删除 example1 系统中的审计文件,这些审计文件是 *daily_example1 文件的输入。


Procedure如何从审计跟踪中选择审计事件

可以过滤审计记录以便检查。有关过滤选项的完整列表,请参见 auditreduce(1M) 手册页。

  1. 承担拥有审计查看配置文件的角色或成为超级用户。

    系统管理员角色拥有审计查看配置文件。另外,还可以创建拥有审计查看配置文件的单独用户。要创建角色并将其指定给用户,请参见配置 RBAC(任务列表)

  2. 从审计跟踪或指定的审计文件中选择所需的记录类型。


    auditreduce -lowercase-option argument [optional-file]
    argument

    小写选项所需的特定参数。例如,-c 选项需要审计类的 argument,例如 ua

    -d

    选择特定日期的所有事件。argument 的日期格式为 yyymmdd。其他日期选项 -b-a 选择特定日期之前和之后的事件。

    -u

    选择属于特定用户的所有事件。argument 是用户名。另一个用户选项 -e 选择属于有效用户 ID 的所有事件。

    -c

    选择预选审计类中的所有事件。argument 是审计类名。

    -m

    选择特定审计事件的所有实例。argument 是审计事件。

    optional-file

    审计文件的名称。


示例 29–25 合并和减少审计文件

auditreduce 命令可以在合并输入文件时删除不感兴趣的记录。例如,可以使用 auditreduce 命令仅保留审计文件中一个月以前的登录和退出记录。如果需要检索完整的审计跟踪,可以从备份介质中恢复此跟踪。


# cd /var/audit/audit_summary.dir

# auditreduce -O lo.summary -b 20030827 -c lo; compress *lo.summary


示例 29–26 将 na 审计记录复制到摘要文件

在本示例中,将审计跟踪中的所有无归属审计事件记录收集到一个文件中。


$ whoami

sysadmin

$ cd /var/audit/audit_summary.dir

$ auditreduce -c na -O nasumm

$ ls *nasumm

20030827183214.20030827215318.nasumm

将使用 na 记录的开始和结束日期为合并的 nasumm 审计文件添加时间标记。



示例 29–27 在指定的审计文件中查找审计事件

可以手动选择审计文件以仅搜索指定的文件组。例如,可以通过进一步处理前面示例中的 *nasumm 文件来查找系统引导事件。要执行此操作,可以指定文件名作为 auditreduce 命令的最后一个参数。


$ auditreduce -m 113 -O systemboot 20030827183214.20030827215318.nasumm

20030827183214.20030827183214.systemboot

20030827183214.20030827183214.systemboot 文件只包含系统引导审计事件。



示例 29–28 将一个用户的审计记录复制到摘要文件

在本示例中,将合并包含特定用户名称的审计跟踪中的记录。-e 选项查找有效用户。-u 选项查找审计用户。


$ cd /var/audit/audit_summary.dir

$ auditreduce -e tamiko -O tamiko

可以在此文件中查找特定事件。在以下示例中,将检查 2003 年 9 月 7 日(您的时间)用户登录和退出的时间。只检查那些以用户名作为文件后缀的文件。此日期的简捷形式为 yyyymmdd


# auditreduce -M tamiko -O tamikolo -d 20030907 -u tamiko -c lo


示例 29–29 将选定的记录复制到单个文件

在本示例中,从审计跟踪中选择特定日期的登录和退出消息。将消息合并到目标文件。目标文件将写入除常规审计根目录以外的目录中。


# auditreduce -c lo -d 20030827 -O /var/audit/audit_summary.dir/logins

# ls /var/audit/audit_summary.dir/*logins

/var/audit/audit_summary.dir/20030827183936.20030827232326.logins

Procedure如何查看二进制审计文件的内容

使用 praudit 命令,可以查看二进制审计文件的内容。可以传输 auditreduce 命令的输出,也可以读取特定审计文件。-x 选项可用于进一步处理。

  1. 承担拥有审计查看配置文件的角色或成为超级用户。

    系统管理员角色拥有审计查看配置文件。另外,还可以创建拥有审计查看配置文件的单独用户。要创建角色并将其指定给用户,请参见配置 RBAC(任务列表)

  2. 使用以下 praudit 命令之一来生成最符合您需要的输出。

    以下示例显示同一审计事件的 praudit 输出。审计策略已设置为包括 sequencetrailer 标记。

    • praudit -s 命令以短格式(每行一个标记)显示审计记录。使用 -l 选项在一行放置一条记录。


      $ auditreduce -c lo | praudit -s
      
      header,101,2,AUE_rlogin,,example1,2003-10-13 11:23:31.050 -07:00
      
      subject,jdoe,jdoe,staff,jdoe,staff,749,749,195 1234 server1
      
      text,successful login 
      
      return,success,0 
      
      sequence,1298
    • praudit -r 命令以原始格式(每行一个标记)显示审计记录。使用 -l 选项在一行放置一条记录。


      $ auditreduce -c lo | praudit -r
      
      21,101,2,6155,0x0000,192.168.60.83,1062021202,64408258
      
      36,2026700,2026700,10,2026700,10,749,749,195 1234 192.168.60.17
      
      40,successful login
      
      39,0,0
      
      47,1298
    • praudit -x 命令以 XML 格式(每行一个标记)显示审计记录。使用 -l 选项在一行放置一条记录的 XML 输出。


      $ auditreduce -c lo | praudit -x
      
      <record version="2" event="login - rlogin" host="example1" 
      
      time="Wed Aug 27 14:53:22 PDT 2003" msec="64">
      
      <subject audit-uid="jdoe" uid="jdoe" gid="staff" ruid="jdoe" 
      
      rgid="staff" pid="749" sid="749" tid="195 1234 server1"/>
      
      <text>successful login</text>
      
      <return errval="success" retval="0"/>
      
      <sequence seq-num="1298"/>
      
      
      
      </record>

示例 29–30 打印整个审计跟踪

通过 lp 命令的管道,整个审计跟踪的输出将转至打印机。打印机的访问应受到限制。


# auditreduce | praudit | lp -d example.protected.printer


示例 29–31 查看特定审计文件

在本示例中,在终端窗口中检查登录文件摘要。


# cd /var/audit/audit_summary.dir/logins

# praudit 20030827183936.20030827232326.logins | more


示例 29–32 放置 XML 格式的审计记录

在本示例中,审计记录转换为 XML 格式。


# praudit -x 20030827183214.20030827215318.logins > 20030827.logins.xml

可以在浏览器中显示 *xml 文件。可以使用脚本对文件内容进行操作,以便提取相关信息。


Procedure如何清除 not_terminated 审计文件

有时,审计守护进程退出,而其审计文件仍处于打开状态。或者,某服务器不可访问,并强制计算机切换到新服务器。在这种情况下,虽然审计文件不再用于审计记录,但此文件还是以字符串 not_terminated 作为结束时间标记。使用 auditreduce -O 命令为此文件提供正确时间标记。

  1. 在审计文件系统上,按照创建顺序列出带有 not_terminated 字符串的文件。


    # ls -R1t audit-directory*/files/* | grep not_terminated
    -R

    列出子目录中的文件。

    -t

    按照从最新到最旧的顺序列出文件。

    -1

    将文件列成一列。

  2. 清除旧的 not_terminated 文件。

    将旧文件的名称指定到 auditreduce -O 命令。


    # auditreduce -O system-name old-not-terminated-file
    
  3. 删除旧的 not_terminated 文件。


    # rm system-name old-not-terminated-file
    

示例 29–33 清除关闭的 not_terminated 审计文件

在以下示例中,查找并重命名 not_terminated 文件,然后删除原文件。


ls -R1t */files/* | grep not_terminated

…/egret.1/20030908162220.not_terminated.egret

…/egret.1/20030827215359.not_terminated.egret

# cd */files/egret.1

# auditreduce -O egret 20030908162220.not_terminated.egret

# ls -1t

20030908162220.not_terminated.egret 当前审计文件

20030827230920.20030830000909.egret 输入(旧)审计文件

20030827215359.not_terminated.egret

# rm 20030827215359.not_terminated.egret

# ls -1t

20030908162220.not_terminated.egret 当前审计文件

20030827230920.20030830000909.egret 已清除的审计文件

新文件上的开始时间标记反映 not_terminated 文件中第一个审计事件的时间。结束时间标记反映此文件中最后一个审计事件的时间。


Procedure如何防止审计跟踪溢出

如果安全策略要求保存所有审计数据,则执行以下操作:

  1. 设置计划以定期归档审计文件。

    通过将文件备份到脱机介质来归档审计文件。另外,还可以将这些文件移动到归档文件系统。

    如果正在使用 syslog 实用程序收集文本审计日志,请归档文本日志。有关更多信息,请参见 logadm(1M) 手册页。

  2. 设置计划以从审计文件系统中删除已归档审计文件。

  3. 保存和存储辅助信息。

    归档解释审计记录和审计跟踪所需的信息。

  4. 保留已归档审计文件的记录。

  5. 正确存储归档介质。

  6. 减少通过创建摘要文件存储的审计数据量。

    可以使用 auditreduce 命令的选项从审计跟踪中提取摘要文件。摘要文件只包含指定类型的审计事件的记录。要提取摘要文件,请参见示例 29–25示例 29–29

第 30 章 Solaris 审计(参考)

本章介绍重要的 Solaris 审计组件。以下是本章中参考信息的列表:

有关 Solaris 审计的概述,请参见第 27 章,Solaris 审计(概述)。有关规划建议,请参见第 28 章,规划 Solaris 审计。有关在站点上配置审计的过程,请参见第 29 章,管理 Solaris 审计(任务)

审计命令

本节提供有关以下命令的信息:

auditd 守护进程

以下列表概述了 auditd 守护进程的功能。

当系统进入多用户模式时,auditd 守护进程便会自动启动。也可以从命令行启动此守护进程。当 auditd 守护进程启动时,它会计算审计文件所需的空闲空间量。

auditd 守护进程使用 audit_control 文件中的审计目录列表作为创建审计文件的可能位置。此守护进程维护指向此目录列表的指针,该指针开始于第一个目录。每次在 auditd 守护进程需要创建审计文件时,都会将文件放入列表内的第一个可用目录中。列表开始于 auditd 守护进程的当前指针处。您可以运行 audit -s 命令将指针复位到列表的开始处。audit -n 命令指示此守护进程切换到新的审计文件。新的文件在当前文件所在的目录中创建。

audit 命令

audit 命令可控制 auditd 守护进程的操作。audit 命令可以执行以下任务:

有关可用选项的介绍,请参见 audit(1M) 手册页。

bsmrecord 命令

bsmrecord 命令可显示在 /etc/security/audit_event 文件中定义的审计事件的格式。输出包括事件的审计 ID、审计类、审计标志以及按顺序列出的记录的审计标记。如果不使用任何选项,则 bsmrecord 输出将在终端窗口中显示。如果使用 -h 选项,则输出将适合于在浏览器中进行查看。有关 bsmrecord 命令的使用示例,请参见如何显示审计记录格式。另请参见 bsmrecord(1M) 手册页。

auditreduce 命令

auditreduce 命令可汇总以二进制格式存储的审计记录。此命令可以合并来自一个或多个输入审计文件的审计记录,还可以用于执行后选审计记录。这些记录仍保持二进制格式。要合并整个审计跟踪,请在审计服务器上运行此命令。审计服务器是指挂载了用于安装的所有审计文件系统的系统。有关更多信息,请参见 auditreduce(1M) 手册页。

使用 auditreduce 命令,可以从一个位置跟踪多个系统上的所有已审计的操作。此命令可以将所有审计文件的逻辑组合作为一个审计跟踪单元进行读取。您必须对站点上要进行审计的所有系统进行相同的配置,并为审计文件创建服务器和本地目录。auditreduce 命令会忽略记录的生成方式或记录的存储位置。如果不使用选项,则 auditreduce 命令将合并审计根目录内所有子目录中的所有审计文件的审计记录。通常,/etc/security/audit 为审计根目录。auditreduce 命令将已合并的结果发送到标准输出。 您也可以将这些结果放入按时间顺序排列的单个输出文件中。 此文件包含二进制数据。

auditreduce 命令还可以选择特定的记录类型进行分析。 auditreduce 命令的合并功能和选择功能在逻辑上是相互独立的。在系统合并输入文件并将其写入磁盘之前,auditreduce 命令将在系统读取记录时从这些文件中捕获数据。

通过为 auditreduce 命令指定选项,还可以执行以下操作:

如果不使用参数,则 auditreduce 命令将检查 /etc/security/audit 目录(缺省审计根目录)中的子目录,它还会检查 start-time.end-time.hostname 文件所在的 files 目录。auditreduce 命令对于审计数据位于不同目录的情况非常有用。图 30–1 显示了不同主机上不同目录中的审计数据。图 30–2 显示了不同审计服务器上不同目录中的审计数据。

图 30–1 按主机排序的审计跟踪存储

图表显示了顶层目录名为主机名的缺省审计根目录。

图 30–2 按服务器排序的审计跟踪存储

图表显示了顶层目录名为服务器名的缺省审计根目录。

如果用于 /etc/security/audit 目录的分区非常小,则可能无法在缺省目录中存储审计数据。可以使用 -R 选项将 auditreduce 命令传递到其他目录:


# auditreduce -R /var/audit-alt 

还可以使用 -S 选项指定特定的子目录:


# auditreduce -S /var/audit-alt/host1 

有关其他选项和更多示例,请参见 auditreduce(1M) 手册页。

praudit 命令

praudit 命令可使 auditreduce 命令的二进制输出具有可读性。praudit 命令可从标准输入中读取二进制格式的审计记录,并以可显示的格式显示这些记录。输入既可以从 auditreduce 命令进行管道输出,也可以从单个审计文件进行管道输出。输入还可以使用 cat 命令生成以串联数个文件,或者针对当前审计文件使用 tail 命令生成。

praudit 命令可以生成四种输出格式。第五个选项,即 -l(长),可在每个输出行中列显一条审计记录。缺省设置为在每个输出行中放置一个审计标记。-d 选项可更改标记字段之间以及标记之间使用的分隔符。缺省分隔符为逗号。

praudit 命令的缺省输出格式中,可以轻松地将每条记录标识为一系列审计标记。每个标记都在单独的行中显示。每条记录都以 header 标记开始。例如,您可以使用 awk 命令进一步处理输出。

以下是 header 标记的 praudit -l 命令的输出:


header,173,2,settppriv(2),,example1,2003-10-13 13:46:02.174 -07:00

以下是同一 header 标记的 praudit -r 命令的输出:


121,173,2,289,0x0000,192.168.86.166,1066077962,174352445

示例 30–1 使用脚本处理 praudit 输出

您可能需要将 praudit 命令的输出作为多行文本处理。例如,您可能需要选择 auditreduce 命令无法选择的记录。您可以使用简单的 shell 脚本来处理 praudit 命令的输出。下面的简单示例脚本在每行中放置一条审计记录,搜索用户指定的字符串,然后将审计文件返回到其原始格式。


#!/bin/sh

#

## This script takes an argument of a user-specified string.

#  The sed command prefixes the header tokens with Control-A

#  The first tr command puts the audit tokens for one record 

#  onto one line while preserving the line breaks as Control-A

#

praudit | sed -e '1,2d' -e '$s/^file.*$//' -e 's/^header/^aheader/' \\

| tr '\\012\\001' '\\002\\012' \\

| grep "$1" \\ 查找用户指定的字符串

| tr '\\002' '\\012' 恢复原始的新换行符

请注意,脚本中的 ^aCtrl-A,而不是 ^a 这两个字符。前缀将 header 标记与可能显示为文本的字符串 header 区分开来。


auditconfig 命令

auditconfig 命令可提供命令行界面来检索并设置审计配置参数。auditconfig 命令可以执行以下任务:

有关命令选项的介绍,请参见 auditconfig(1M) 手册页。

在审计服务中使用的文件

审计服务使用以下文件:

system 文件

/etc/system 文件包含内核在初始化期间读取以自定义系统操作的命令。用于激活和取消激活审计功能的 bsmconv bsmunconv shell 脚本可修改 /etc/system 文件。 bsmconv shell 脚本将以下行添加到 /etc/system 文件:


set c2audit:audit_load=1

set c2audit:audit_load=1 项将导致在引导系统时装入用于审计的内核模块。bsmunconv shell 脚本将在重新引导系统时禁用审计功能。此命令可从 /etc/system 文件中删除 c2audit 行。

syslog.conf 文件

/etc/syslog.conf 文件可与 audit_control 文件结合使用以存储文本格式的审计记录。可以将 syslog.conf 文件配置为启用 syslog 实用程序来存储审计记录。有关示例,请参见如何配置 syslog 审计日志

audit_class 文件

/etc/security/audit_class 文件可定义审计类。审计类是指多组审计事件。可以使用 audit_control 文件中的类名来预选要审计其事件的类。这些类可接受前缀以仅选择失败的事件或仅选择成功的事件。有关更多信息,请参见审计类语法

超级用户或承担等效角色的管理员可以修改审计类的定义。此管理员可以通过在文本编辑器中编辑 audit_class 文件来定义新的审计类,重命名现有类,或更改现有类。有关更多信息,请参见 audit_class(4) 手册页。

audit_control 文件

每个系统上的 /etc/security/audit_control 文件都包含 auditd 守护进程的配置信息。使用此文件,每个系统都可以装入远程审计文件系统来存储其审计记录。

可以在 audit_control 文件中指定五种信息类型。每个信息行都以关键字开始。

有关 audit_control 文件的更多信息,请参见 audit_control(4) 手册页。


示例 30–2 audit_control 文件样例

以下是系统 noddyaudit_control 文件样例。noddy 使用的两个审计文件系统位于审计服务器 blinken 上,第三个审计文件系统从第二台审计服务器 winken 中装入。仅当 blinken 上的审计文件系统变满或不可用时,才使用第三个文件系统。如果 minfree 的值为 20%,则指定当文件系统的空间使用率达到 80% 时运行警告脚本。这些设置指定可以对登录和管理操作进行审计。可以对操作进行审计以查看成功和失败的情况。可以对所有类型的失败进行审计(但创建文件系统对象失败除外),还可以对不具归属性的事件进行审计。syslog 审计日志将记录较少的审计事件。此日志包含失败的登录和管理操作的文本摘要。


flags:lo,am,-all,^-fc

naflags:lo,nt

minfree:20

dir:/etc/security/audit/blinken/files

dir:/etc/security/audit/blinken.1/files

#

# Audit filesystem used when blinken fills up

#

dir:/etc/security/audit/winken

plugin:name=audit_syslog.so.1; p_flags=-lo,-am

audit_event 文件

/etc/security/audit_event 文件包含缺省的审计事件到类的映射。可以编辑此文件来更改类映射。更改类映射时,必须重新引导系统或运行 auditconfig -conf 命令以将已更改的映射读入内核。有关更多信息,请参见 audit_event(4) 手册页。

audit_startup 脚本

当系统进入多用户模式时,/etc/security/audit_startup 脚本可自动配置审计服务。在 auditd 守护进程启动之前,此脚本要执行以下任务:

有关更多信息,请参见 audit_startup(1M) 手册页。

audit_user 数据库

/etc/security/audit_user 数据库可针对单个用户修改系统范围的预选类。添加到 audit_user 数据库内用户项中的类可以通过两种方法修改 audit_control 文件中的设置:

audit_user 数据库中的每个用户项都包含三个字段:


username:always-audit-classes:never-audit-classes

审计字段将按顺序进行处理。always-audit-classes 字段打开对其中的类的审计。never-audit-classes 字段关闭对其中的类的审计。


注 –

应避免出现在 never-audit-classes 字段中放置 all 审计类这种常见错误。此错误将导致针对此用户关闭所有审计功能,从而覆盖 always-audit-classes 字段中的设置。此设置还覆盖 audit_control 文件中的系统范围的审计类设置。


用户的 never-audit-classes 设置将覆盖系统缺省设置。您可能不需要覆盖系统缺省设置。例如,假定您需要针对用户 tamiko 审计所有内容,但文件系统对象的成功读取除外。您还需要将系统缺省设置应用于 tamiko。请注意,在以下 audit_user 项中放置第二个冒号 (:):


tamiko:all,^+fr:  正确的项

正确的项意味着“始终审计所有内容,但成功的文件读取除外”。


tamiko:all:+fr    错误的项

不正确的项意味着“始终审计所有内容,但从不审计成功的文件读取”。跟在第二个冒号之后的 never-audit-classes 字段将覆盖系统缺省设置。在正确的项中,always-audit-classes 字段包括 all 审计类的例外。由于 never-audit-classes 字段中没有审计类,因此,不会覆盖 audit_control 文件中的系统缺省设置。


注 –

成功的事件和失败的事件将分别进行处理。进程针对失败事件生成的审计记录数多于针对成功事件生成的审计记录数。


audit_warn 脚本

如果 auditd 守护进程在写入审计记录时遇到异常情况,则 /etc/security/audit_warn 脚本可通知电子邮件别名。您可以针对自己的站点自定义此脚本,以便在出现可能需要手动干预的情况时发出警告。也可以指定如何自动处理这些情况。对于所有错误情况,audit_warn 脚本将带有 daemon.alert 这一严重级别的消息写入 syslog。您可以使用 syslog.conf 来配置 syslog 消息的控制台显示。audit_warn 脚本还可将消息发送到 audit_warn 电子邮件别名。应在启用审计功能时设置此别名。

auditd 守护进程检测到以下情况时,便会调用 audit_warn 脚本。此脚本向 audit_warn 别名发送电子邮件。

有关详细信息,请参见 audit_warn(1M) 手册页。

bsmconv 脚本

/etc/security/bsmconv 脚本可启用审计服务。 bsmunconv 命令可禁用审计服务。当 bsmconv 脚本运行之后,您可以配置审计目录和审计配置文件。重新引导系统时,将启用审计功能。

有关详细信息,请参见 bsmconv(1M) 手册页。

用于管理审计的权限配置文件

Solaris OS 提供了用于配置审计服务以及分析审计跟踪的权限配置文件。

有关配置角色以处理审计服务的信息,请参见配置 RBAC(任务列表)

审计和 Solaris Zones

区域就是在单个 Solaris 操作系统实例中创建的一个虚拟操作系统环境。可以在全局区域中针对所有以相同方式审计的区域设置审计策略。

以相同方式对所有区域进行审计时,只能针对审计服务自定义全局区域中的配置文件。+zonename 策略选项非常有用。当设置了此选项时,所有区域中的审计记录便会包含区域的名称。然后,可以按区域名称后选审计记录。要了解有关审计策略的信息,请参见确定审计策略。有关示例,请参见如何配置审计策略

还可以分别对各区域进行审计。在全局区域中设置了策略选项 perzone 时,每个非全局区域便会运行自己的审计守护进程,处理自己的审计队列,并指定其审计记录的内容和位置。非全局区域还可以设置多数审计策略选项。由于非全局区域不能设置影响整个系统的策略,因此,它不能设置 ahltperzone 策略。有关进一步介绍,请参见如何在区域中规划审计


注 –

如果在非全局区域中自定义了名称服务文件,但没有设置 perzone 策略,则选择可用记录时必须慎用审计工具。某个区域中的用户 ID 可以指代其他区域中具有相同 ID 的其他用户。

要生成可用的记录,请在全局区域中设置 zonename 审计策略。在全局区域中,运行带有 zonename 选项的 auditreduce 命令。然后,在 zonename 区域中,针对 auditreduce 输出运行 praudit 命令。


要了解有关区域的信息,请参见《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》中的第 II 部分, “Zones”

审计类

通过指定一个或多个事件类,可以预选 Solaris 审计的系统范围的缺省值。将在系统的 audit_control 文件中针对每个系统预选这些类。将针对这些事件类对使用系统的用户进行审计。此文件在audit_control 文件中介绍。

您可以配置审计类并创建新的审计类。审计类名称的长度最多为 8 个字符。类说明最多可包含 72 个字符。允许使用数字和非字母数字字符。

可以通过将审计类添加到 audit_user 数据库中某个用户的项,来修改针对该用户的审计内容。审计类还可用作 auditconfig 命令的参数。有关详细信息,请参见 auditconfig(1M) 手册页。

审计类的定义

下表显示了每个预定义的审计类、每个审计类的说明性名称,以及简短说明。

表 30–1 预定义的审计类

审计类 

说明性名称 

说明 

all

all

所有类(元类) 

no

no_class

用于关闭事件预选的空值

na

non_attrib

不可归属事件 

fr

file_read

读取数据,打开进行读取 

fw

file_write

写入数据,打开进行写入 

fa

file_attr_acc

访问对象属性:statpathconf

fm

file_attr_mod

更改对象属性:chownflock

fc

file_creation

创建对象 

fd

file_deletion

删除对象 

cl

file_close

close 系统调用

ap

application

应用程序定义的事件 

ad

administrative

管理操作(旧的管理元类) 

am

administrative

管理操作(元类) 

ss

system state

更改系统状态 

as

system-wide administration

系统范围的管理 

ua

user administration

用户管理 

aa

audit administration

利用审计 

ps

process start

启动和停止进程 

pm

process modify

修改进程 

pc

process

进程(元类) 

ex

exec

执行程序 

io

ioctl

ioctl() 系统调用

ip

ipc

系统 V IPC 操作

lo

login_logout

登录和注销事件 

nt

network

网络事件:bindconnect accept

ot

other

杂项,例如设备分配和 memcntl()

可以通过修改 /etc/security/audit_class 文件来定义新类,还可以重命名现有类。有关更多信息,请参见 audit_class(4) 手册页。

审计类语法

可以只针对成功情况对事件进行审计,也可以只针对失败情况对事件进行审计,还可以同时针对两种情况对事件进行审计。如果不带前缀,则同时针对成功和失败情况对事件类进行审计。如果带有加号 (+) 前缀,则对事件类进行审计以仅查看是否成功。如果带有减号 (-) 前缀,则对事件类进行审计以仅查看是否失败。下表显示了某些可能的审计类表示。

表 30–2 审计类的加号和减号前缀

[prefix]class

说明 

lo

审计所有成功的登录和注销尝试,以及所有失败的登录尝试。用户不会遇到失败的注销尝试。 

+lo

审计所有成功的登录和注销尝试。 

-all

审计所有失败的事件。 

+all

审计所有成功的事件。 


注意 – 注意 –

all 类会生成大量数据并快速填满审计文件系统。仅当具有特殊的理由审计所有活动时,才使用 all 类。


先前选择的审计类可以通过插入记号前缀 ^ 进一步修改。下表显示了插入记号前缀如何修改预选的审计类。

表 30–3 用于修改已指定的审计类的插入记号前缀

^[prefix]class

说明 

-all,^-fc

审计所有失败的事件,但不审计失败的文件对象创建尝试 

am,^+aa

审计所有管理事件以查看成功和失败的情况,但不审计成功的审计管理尝试

am,^ua

审计所有管理事件以查看成功和失败的情况,但不审计用户管理事件 

可以在以下文件和命令中使用审计类及其前缀:

有关在 audit_control 文件中使用前缀的示例,请参见audit_control 文件

审计策略

审计策略可确定是否将其他信息添加到审计跟踪中。不同审计策略选项的效果在确定审计策略中介绍。

进程审计特征

以下审计特征在初始登录时设置:

审计跟踪

审计跟踪包含二进制审计文件。此跟踪由 auditd 守护进程创建。一旦使用 bsmconv 命令启用了审计服务,auditd 守护进程便会在系统引导时启动。auditd 守护进程负责收集审计跟踪数据以及写入审计记录。

审计记录以二进制格式存储在专用于审计文件的文件系统中。即使可以实际将审计目录放在不是专用于审计的文件系统中,也不要这样做(唯一可用的目录除外)。唯一可用的目录是指仅当其他适当的目录都不可用时,可以保存审计文件的目录。

还有一种可以使审计目录位于不是专用的审计文件系统上的情况:即在是否进行审计都可以的软件开发环境下。充分利用磁盘空间可能比保存审计跟踪数据更为重要。但是,在注重安全性的环境中,将审计目录放在其他文件系统中是不可接受的。

管理审计文件系统时,还应该考虑以下因素:

二进制审计文件名称约定

每个二进制审计文件都是自包含的记录集合。文件的名称标识生成记录的时间跨度以及生成这些记录的系统。

二进制审计文件名称

已完成的审计文件具有如下名称格式:


start-time.end-time.system
start-time

审计文件中第一条审计记录的生成时间

end-time

最后一条记录写入文件的时间

system

生成文件的系统的名称

仍处于活动状态的审计具有如下名称格式:


start-time.not_terminated.system

有关 not_terminated 和关闭的审计文件名称的示例,请参见如何清除 not_terminated 审计文件

二进制审计文件时间标记

文件名中的时间标记可供 auditreduce 命令用来查找特定时间范围内的记录。由于可以在线累积一个月或更长时间的审计文件,因此,这些时间标记非常重要。要搜索在过去 24 小时内生成的记录的所有文件将需要很大开销。

start-timeend-time 是具有 1 秒分辨率的时间标记,按照格林威治标准时间 (Greenwich Mean Time, GMT) 指定。格式为四位数字表示的年,后跟两位数字表示的月、日、小时、分钟和秒,如下所示:


YYYYMMDDHHMMSS

以 GMT 表示时间标记可确保即使跨不同的时区,也可以按照正确的顺序对这些标记排序。由于时间标记以 GMT 表示,因此,必须将日期和小时转换为当前时区才有意义。每当使用标准文件命令而不是 auditreduce 命令来处理这些文件时,都要切记这一点。

审计记录结构

审计记录是一系列审计标记。每个审计标记都包含事件信息,例如用户 ID、时间和日期。由 header 标记开始审计记录,可选的 trailer 标记结束记录。其他审计标记包含与审计事件相关的信息。下图显示了典型的审计记录。

图 30–3 典型的审计记录结构

图表显示了典型的审计记录结构,其中包括 header 标记,后跟 arg、data、subject 和 return 标记。

审计记录分析

审计记录分析涉及从审计跟踪中后选记录。可以使用两种方法之一来分析收集的二进制数据。

审计标记格式

每个审计标记都有一个标记类型标识符,它后跟特定于标记的数据。每种标记类型都有自己的格式。下表显示了每个标记的标记名称以及简短说明。为了与先前的 Solaris 发行版兼容,将维护过时的标记。

表 30–4 用于 Solaris 审计的审计标记

标记名称 

说明 

更多信息 

acl

访问控制列表 (Access Control List, ACL) 信息 

acl 标记

arbitrary

具有格式和类型信息的数据 

arbitrary 标记(已过时)

arg

系统调用参数值 

arg 标记

attribute

文件 vnode 标记 

attribute 标记

cmd

命令参数和环境变量

cmd 标记

exec_args

可执行的系统调用参数 

exec_args 标记

exec_env

可执行的系统调用环境变量 

exec_env 标记

exit

程序退出信息 

exit 标记(已过时)

file

审计文件信息 

file 标记

group

进程组信息 

group 标记(已过时)

groups

进程组信息 

groups 标记

header

指示审计记录的开始 

header 标记

in_addr

Internet 地址 

in_addr 标记

ip

IP 数据包头信息 

ip 标记(已过时)

ipc

系统 V IPC 信息 

ipc 标记

ipc_perm

系统 V IPC 对象标记 

ipc_perm 标记

iport

Internet 端口地址 

iport 标记

opaque

无结构数据(未指定的格式) 

opaque 标记(已过时)

path

路径信息 

path 标记

path_attr

访问路径信息 

path_attr 标记

privilege

权限集信息 

privilege 标记

process

进程标记信息 

process 标记

return

系统调用的状态 

return 标记

sequence

序列号标记 

sequence 标记

socket

套接字类型和地址 

socket 标记

subject

主题标记信息(与 process 标记的格式相同)

subject 标记

text

ASCII 字符串 

text 标记

trailer

指示审计记录的结束 

trailer 标记

uauth

使用授权 

uauth 标记

zonename

区域名称 

zonename 标记

审计记录始终以 header 标记开始。header 标记指示审计记录在审计跟踪中的开始位置。对于可归属事件,subjectprocess 标记指代导致此事件发生的进程的值。对于不可归属事件,process 标记指代系统。

acl 标记

acl 标记可记录有关访问控制列表 (Access Control List, ACL) 的信息。此标记包含四个固定字段:

praudit 命令可按如下方式显示 acl 标记:


acl,jdoe,staff,0755

arbitrary 标记(已过时)

arbitrary 标记可封装数据以进行审计跟踪。此标记包含四个固定字段以及一个数据组。固定字段如下所示:

此标记的其余部分由指定类型的 count 组成。praudit 命令可按如下方式显示 arbitrary 标记:


arbitrary,decimal,int,1

42

下表显示了列显格式字段的可能值。

表 30–5 arbitrary 标记的列显格式字段值

值 

操作 

AUP_BINARY

以二进制格式列显日期 

AUP_OCTAL

以八进制格式列显日期 

AUP_DECIMAL

以十进制格式列显日期 

AUP_HEX

以十六进制格式列显日期 

AUP_STRING

将日期列显为字符串 

下表显示了项大小字段的可能值。

表 30–6 arbitrary 标记的项大小字段值

值 

操作 

AUR_BYTE

数据以 1 字节的字节单位列显 

AUR_SHORT

数据以 2 字节的短单位列显 

AUR_LONG

数据以 4 字节的长单位列显 

arg 标记

arg 标记包含有关系统调用参数的信息:系统调用的参数号、参数值以及可选说明。此标记允许在审计记录中使用 32 位整数的系统调用参数。arg 标记具有五个字段:

praudit 命令可按如下方式显示不包含第四个字段的 arg 标记:


argument,4,0xffbfe0ac,pri

praudit -x 命令包括显示的字段的名称:


<argument arg-num="4" value="0xffbfe0ac" desc="pri"/>

attribute 标记

attribute 标记包含文件 vnode 的信息。此标记具有七个字段:

有关文件系统 ID 和设备 ID 的详细信息,请参见 statvfs(2) 手册页。

attribute 标记通常与 path 标记同时出现。attribute 标记在搜索路径期间生成。如果出现路径搜索错误,则没有可用的 vnode 来获取必需的文件信息。因此,attribute 标记不作为审计记录的一部分包括。praudit 命令可按如下方式显示 attribute 标记:


attribute,20666,root,root,247,4829,450971566127

cmd 标记

cmd 标记记录参数列表和与命令关联的环境变量的列表。

cmd 标记包含以下字段:

praudit 命令可按如下方式显示 cmd 标记:


cmd,argcnt,3,ls,-l,/etc,envcnt,0,

exec_args 标记

exec_args 标记可记录 exec() 系统调用参数。exec_args 标记具有两个固定字段:

此标记的其余部分由 count 字符串组成。praudit 命令可按如下方式显示 exec_args 标记:


exec_args,2,vi,/etc/security/audit_user

注 –

仅当 argv 审计策略选项处于活动状态时,才输出 exec_args 标记。


exec_env 标记

exec_env 标记可记录 exec() 系统调用的当前环境变量。exec_env 标记具有两个固定字段:

此标记的其余部分由 count 字符串组成。praudit 命令可按如下方式显示 exec_env 标记:


exec_env,25,

GROUP=staff,HOME=/export/home/jdoe,HOST=exm1,HOSTTYPE=sun4u,HZ=100,

LC_COLLATE=en_US.ISO8859-1,LC_CTYPE=en_US.ISO8859-1,LC_MESSAGES=C,

LC_MONETARY=en_US.ISO8859-1,LC_NUMERIC=en_US.ISO8859-1,

LC_TIME=en_US.ISO8859-1,LOGNAME=jdoe,MACHTYPE=sparc,

MAIL=/var/mail/jdoe,OSTYPE=solaris,PATH=/usr/sbin:/usr/bin,PS1=#,

PWD=/var/audit,REMOTEHOST=192.168.13.5,SHELL=/usr/bin/csh,SHLVL=1,

TERM=dtterm,TZ=US/Pacific,USER=jdoe,VENDOR=sun

注 –

仅当 arge 审计策略选项处于活动状态时,才输出 exec_env 标记。


exit 标记(已过时)

exit 标记可记录程序的退出状态。exit 标记包含以下字段:

praudit 命令可按如下方式显示 exit 标记:


exit,Error 0,0

file 标记

file 标记是由 auditd 守护进程生成的特殊标记。当停用旧审计文件时,此标记可标记新审计文件的开始以及旧审计文件的结束。auditd 守护进程可生成包含此标记的特殊审计记录,以便将连续的审计文件同时“链接”到一个审计跟踪中。file 标记具有四个字段:

praudit -x 命令可显示 file 标记的字段:


file,2003-10-13 11:21:35.506 -07:00,

	/var/audit/localhost/files/20031013175058.20031013182135.example1

group 标记(已过时)

此标记已由 groups 标记替换。请参见groups 标记

groups 标记

groups 标记替换了 group 标记。groups 标记可记录进程凭证中的组项。groups 标记具有两个固定字段:

此标记的其余部分由 count 组项组成。praudit 命令可按如下方式显示 groups 标记:


groups,staff,admin

注 –

仅当 group 审计策略选项处于活动状态时,才输出 groups 标记。


header 标记

header 标记的特殊之处在于它标记审计记录的开始。header 标记与 trailer 标记组合使用以将记录中的所有其他标记括在一起。header 标记具有八个字段:

在 64 位系统上,header 标记使用 64 位时间标记而不是 32 位时间标记显示。

praudit 命令可按如下方式显示 ioctl() 系统调用的 header 标记:


header,176,2,ioctl(2),fe,example1,2003-09-08 11:23:31.050 -07:00

ID 修饰符字段具有以下已定义标志:


0x4000			PAD_NOTATTR						nonattributable event

0x8000			PAD_FAILURE						failed audit event

in_addr 标记

in_addr 标记包含一个 Internet 协议地址。自 Solaris 8 发行版开始,Internet 地址可以用 IPv4 格式或 IPv6 格式显示。IPv4 地址使用 4 个字节。IPv6 地址使用 1 个字节来描述地址类型,使用 16 个字节来描述地址。in_addr 标记具有三个字段:

praudit 命令可按如下方式显示不包含第二个字段的 in_addr 标记:


ip address,192.168.113.7

ip 标记(已过时)

ip 标记包含 Internet 协议数据包头的副本。ip 标记具有两个字段:

praudit 命令可按如下方式显示 ip 标记:


ip address,0.0.0.0

IP 数据包头结构在 /usr/include/netinet/ip.h 文件中定义。

ipc 标记

ipc 标记包含调用方用于标识特殊 IPC 对象的系统 V IPC 消息句柄、信号句柄或共享内存句柄。ipc 标记具有三个字段:


注 –

IPC 对象标识符不符合 Solaris 审计标记的上下文无关性质。没有可唯一地标识 IPC 对象的全局“名称”。相反,IPC 对象由其句柄标识。这些句柄仅当 IPC 对象处于活动状态时才有效。但是,标识 IPC 对象应该不存在问题。很少用到系统 V IPC 机制,并且这些机制全部共享相同的审计类。


下表显示了 IPC 对象类型字段的可能值。这些值在 /usr/include/bsm/audit.h 文件中定义。

表 30–7 IPC 对象类型字段的值

名称 

值 

说明 

AU_IPC_MSG

IPC 消息对象 

AU_IPC_SEM

IPC 信号对象 

AU_IPC_SHM

IPC 共享内存对象 

praudit 命令可按如下方式显示 ipc 标记:


IPC,msg,3

ipc_perm 标记

ipc_perm 标记包含系统 V IPC 访问权限的副本。此标记将被添加到由 IPC 共享内存事件、IPC 信号事件和 IPC 消息事件生成的审计记录中。ipc_perm 标记具有八个字段:

praudit 命令可按如下方式显示 ipc_perm 标记:


IPC perm,root,sys,root,sys,0,0,0x00000000

值来自与 IPC 对象关联的 ipc_perm 结构。

iport 标记

iport 标记包含 TCP 或 UDP 端口地址。iport 标记具有两个字段:

praudit 命令可按如下方式显示 iport 标记:


ip port,0xf6d6

opaque 标记(已过时)

opaque 标记包含作为一系列字节的未设置格式的数据。opaque 标记具有三个字段:

praudit 命令可按如下方式显示 opaque 标记:


opaque,12,0x4f5041515545204441544100

path 标记

path 标记包含对象的访问路径信息。此标记包含以下字段:

praudit 命令可按如下方式显示不包含第二个字段的 path 标记:


path,/etc/security/audit_user

praudit -x 命令可按如下方式显示 path 标记:


<path>/etc/security/audit_user</path>

下图显示了 path 标记的格式。

图 30–4 path 标记格式

上文对该图进行了说明。

path_attr 标记

path_attr 标记包含对象的访问路径信息。访问路径指定了 path 标记对象以下的属性文件对象的顺序。系统调用(例如 openat())可访问属性文件。有关属性文件对象的更多信息,请参见 fsattr(5) 手册页。

path_attr 标记包含以下字段:

praudit 命令可按如下方式显示 path_attr 标记:


path_attr,1,attr_file_name

privilege 标记

privilege 标记可记录针对进程的权限使用。并不针对基本集中的权限记录 privilege 标记。如果通过管理操作已从基本集中删除了权限,则会记录此权限的使用。有关权限的更多信息,请参见权限(概述)

privilege 标记包含以下字段:

praudit 命令可按如下方式显示 privilege 标记:


privilege,effective,

process 标记

process 标记包含有关与进程关联的用户(例如信号接收者)的信息。process 标记具有九个字段:

审计 ID、用户 ID、组 ID、进程 ID 以及会话 ID 均为长字段,而不是短字段。


注 –

process 标记的会话 ID、实际用户 ID 或实际组 ID 字段可能不可用。因此将值设置为 -1


任何包含终端 ID 的标记都具有数个变体。 praudit 命令可隐藏这些变体。因此,对于任何包含终端 ID 的标记,均采用相同的方式处理终端 ID。终端 ID 为 IP 地址、端口号或设备 ID。设备 ID(例如连接到调制解调器的串行端口)可以为零。终端 ID 通过数种格式之一进行指定。

以设备编号表示的终端 ID 按如下方式指定:

在 Solaris 8 之前的发行版中,以端口号表示的终端 ID 按如下方式指定:

自 Solaris 8 发行版开始,以端口号表示的终端 ID 按如下方式指定:

praudit 命令可按如下方式显示 process 标记:


process,root,root,sys,root,sys,0,0,0,0.0.0.0

下图显示了 process 标记的格式。

图 30–5 process 标记格式

上文中对该图形进行了说明。

return 标记

return 标记包含系统调用的返回状态 (u_error) 以及进程返回值 (u_rval1)。此标记具有三个字段:

return 标记始终作为内核针对系统调用生成的审计记录的一部分返回。在应用程序审计中,此标记指示退出状态以及其他返回值。

praudit 命令可按如下方式显示系统调用的 return 标记:


return,failure: Operation now in progress,-1

praudit -x 命令可按如下方式显示 return 标记:


<return errval="failure: Operation now in progress" retval="-1/">

sequence 标记

sequence 标记包含一个序列号。此标记用于进行调试。sequence 标记具有两个字段:

每当向审计跟踪中添加审计记录时,序列号便会增加。praudit 命令可按如下方式显示 sequence 标记:


sequence,1292

praudit -x 命令可按如下方式显示 sequence 标记:


<sequence seq-num="1292"/>

注 –

仅当 seq 审计策略选项处于活动状态时,才输出 sequence 标记。


socket 标记

socket 标记包含介绍 Internet 套接字的信息。在某些情况下,此标记具有四个字段:

praudit 命令可按如下方式显示此 socket 标记实例:


socket,0x0002,0x83b1,localhost

在大多数情况下,此标记具有八个字段:

自 Solaris 8 发行版开始,Internet 地址可以用 IPv4 格式或 IPv6 格式显示。IPv4 地址使用 4 个字节。IPv6 地址使用 1 个字节来描述地址类型,使用 16 个字节来描述地址。

praudit 命令可按如下方式显示 socket 标记:


socket,0x0002,0x0002,0x83cf,example1,0x2383,server1.Subdomain.Domain.COM

praudit -x 命令介绍了 socket 标记字段。换行的目的是为了进行显示。


<socket sock_domain="0x0002" sock_type="0x0002" lport="0x83cf" 

laddr="example1" fport="0x2383" faddr="server1.Subdomain.Domain.COM"/>

subject 标记

subject 标记可介绍执行或尝试执行某操作的用户。格式与 process 标记的格式相同。subject 标记具有九个字段:

审计 ID、用户 ID、组 ID、进程 ID 以及会话 ID 均为长字段,而不是短字段。


注 –

subject 标记的会话 ID、实际用户 ID 或实际组 ID 字段可能不可用。因此将值设置为 -1


任何包含终端 ID 的标记都具有数个变体。 praudit 命令可隐藏这些变体。因此,对于任何包含终端 ID 的标记,均采用相同的方式处理终端 ID。终端 ID 为 IP 地址、端口号或设备 ID。设备 ID(例如连接到调制解调器的串行端口)可以为零。终端 ID 通过数种格式之一进行指定。

以设备编号表示的终端 ID 按如下方式指定:

在 Solaris 8 之前的发行版中,以端口号表示的终端 ID 按如下方式指定:

自 Solaris 8 发行版开始,以端口号表示的终端 ID 按如下方式指定:

subject 标记始终作为内核针对系统调用生成的审计记录的一部分返回。praudit 命令可按如下方式显示 subject 标记:


subject,jdoe,root,staff,root,staff,424,223,0 0 example1

下图显示了 subject 标记的格式。

图 30–6 subject 标记格式

上文中对该图形进行了说明。

text 标记

text 标记包含一个文本字符串。此标记具有三个字段:

praudit 命令可按如下方式显示 text 标记:


text,logout jdoe

trailer 标记

headertrailer 这两个标记的特殊之处在于它们将审计记录的各个结束点区分开来,并将所有其他标记括在一起。header 标记可开始审计记录。trailer 标记可结束审计记录。trailer 标记是可选标记。仅当已经设置了 trail 审计策略选项时,才将 trailer 标记作为每条记录的最后一个标记添加。

在尾部打开的情况下生成审计记录时,auditreduce 命令可以检验尾部是否正确指回记录首部。trailer 标记支持向后查找审计跟踪。

trailer 标记具有三个字段:

praudit 命令可按如下方式显示不包含第二个字段的 trailer 标记:


trailer,136

uauth 标记

uauth 标记记录在命令或操作中使用的授权。

uauth 标记包含以下字段:

praudit 命令可按如下方式显示 uauth 标记:


use of authorization,solaris.admin.printer.delete

zonename 标记

zonename 标记可记录发生审计事件的区域。字符串 "global" 指示在全局区域中发生的审计事件。

zonename 标记包含以下字段:

praudit 命令可按如下方式显示 zonename 标记:


zonename,graphzone