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

第 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