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

配置审计文件

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

如果已实现区域,则可以选择从全局区域审计所有区域。要区分审计输出中的区域,可以设置 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