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

第 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