本章介绍有助于设置和管理所审计的 Solaris 系统的过程,同时还包括管理审计跟踪的说明。以下是本章中信息的列表:
有关审计服务的概述,请参见第 27 章,Solaris 审计(概述)。有关规划建议的信息,请参见第 28 章,规划 Solaris 审计。有关参考信息,请参见第 30 章,Solaris 审计(参考)。
以下任务列表介绍了管理审计所需执行的主要任务。这些任务是有序的。
任务 |
说明 |
参考 |
---|---|---|
1. 规划审计 |
包含在配置审计服务之前要决定的配置问题。 | |
2. 配置审计文件 |
定义需要审计的事件、类和用户。 | |
3. 配置和启用审计 |
针对磁盘空间需求和其他审计服务要求配置每台主机。然后,启动审计服务。 | |
4. 管理审计记录 |
收集并分析审计数据。 |
以下任务列表介绍了在站点上配置文件以自定义审计的过程。大多数任务是可选的。
在网络中启用审计之前,可以针对站点的审计要求自定义审计配置文件。另外,还可以在启用审计服务之后重新启动审计服务或重新引导本地系统,以读取已更改的配置文件。但是,推荐的做法是在启动审计服务前尽可能多地自定义审计配置。
如果已实现区域,则可以选择从全局区域审计所有区域。要区分审计输出中的区域,可以设置 zonename 策略选项。或者,可以在全局区域中设置 perzone 策略,并在非全局区域中自定义审计配置文件,以单独审计非全局区域。有关概述,请参见审计和 Solaris Zones。有关规划的信息,请参见如何在区域中规划审计。
/etc/security/audit_control 文件配置系统范围的审计。此文件可确定审计的事件,发出审计警告的时间,以及审计文件的位置。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
(可选的)保存 audit_control 文件的副本。
# cp /etc/security/audit_control /etc/security/audit_control.orig |
修改站点的 audit_control 文件。
每一项都具有以下格式:
keyword:value |
定义行的类型。类型包括 dir、flags、minfree、naflags 和 plugin。dir 行可以重复。
有关关键字的说明,请参见以下示例。有关 plugin 项的示例,请参见如何配置 syslog 审计日志。
指定与行类型相关联的数据。
audit_control 文件中的 flags 行定义了针对系统上所有用户审计的可归属事件的类。这些类用逗号分隔。允许使用空格。在本示例中,将为所有用户审计 lo 类中的事件。
# audit_control file dir:/var/audit flags:lo minfree:20 naflags:lo |
要查看哪些事件位于 lo 类中,请读取 audit_event 文件。另外,还可以使用 bsmrecord 命令,如示例 29–22 中所示。
在本示例中,将审计 na 类中的所有事件,以及所有无归属的 login 事件。
# audit_control file dir:/var/audit flags:lo minfree:20 naflags:lo,na |
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: |
要设置文件系统来保存二进制审计数据,请参见如何创建审计文件的分区。
在本示例中,设置了所有审计文件系统的最低空闲空间级别,以便在文件系统的可用率只有 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 电子邮件别名。
可以指示审计服务只收集二进制审计数据,也可以指示审计服务收集二进制数据和文本数据。在以下过程中,将收集二进制审计数据和文本审计数据。收集的文本审计数据是二进制数据的子集。
必须在 audit_control 文件的 flags 行或 naflags 行上指定预选审计类。文本数据是预选二进制数据的子集。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
(可选的)保存 audit_control 文件的副本。
# cp /etc/security/audit_control /etc/security/audit_control.save |
添加 plugin 项。
审计服务中的插件实现审计数据的二进制输出和 syslog 输出。未指定二进制插件。必须指定 syslog 插件。有关更多信息,请参见auditd 守护进程。
plugin 项具有以下格式:
plugin:name=value; p_flags=classes |
有关 plugin 值的更多信息,请参见 audit_syslog(5) 手册页。
在 syslog.conf 文件中添加 audit.notice 项。
此项包括日志文件的位置。
# cat /etc/syslog.conf … audit.notice /var/adm/auditlog |
不应将文本日志和二进制审计文件存储在同一位置。auditreduce 命令假设审计分区中的所有文件都是二进制审计文件。
创建日志文件。
# touch /var/adm/auditlog |
# svcadm refresh system/system-log |
定期归档 syslog 日志文件。
审计服务可生成大量输出。要管理日志,请参见 logadm(1M) 手册页。
在以下示例中,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 |
flags 和 naflags 项会指示系统收集所有二进制格式的登录/退出、无归属以及系统状态更改的审计记录。plugin 项会指示 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 |
每个用户的定义都存储在 audit_user 数据库中。这些定义为指定的用户修改 audit_control 文件中的预选类。nsswitch.conf 文件确定是否使用了本地文件或名称服务数据库。要计算用户的最终审计预选掩码,请参见进程审计特征。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
(可选的)保存 audit_user 数据库的副本。
# cp /etc/security/audit_user /etc/security/audit_user.orig |
在 audit_user 数据库中添加新项。
在本地数据库中,每一项都具有以下格式:
username:always-audit:never-audit |
选择要审计的用户的名称。
选择总是应该针对指定用户进行审计的审计类列表。
选择绝对不要针对指定用户进行审计的审计类列表。
可以通过用逗号分隔审计类来指定多个类。
audit_user 项将在用户下一次登录时生效。
在本示例中,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 |
在本示例中,只在此系统上审计四个用户的登录和角色活动。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 |
当创建自己的审计类时,可以只将需要针对您所在站点审计的审计事件存放其中。在一个系统上添加该类时,应将此更改复制到正在审计的所有系统中。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
(可选的)保存 audit_class 文件的副本。
# cp /etc/security/audit_class /etc/security/audit_class.orig |
在 audit_class 文件中添加新项。
每一项都具有以下格式:
0xnumber:name:description |
将 number 标识为十六进制。
定义唯一审计类掩码。
定义审计类的字母名称。
定义审计类的说明性名称。
添加的项在该文件中必须唯一。请勿使用现有审计类掩码。
本示例会创建类来保存一个小型的审计事件组。audit_class 文件的添加项如下所示:
0x01000000:pf:profile command |
此项创建名为 pf 的新审计类。示例 29–10 填充此新审计类。
可能需要更改审计事件的类成员关系来减小现有审计类的大小,或者将事件放置在它自己的类中。在一个系统上重新配置审计事件到类的映射时,应将此更改复制到正在审计的所有系统中。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
(可选的)保存 audit_event 文件的副本。
# cp /etc/security/audit_event /etc/security/audit_event.orig |
通过更改事件的 class-list 来更改特定事件所属的类。
每一项都具有以下格式:
number:name:description:class-list |
审计事件 ID。
审计事件的名称。
通常为触发创建审计记录的系统调用或可执行文件。
审计类的逗号分隔列表。
本示例将现有审计事件映射到在示例 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 |
本示例创建用来保存监视 setuid 和 setgid 程序调用事件的类。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 别名 |
定义需要关注审计服务时应收到电子邮件警告的对象。 | |
4. (可选)更改审计策略 |
定义站点所需的其他审计数据。 | |
5. 启用审计 |
启用审计服务。 | |
6. (可选)禁用审计 |
禁用审计服务。 | |
7. (可选)重新读取审计配置更改 |
当 auditd 守护进程正在运行时,将审计配置更改读入内核。 | |
8. (可选)在非全局区域中配置审计 |
将策略设置为启用非全局区域,使其运行自己的审计守护进程 |
为站点设置配置文件之后,需要为审计文件设置磁盘空间。还需要设置审计服务的其他属性,然后启用此服务。本节还包含更改配置设置时刷新审计服务的过程。
安装非全局区域后,可以采用与审计全局区域完全相同的方式来审计此非全局区域。或者,可以在非全局区域中修改审计配置文件,以便单独审计非全局区域。要自定义审计配置文件,请参见配置审计文件(任务列表)。
以下过程说明如何创建审计文件及相应文件系统和目录的分区。根据需要可跳过一些步骤,具体取决于是否已经具有空分区,或者是否已经挂载了空文件系统。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
确定所需的磁盘空间量。
至少为每台主机指定 200 MB 磁盘空间。但是,由于所需审计量决定磁盘空间需求,因此,所需的磁盘空间可能远大于此数字。请记住要包括一个用于最后使用的目录的本地分区。
根据需要创建专用的审计分区。
此步骤可以在服务器安装期间非常轻松地完成。另外,还可以在尚未挂载到服务器上的磁盘中创建分区。有关如何创建分区的完整说明,请参见《系统管理指南:设备和文件系统》中的第 12 章 “管理磁盘(任务)”。
# newfs /dev/rdsk/cwtxdysz |
其中 /dev/rdsk/cwtxdysz 是分区的原始设备名称。
如果要审计本地主机,还要为本地主机创建最后使用的审计目录。
为每个新分区创建挂载点。
# mkdir /var/audit/server-name.n |
其中 server-name.n 是服务器名称加一个标识各个分区的数字。数字是可选的,但是存在多个审计目录时,此数字非常有用。
添加自动挂载新分区的项。
将类似以下内容的行添加到 /etc/vfstab 文件:
/dev/dsk/cwtxdysz /dev/rdsk/cwtxdysz /var/audit/server-name.n ufs 2 yes |
(可选的)删除每个分区上的最小空闲空间阈值。
如果使用缺省配置,则会在目录的使用率达到 80% 时生成警告,出现此消息后,便无需再在分区上保留空闲空间。
# tunefs -m 0 /var/audit/server-name.n |
挂载新的审计分区。
# mount /var/audit/server-name.n |
在新分区上创建审计目录。
# mkdir /var/audit/server-name.n/files |
更正挂载点和新目录的权限。
# chmod -R 750 /var/audit/server-name.n/files |
在文件服务器上,定义其他主机可以使用的文件系统。
通常,会安装磁盘组来存储审计记录。如果一个审计目录要供多个系统使用,则必须通过 NFS 服务来共享此目录。在 /etc/dfs/dfstab 文件中针对每个目录添加类似以下内容的项:
share -F nfs /var/audit/server-name.n/files |
在文件服务器上,重新启动 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) 手册页。
运行审计服务的所有系统都应具有一个本地文件系统,当其他文件系统不可用时可以使用此本地文件系统。在本示例中,将在名为 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 |
在本示例中,将在由网络中其他系统使用的两个新磁盘上创建一个新的文件系统。
# 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 |
audit_warn 脚本会针对名为 audit_warn 的电子邮件别名生成邮件。要将此邮件发送到有效的电子邮件地址,可以执行步骤 2 中介绍的选项之一:
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
配置 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 |
审计策略确定本地主机审计记录的特征。启用审计后,/etc/security/audit_startup 文件的内容将确定审计策略。
可以使用 auditconfig 命令来检查、启用或禁用当前审计策略选项。另外,还可以通过修改 audit_startup 脚本中 auditconfig 命令的策略选项来做出永久的审计策略更改。
承担拥有审计控制配置文件的角色或成为超级用户。
要创建拥有审计控制配置文件的角色并将该角色指定给用户,请参见配置 RBAC(任务列表)。
在启用审计之前,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 对记录进行计数,而非删除 |
查看可用的策略选项。
$ auditconfig -lspolicy |
只能在全局区域中设置 perzone 和 ahlt 策略选项。
启用或禁用选定的审计策略选项。
# auditconfig -setpolicy prefixpolicy |
prefix 值 + 会启用策略选项。prefix 值 - 会禁用策略选项。
选择要启用或禁用的策略。
直到下次引导,或者由 auditconfig -setpolicy 命令修改此策略后,此策略才生效。
有关每个策略选项的说明,请参见确定审计策略。
在本示例中,禁用了 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 |
在本示例中,auditd 守护进程正在运行,并已设置 ahlt 审计策略。seq 审计策略添加到当前策略。seq 策略会在每条审计记录中添加 sequence 标记。在正在删除记录或审计记录已损坏时,此操作可以用来调试审计服务。
+ 前缀将 seq 选项添加到审计策略,而不是使用 seq 替换当前审计策略。auditconfig 命令直到下次调用此命令或下次引导时才使此策略生效。
$ auditconfig -setpolicy +seq $ auditconfig -getpolicy audit policies = ahlt,seq |
在本示例中,在全局区域的 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 |
在本示例中,审计守护进程正在运行,并已设置审计策略。auditconfig 命令会针对会话持续时间更改 ahlt 和 cnt 策略。在此设置下,当审计文件系统已满时,会删除审计记录,但也会对审计记录进行计数。有关设置 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 策略选项。当可用性比审计记录提供的安全性更重要时,适合使用此设置。
此过程在全局区域中启动审计服务。要在非全局区域中启用审计服务,请参见示例 29–18。
应该在完成以下任务后执行此过程:
自定义审计文件-配置审计文件(任务列表)
设置审计分区-如何创建审计文件的分区
设置审计警告消息-如何配置 audit_warn 电子邮件别名
设置审计策略-如何配置审计策略
成为超级用户并使系统进入单用户模式。
% su Password: <键入超级用户口令> # init S |
有关更多信息,请参见 init(1M) 手册页。
运行启用审计服务的脚本。
转至 /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) 手册页。
使系统进入多用户模式。
# init 6 |
启动文件 /etc/security/audit_startup 使 auditd 守护进程在系统进入多用户模式时自动运行。
此脚本的另一个影响是启用设备分配。要配置设备分配,请参见管理设备分配(任务列表)。
以下示例中,在全局区域中启用审计并引导非全局区域后,全局区域管理员启动了 perzone 策略。非全局区域的区域管理员配置了此区域的审计文件,随后在此区域中启动审计守护进程。
zone1# /usr/sbin/audit -s |
如果在某一点不再需要审计服务,则此过程会使系统返回到启用审计之前的系统状态。如果正在审计非全局区域,则其审计服务也将禁用。
此命令还禁用设备分配。如果需要分配设备,请勿运行此命令。要禁用审计并保留设备分配,请参见示例 29–19。
成为超级用户并使系统进入单用户模式。
% su Password: <键入超级用户口令> # init S |
有关更多信息,请参见 init(1M) 手册页。
运行此脚本以禁用审计。
转至 /etc/security 目录,并执行 bsmunconv 脚本。
# cd /etc/security # ./bsmunconv |
此脚本的另一个影响是禁用设备分配。
有关 bsmunconv 脚本的全部影响的信息,请参见 bsmconv(1M) 手册页。
使系统进入多用户模式。
# init 6 |
在本示例中,审计服务停止收集记录,但是设备分配继续工作。将删除 audit_control 文件中 flags、naflags 和 plugin 项的所有值,同时也将删除 audit_user 文件中所有用户项。
# audit_control file … flags: minfree:10 naflags: plugin: # audit_user file |
auditd 守护进程将运行,但是不保留任何审计记录。
当在运行守护进程之后更改审计配置时,此过程将重新启动 auditd 守护进程。
承担拥有审计控制权限配置文件的角色或成为超级用户。
要创建拥有审计控制权限配置文件的角色并将该角色指定给用户,请参见配置 RBAC(任务列表)。
选择适当的命令。
如果修改 audit_control 文件中的 naflags 行,请更改无归属事件的内核掩码。
$ /usr/sbin/auditconfig -aconf |
也可以重新引导。
如果修改 audit_control 文件中的其他行,请重新读取 audit_control 文件。
审计守护进程内部存储 audit_control 文件的信息。要使用新信息,请重新引导系统或指示审计守护进程读取已修改的文件。
$ /usr/sbin/audit -s |
将基于与每个进程相关联的审计预选掩码生成审计记录。执行 audit -s 不会在现有进程中更改掩码。要更改现有进程的预选掩码,必须重新启动此进程。也可以重新引导。
audit -s 命令使审计守护进程从 audit_control 文件中重新读取 directory 和 minfree 值。此命令会更改后续登录所产生进程的预选掩码的生成。
如果在审计守护进程运行时修改 audit_event 文件或 audit_class 文件,请刷新审计服务。
将已修改事件到类的映射读入系统,并且确保正确审计使用此计算机的每个用户。
$ auditconfig -conf $ auditconfig -setumask auid classes |
用户 ID。
预选审计类。
要在正在运行的系统上更改审计策略,请参见示例 29–15。
在本示例中,系统降为单用户模式,随后回升到多用户模式。当系统进入多用户模式时,会将已修改的审计配置文件读入系统。
# init S # init 6 |
以下任务列表介绍了选择、分析和管理审计记录的过程。
任务 |
说明 |
参考 |
---|---|---|
显示审计记录格式 |
显示为审计事件收集的信息类型和显示信息的顺序。 | |
合并审计记录 |
将多台计算机中的审计文件合并到一个审计跟踪。 | |
选择要检查的记录 |
选择要研究的特定事件。 | |
显示审计记录 |
可以查看二进制审计记录。 | |
清除错误命名的审计文件 |
向审计服务意外打开的审计文件提供结束时间标记。 | |
防止审计跟踪溢出 |
防止写满审计文件系统。 |
通过管理审计跟踪,可以监视网络中的用户操作。审计可以生成大量数据。以下任务显示如何使用所有这些数据。
要编写可查找所需审计数据的脚本,需要了解审计事件中的标记顺序。bsmrecord 命令显示审计事件的审计事件编号、审计类、选择掩码和记录格式。
-a 选项列出所有审计事件记录格式。-h 选项以可在浏览器中显示的 HTML 格式显示此列表。
% bsmrecord -a -h > audit.events.html |
在浏览器中显示 *html 文件时,请使用浏览器的“查找”工具来查找特定记录。
有关更多信息,请参见 bsmrecord(1M) 手册页。
在本示例中,将显示由 login 程序生成的所有审计记录的格式。登录程序包括 rlogin、telnet、newgrp、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 … |
在本示例中,将显示 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 … |
通过合并所有审计目录中的所有审计文件,可以分析整个审计跟踪的内容。auditreduce 命令将其输入文件中的所有记录合并到单个输出文件中。然后可以删除输入文件。将输出文件置于名为 /etc/security/auditserver-name/files 的目录中时,auditreduce 命令可以查找此输出文件,而无需指定全路径。
此过程仅适用于二进制审计记录。
承担拥有审计查看配置文件的角色或成为超级用户。
系统管理员角色拥有审计查看配置文件。另外,还可以创建拥有审计查看配置文件的单独用户。要创建角色并将其指定给用户,请参见配置 RBAC(任务列表)。
创建存储合并审计文件的目录。
# mkdir audit-trail-directory |
限制对此目录的访问。
# 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 .. |
合并审计跟踪中的审计记录。
转至 audit-trail-directory 目录并将审计记录合并到带有指定后缀的文件中。将合并在本地系统上 audit_control 文件中 dir 行列出的所有目录。
# cd audit-trail-directory # auditreduce -Uppercase-option -O suffix |
auditreduce 命令的大写选项处理审计跟踪中的文件。大写选项包括以下内容:
选择审计跟踪中的所有文件。
只选择完整文件。此选项会忽略带有后缀 not_terminated 的文件。
选择带有特定后缀的文件。后缀可以是机器名,也可以是为摘要文件指定的后缀。
在当前目录中创建一个带有开始时间和结束时间的 14 字符时间标记以及后缀 suffix 的审计文件。
在以下示例中,系统管理员角色 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 |
auditreduce 命令的 -D 选项会在您将审计文件复制到另一位置时将其删除。在以下示例中,会将一个系统中的完整审计文件复制到摘要目录以供以后检查。
$ cd /var/audit/audit_summary.dir $ auditreduce -C -O daily_example1 -D example1 $ ls *example1 20030827183214.20030827214217.daily_example1 |
当此命令成功完成时,将删除 example1 系统中的审计文件,这些审计文件是 *daily_example1 文件的输入。
可以过滤审计记录以便检查。有关过滤选项的完整列表,请参见 auditreduce(1M) 手册页。
承担拥有审计查看配置文件的角色或成为超级用户。
系统管理员角色拥有审计查看配置文件。另外,还可以创建拥有审计查看配置文件的单独用户。要创建角色并将其指定给用户,请参见配置 RBAC(任务列表)。
从审计跟踪或指定的审计文件中选择所需的记录类型。
auditreduce -lowercase-option argument [optional-file] |
小写选项所需的特定参数。例如,-c 选项需要审计类的 argument,例如 ua。
选择特定日期的所有事件。argument 的日期格式为 yyymmdd。其他日期选项 -b 和 -a 选择特定日期之前和之后的事件。
选择属于特定用户的所有事件。argument 是用户名。另一个用户选项 -e 选择属于有效用户 ID 的所有事件。
选择预选审计类中的所有事件。argument 是审计类名。
选择特定审计事件的所有实例。argument 是审计事件。
审计文件的名称。
auditreduce 命令可以在合并输入文件时删除不感兴趣的记录。例如,可以使用 auditreduce 命令仅保留审计文件中一个月以前的登录和退出记录。如果需要检索完整的审计跟踪,可以从备份介质中恢复此跟踪。
# cd /var/audit/audit_summary.dir # auditreduce -O lo.summary -b 20030827 -c lo; compress *lo.summary |
在本示例中,将审计跟踪中的所有无归属审计事件记录收集到一个文件中。
$ whoami sysadmin $ cd /var/audit/audit_summary.dir $ auditreduce -c na -O nasumm $ ls *nasumm 20030827183214.20030827215318.nasumm |
将使用 na 记录的开始和结束日期为合并的 nasumm 审计文件添加时间标记。
可以手动选择审计文件以仅搜索指定的文件组。例如,可以通过进一步处理前面示例中的 *nasumm 文件来查找系统引导事件。要执行此操作,可以指定文件名作为 auditreduce 命令的最后一个参数。
$ auditreduce -m 113 -O systemboot 20030827183214.20030827215318.nasumm 20030827183214.20030827183214.systemboot |
20030827183214.20030827183214.systemboot 文件只包含系统引导审计事件。
在本示例中,将合并包含特定用户名称的审计跟踪中的记录。-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 |
在本示例中,从审计跟踪中选择特定日期的登录和退出消息。将消息合并到目标文件。目标文件将写入除常规审计根目录以外的目录中。
# 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 |
使用 praudit 命令,可以查看二进制审计文件的内容。可以传输 auditreduce 命令的输出,也可以读取特定审计文件。-x 选项可用于进一步处理。
承担拥有审计查看配置文件的角色或成为超级用户。
系统管理员角色拥有审计查看配置文件。另外,还可以创建拥有审计查看配置文件的单独用户。要创建角色并将其指定给用户,请参见配置 RBAC(任务列表)。
使用以下 praudit 命令之一来生成最符合您需要的输出。
以下示例显示同一审计事件的 praudit 输出。审计策略已设置为包括 sequence 和 trailer 标记。
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> |
通过 lp 命令的管道,整个审计跟踪的输出将转至打印机。打印机的访问应受到限制。
# auditreduce | praudit | lp -d example.protected.printer |
在本示例中,在终端窗口中检查登录文件摘要。
# cd /var/audit/audit_summary.dir/logins # praudit 20030827183936.20030827232326.logins | more |
在本示例中,审计记录转换为 XML 格式。
# praudit -x 20030827183214.20030827215318.logins > 20030827.logins.xml |
可以在浏览器中显示 *xml 文件。可以使用脚本对文件内容进行操作,以便提取相关信息。
有时,审计守护进程退出,而其审计文件仍处于打开状态。或者,某服务器不可访问,并强制计算机切换到新服务器。在这种情况下,虽然审计文件不再用于审计记录,但此文件还是以字符串 not_terminated 作为结束时间标记。使用 auditreduce -O 命令为此文件提供正确时间标记。
在审计文件系统上,按照创建顺序列出带有 not_terminated 字符串的文件。
# ls -R1t audit-directory*/files/* | grep not_terminated |
列出子目录中的文件。
按照从最新到最旧的顺序列出文件。
将文件列成一列。
清除旧的 not_terminated 文件。
将旧文件的名称指定到 auditreduce -O 命令。
# auditreduce -O system-name old-not-terminated-file |
删除旧的 not_terminated 文件。
# rm system-name old-not-terminated-file |
在以下示例中,查找并重命名 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 文件中第一个审计事件的时间。结束时间标记反映此文件中最后一个审计事件的时间。
如果安全策略要求保存所有审计数据,则执行以下操作:
设置计划以定期归档审计文件。
通过将文件备份到脱机介质来归档审计文件。另外,还可以将这些文件移动到归档文件系统。
如果正在使用 syslog 实用程序收集文本审计日志,请归档文本日志。有关更多信息,请参见 logadm(1M) 手册页。
保存和存储辅助信息。
归档解释审计记录和审计跟踪所需的信息。
保留已归档审计文件的记录。
正确存储归档介质。
减少通过创建摘要文件存储的审计数据量。
可以使用 auditreduce 命令的选项从审计跟踪中提取摘要文件。摘要文件只包含指定类型的审计事件的记录。要提取摘要文件,请参见示例 29–25 和示例 29–29。