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

自动安全性增强工具 (Automated Security Enhancement Tool, ASET)

Solaris 操作系统包括自动安全性增强工具 (Automated Security Enhancement Tool, ASET)。ASET 通过自动执行原本需要手动执行的任务来帮助监视和控制系统安全性。

ASET 安全软件包提供可用于控制和监视系统安全性的自动管理工具。您可以指定运行 ASET 时的安全级别。安全级别包括低、中和高。级别越高,ASET 的文件控制功能越强,从而可限制文件访问并提高系统安全性。

ASET 可以运行七项任务。每项任务都针对系统文件执行特定的检查和调整。ASET 任务可以加强对文件权限的控制,检查关键系统文件内容中的安全漏洞以及监视重要区域。ASET 还可以通过将防火墙系统的基本要求应用于网关系统来保护网络。请参见防火墙设置

ASET 使用主文件进行配置。主文件、报告和其他 ASET 文件都位于 /usr/aset 目录中。可以更改这些文件以适应您站点的特定要求。

每项任务都会生成一个报告。此报告将记录检测到的安全漏洞以及任务对系统文件所做的任何更改。以最高安全级别运行时,ASET 将尝试修复所有系统安全漏洞。如果 ASET 无法更正某个潜在的安全问题,则会报告存在此问题。

您可以通过交互地使用 /usr/aset/aset 命令来启动 ASET 会话。或者,也可以通过向 crontab 文件中加入一项,将 ASET 设置为定期运行。

ASET 任务会占用大量磁盘空间,并且会干扰常规活动。要将对系统性能的影响降至最小,可以安排 ASET 在系统活动量最少时运行。例如,每 24 或 48 小时在午夜运行一次 ASET。

ASET 安全级别

可以将 ASET 设置为在三种安全级别之一下运行:低、中或高。级别越高,ASET 的文件控制功能就越强,从而可限制文件访问并提高系统安全性。这些功能范围很广,从在不限制用户访问文件的情况下监视系统安全性,到逐渐加强对访问权限的控制直到系统完全安全为止。

下表概括了这三种安全级别。

安全级别 

说明 

低 

确保系统文件的属性设置为标准发行版的值。ASET 会执行几项检查,然后报告潜在的安全漏洞。在此级别,ASET 不执行任何操作,因此不会影响系统服务。

中 

为大多数环境提供足够的安全控制。ASET 会修改系统文件和参数的一些设置。ASET 限制系统访问以降低来自安全攻击的风险。ASET 报告安全漏洞以及它对限制访问所做的任何修改。在此级别,ASET 不会影响系统服务。

高 

实现一个高度安全的系统。ASET 会调整许多系统文件和参数设置,以最大限度地减少访问权限。大多数系统应用程序和命令将继续正常运行。但在此级别,安全方面的考虑优先于其他系统行为。


注 –

ASET 不会通过更改文件的权限来降低文件的安全性,除非您降低安全级别。您也可以专门将系统恢复到运行 ASET 之前存在的设置。


ASET 任务列表

本节介绍 ASET 所执行的任务。您应该了解每项 ASET 任务。通过了解 ASET 的目标、ASET 执行的操作以及 ASET 影响的系统组件,可以有效地理解和使用其报告。

ASET 报告文件包含的消息尽可能详细地说明了每项 ASET 任务发现的所有问题。这些消息有助于诊断和更正这些问题。但是,要成功使用 ASET,您需要对系统管理和系统组件有大致的了解。如果您是初级管理员,可以参阅其他 Solaris 系统管理文档。您可以参阅相关的手册页来学习 ASET 管理。

taskstat 实用程序用于标识已完成的任务,以及仍在运行的任务。每项完成的任务都会生成一个报告文件。有关 taskstat 实用程序的完整说明,请参阅 taskstat(1M)

系统文件权限调优

此任务会将系统文件的权限设置为指定的安全级别。此任务在安装系统时运行。如果您稍后决定更改先前建立的级别,请再次运行此任务。在低安全级别,权限会设置为适合于开放式信息共享环境的值。在中安全级别,会加强对权限的控制,以便为大多数环境提供足够高的安全性。在高安全级别,会控制权限以严格限制访问。

此任务对系统文件权限或参数设置所做的任何修改都会报告在 tune.rpt 文件中。有关 ASET 在设置权限时参考的文件的示例,请参见,请参见调优文件示例

系统文件检查

此任务会检查系统文件,并将每个文件与主文件中相应文件的说明进行比较。主文件是 ASET 首次运行此任务时创建的。主文件包含 checklist 针对指定安全级别执行的系统文件设置。

针对每种安全级别,将定义要检查其文件的目录的列表。可以使用缺省列表,也可以修改列表,以便针对每个级别指定不同的目录。

对于每个文件,会检查以下条件:

ASET 发现的任何差异都会报告在 cklist.rpt 文件中。此文件包含将系统文件大小、权限及校验和的值与主文件进行比较的结果。

用户和组检查

此任务会检查用户帐户和组的一致性和完整性。此任务使用 passwdgroup 文件中的定义。此任务检查本地口令文件、NIS 口令文件或 NIS+ 口令文件,并报告 NIS+ 的口令文件问题,但不会进行更正。此任务将检查以下违规:

差异会报告在 usrgrp.rpt 文件中。

系统配置文件检查

在执行此任务的过程中,ASET 会检查各种系统表,其中大多数系统表位于 /etc 目录中。这些文件包括:

ASET 会对这些文件执行各种检查和修改,并在 sysconf.rpt 文件中报告问题。

环境变量检查

此任务会检查为超级用户和其他用户设置 PATHUMASK 环境变量的方式,并检查 /.profile/.login/.cshrc 文件。

检查环境安全性的结果会报告在 env.rpt 文件中。

eeprom 检查

此任务会检查 eeprom 安全参数的值,以确保此参数设置在合适的安全级别。 可以将 eeprom 安全参数设置为 nonecommandfull

ASET 不会更改此设置,但会在 eeprom.rpt 文件中报告其建议。

防火墙设置

此任务确保系统可以安全地用作网络中继。此任务通过将专用系统设置为防火墙,保护内部网络不受外部公共网络的干扰,防火墙系统对此进行了说明。防火墙系统可分隔两个网络。在这种情况下,每个网络都作为不可信对象访问另一个网络。防火墙设置任务将禁止 Internet 协议 (Internet Protocol, IP) 包的转发。防火墙还会对外部网络隐藏路由信息。

防火墙任务可以在所有安全级别运行,但是仅在最高级别执行操作。如果要在高安全级别运行ASET,但发现系统不需要防火墙保护,则可以取消防火墙任务。可以通过编辑 asetenv 文件删除此任务。

所做的任何更改都会报告在 firewall.rpt 文件中。

ASET 执行日志

无论 ASET 以交互方式运行还是在后台运行,它都会生成执行日志。缺省情况下,ASET 会生成标准输出形式的日志文件。执行日志可确认 ASET 是否在指定时间运行,并且还包含所有执行错误消息。aset -n 命令指示将日志通过电子邮件发送到指定的用户。有关 ASET 选项的完整列表,请参见 aset(1M) 手册页。

ASET 执行日志文件的示例


ASET running at security level low



Machine=example; Current time = 0325_08:00





aset: Using /usr/aset as working directory



Executing task list...

        firewall

        env

        sysconfig

        usrgrp

        tune

        cklist

        eeprom

All tasks executed. Some background tasks may still be running.



Run /usr/aset/util/taskstat to check their status:

     $/usr/aset/util/taskstat     aset_dir

Where aset_dir is ASET's operating directory, currently=/usr/aset



When the tasks complete, the reports can be found in:

     /usr/aset/reports/latest/*.rpt

You can view them by:

more /usr/aset/reports/latest/*.rpt 

执行日志首先显示运行 ASET 的系统和时间。然后,执行日志会列出启动任务时的每项任务。

ASET 将针对这些任务中的每一项调用后台进程,这在ASET 任务列表中进行了说明。启动任务时,执行日志中会列出此任务。列出此任务并不意味着任务已完成。要检查后台任务的状态,请使用 taskstat 命令。

ASET 报告

由 ASET 任务生成的所有报告文件都存储在 /usr/aset/reports 目录下的子目录中。本节介绍 /usr/aset/reports 目录的结构,并提供管理报告文件的指南。

ASET 将报告文件放在子目录中,这些子目录的名称可反映报告生成时间和日期。通过此约定,可以按顺序跟踪记录,这些记录用于在系统状态随 ASET 执行的不同而变化的过程中记载系统状态。可以监视和比较这些报告以确定系统安全的可靠性。

下图显示了 reports 目录结构的示例。

图 7–1 ASET reports 目录的结构

图说明了 /usr/aset 目录下的报告目录示例。

此示例说明了两个报告子目录。

子目录的名称指明了报告的生成日期和时间。每个报告子目录名称都具有以下格式:


monthdate_hour:minute

monthdatehourminute 都是两位数字。例如,0125_01:00 表示 1 月 25 日凌晨 1 点。

这两个报告子目录都包含执行一次 ASET 所生成的报告集合。

latest 目录是始终指向包含最新报告的子目录的符号链接。因此,要查看 ASET 生成的最新报告,可以转至 /usr/aset/reports/latest 目录。此目录中包含 ASET 在最近一次执行期间所执行的每项任务的报告文件。

ASET 报告文件的格式

每个报告文件都以生成此报告的任务命名。下表列出了各项任务及其报告。

表 7–1 ASET 任务和生成的报告

任务 

报告 

系统文件权限调优 (tune)

tune.rpt

系统文件检查 (cklist)

cklist.rpt

用户和组检查 (usrgrp)

usrgrp.rpt

系统配置文件检查 (sysconf)

sysconf.rpt

环境变量检查 (env)

env.rpt

eeprom 检查 (eeprom)

eeprom.rpt

防火墙设置 (firewall)

firewall.rpt

每个报告文件中,消息括在开始标题行和结束标题行中。有时,任务会提前结束。例如,意外删除或损坏 ASET 的组件时,任务便会提前结束。在这类情况下,报告文件通常会在结尾附近包含一条消息,指明提前终止的原因。

以下是一个报告文件样例 usrgrp.rpt


*** Begin User and Group Checking ***

 

Checking /etc/passwd ...

Warning! Password file, line 10, no passwd

:sync::1:1::/:/bin/sync

..end user check; starting group check ...

Checking /etc/group...

*** End User And group Checking ***

检查 ASET 报告文件

初次运行或重新配置 ASET 之后,应该严密地检查报告文件。重新配置包括修改 asetenv 文件或 masters 子目录中的主文件,或者更改运行 ASET 的安全级别。

报告会记录在重新配置 ASET 时引起的所有错误。通过严密地查看报告,可以在出现问题时做出反应并解决问题。

比较 ASET 报告文件

在对报告文件监视一段时间(其间没有进行配置更改或系统更新)之后,您可能会发现报告的内容开始趋于稳定。如果报告包含的意外信息很少,可使用 diff 实用程序来比较这些报告。

ASET 主文件

ASET 的主文件 tune.hightune.low tune.meduid_aliases 位于 /usr/aset/masters 目录中。ASET 使用这些主文件来定义安全级别。有关更多详细信息,请参见 asetmasters(4) 手册页。

调优文件

tune.lowtune.med tune.high 主文件用于定义可用的 ASET 安全级别。这些文件可指定系统文件在每个级别的属性,用于比较和参考。

uid_aliases 文件

uid_aliases 文件包含共享同一用户 ID (user ID, UID) 的多个用户帐户的列表。通常,由于这种做法降低了可说明性,因此 ASET 会针对此类多个用户帐户发出警告。您可以通过在 uid_aliases 文件中列出例外情况来允许此规则存在例外。如果 uid_aliases 文件中指定了具有重复 UID 的项,则 ASET 不会在 passwd 文件中报告这些项。

请避免使多个用户帐户共享同一 UID。您应该考虑使用其他方法来实现目标。例如,如果要让多个用户共享一个权限集,则可以创建一个组帐户。您还可以创建角色。仅当其他方法都无法实现目标时,才应使用共享 UID 这一方法。

可以使用 UID_ALIASES 环境变量来指定备用的别名文件。缺省文件为 /usr/aset/masters/uid_aliases

核对表文件

系统文件检查所使用的主文件在首次执行 ASET 时生成,也可在更改安全级别之后运行 ASET 时生成。

以下环境变量定义了此任务检查的文件:

ASET 环境文件 (asetenv)

环境文件 asetenv 包含影响 ASET 任务的环境变量的列表。可以更改其中一些变量来修改 ASET 操作。有关 asetenv 文件的详细信息,请参见 asetenv(4)

配置 ASET

本节介绍了如何配置 ASET,还介绍了 ASET 的运行环境。

ASET 所需的管理和配置操作最少。在大多数情况下,可以使用缺省值运行 ASET。但是,也可以微调某些影响 ASET 操作和行为的参数,以便最大程度发挥此工具的优点。更改缺省值之前,应了解 ASET 如何运行以及它如何影响系统组件。

ASET 依靠四个配置文件来控制其任务的行为:

修改环境文件 (asetenv )

/usr/aset/asetenv 文件包含两个主要部分:

您可以更改用户可配置的参数部分。但是,内部环境变量部分中的设置仅供内部使用,不应修改这些设置。

您可以编辑用户可配置部分中的各项以执行以下操作:

选择要运行的任务: TASKS

ASET 执行的每项任务都会监视系统安全的特定方面。在大多数系统环境中,必须执行所有任务以便在各方面都可保证安全性。但是,您可能会决定删除一项或多项任务。

例如,防火墙任务可以在所有安全级别下运行,但是仅在高安全级别下执行操作。您可能希望在高安全级别运行 ASET,但是不需要防火墙保护。

可以将 ASET 设置为在没有防火墙功能的情况下在高安全级别运行。为此,可编辑 asetenv 文件中的环境变量的 TASKS 列表。缺省情况下,TASKS 列表包含所有的 ASET 任务。要删除某项任务,请从此文件中删除与此任务相关的环境变量。在这种情况下,可从列表中删除 firewall 环境变量。下次运行 ASET 时,便不会执行已排除的任务。

以下示例显示了包含所有 ASET 任务的 TASKS 列表。


TASKS=”env sysconfig usrgrp tune cklist eeprom firewall”

指定系统文件检查任务的目录: CKLISTPATH

系统文件检查会检查选定系统目录中的文件属性。可以使用以下环境变量来定义要检查的目录。

CKLISTPATH_LOW 变量定义要在低安全级别检查的目录。CKLISTPATH_MEDCKLISTPATH_HIGH 环境变量可分别在中安全级别和高安全级别实现类似的功能。

环境变量在较低安全级别定义的目录列表应该是在下一个较高级别定义的目录列表的子集。例如,为 CKLISTPATH_LOW 指定的所有目录应该包括在 CKLISTPATH_MED 中。同样,为 CKLISTPATH_MED 指定的所有目录应该包括在 CKLISTPATH_HIGH 中。

针对这些目录执行的检查并不是递归的。ASET 仅检查在环境变量中显式列出的那些目录,而不检查其子目录。

可以编辑这些环境变量定义,以添加或删除需要 ASET 检查的目录。请注意,这些核对表仅适用于通常不会每日更改的系统文件。例如,用户的起始目录通常动态地频繁更新,因此不适合选择用作核对表的目录。

安排 ASET 执行: PERIODIC_SCHEDULE

您可以交互地启动 ASET,也可以使用 -p 选项来请求 ASET 任务在预定时间运行。您可以定期在系统需求较少时运行 ASET。例如,ASET 可参阅 PERIODIC_SCHEDULE 来确定执行 ASET 任务的频率以及运行这些任务的时间。有关设置 ASET 使其定期运行的详细说明,请参见如何定期运行 ASET

PERIODIC_SCHEDULE 的格式遵循 crontab 项的格式。有关完整信息,请参见 crontab(1)

指定别名文件: UID_ALIASES

UID_ALIASES 变量可指定用于列出共享 UID 的别名文件。缺省文件为 /usr/aset/masters/uid_aliases

将检查扩展到 NIS+ 表: YPCHECK

YPCHECK 环境变量可指定 ASET 是否也应该检查系统配置文件表。YPCHECK 为布尔变量。 只能将 YPCHECK 指定为 true 或 false。缺省值为 false,它将禁用 NIS+ 表检查。

要了解此环境变量如何运行,请考虑其对 passwd 文件的影响。设置为 false 时,ASET 会检查本地 passwd 文件。如果设置 true,此任务还将检查系统域的 NIS+ passwd 表。


注 –

尽管 ASET 会自动修复本地文件,但是 ASET 仅报告 NIS+ 表中的潜在问题,而不会更改这些表。


修改调优文件

ASET 使用三个主调优文件 tune.lowtune.medtune.high 来放松或加强对关键系统文件的访问。这些主文件位于 /usr/aset/masters 目录中。可以修改这些文件以适合您的环境。有关示例,请参见调优文件示例

tune.low 文件可将权限设置为适合于缺省系统设置的值。tune.med 文件可进一步限制这些权限。tune.med 文件还包括 tune.low 中没有的项。tune.high 文件可更进一步限制这些权限。


注 –

可以通过添加或删除文件项来修改调优文件中的设置。无法有效地将权限设置为比当前设置限制少的值。除非将系统安全降至更低的级别,否则 ASET 任务不会放松权限。


恢复 ASET 修改的系统文件

首次执行 ASET 时,ASET 会保存并归档初始系统文件。aset.restore 实用程序可重新恢复这些文件。如果当前安排 ASET 定期执行,则此实用程序还会取消对 ASET 的安排。aset.restore 命令位于 ASET 操作目录 /usr/aset 中。

运行 aset.restore 命令时,对系统文件所做的更改会丢失。

应在以下情况下使用 aset.restore 命令:

使用 NFS 系统进行网络操作

一般情况下,ASET 在单机模式下使用,即使在网络所包含的系统中也是如此。作为独立系统的系统管理员,您要负责系统的安全。因此,您将负责运行和管理 ASET 以保护系统。

您还可以在 NFS 分布式环境中使用 ASET。作为网络管理员,您要负责为所有客户机安装、运行和管理各种管理任务。为了便于在多个客户机系统中进行 ASET 管理,可以对全局应用于所有客户机的配置进行更改。通过全局应用更改,无需登录到每个系统即可重复配置更改。

决定如何在联网系统中设置 ASET 时,应该考虑希望谁来控制安全性。您可能希望用户控制其各自系统的部分安全性,还可能希望集中负责安全控制。

为每种安全级别提供全局配置

要设置多个网络配置时可能会出现这种情况。例如,您可能要为那些指定为低安全级别的客户机设置一种配置,为中级别的客户机设置一种配置,为高级别的客户机设置另一种配置。

如果需要为每种安全级别创建单独的 ASET 网络配置,可以在服务器上创建三种 ASET 配置,为每种级别创建一种配置。可以将每种配置导出到具有相应安全级别的客户机中。对于所有三种配置都相同的某些 ASET 组件可使用链接来共享。

收集 ASET 报告

您不仅可以在服务器上集中 ASET 组件,还可以在服务器上设置中央目录以收集所有的 ASET 报告。具有或不具有超级用户权限的客户机均可访问此服务器。有关设置收集机制的说明,请参见如何在服务器上收集 ASET 报告

通过在服务器上设置报告收集,可以从一个位置查看所有客户机的报告。无论客户机是否具有超级用户权限,都可以使用此方法。或者,如果要用户监视自己的 ASET 报告,可以将报告目录保留在本地系统上。

ASET 环境变量

以下是 ASET 环境变量和这些变量指定的值的列表。

ASETDIR

指定 ASET 工作目录

ASETSECLEVEL

指定安全级别

PERIODIC_SCHEDULE

指定定期安排

TASKS

指定要运行的 ASET 任务

UID_ALIASES

指定别名文件

YPCHECK

确定是否将检查扩展到 NIS 映射和 NIS+ 表

CKLISTPATH_LOW

低安全级别的目录列表

CKLISTPATH_MED

中安全级别的目录列表

CKLISTPATH_HIGH

高安全级别的目录列表

以下各节中列出的环境变量位于 /usr/aset/asetenv 文件中。ASETDIRASETSECLEVEL 变量为可选变量。这些变量只能使用 /usr/aset/aset 命令通过 shell 来设置。其他环境变量可以通过编辑此文件来设置。

ASETDIR 环境变量

ASETDIR 用于指定 ASET 工作目录。

从 C shell 中,键入:


% setenv ASETDIR pathname 

从 Bourne shell 或 Korn shell 中,键入:


$ ASETDIR=pathname

$ export ASETDIR

pathname 设置为 ASET 工作目录的全路径名。

ASETSECLEVEL 环境变量

ASETSECLEVEL 变量指定执行 ASET 任务的安全级别。

从 C shell 中,键入:


% setenv ASETSECLEVEL level

从 Bourne shell 或 Korn shell 中,键入:


$ ASETSECLEVEL=level

$ export ASETSECLEVEL

在这些命令中,可以将 level 设置为以下各项之一:

low

低安全级别

med

中安全级别

high

高安全级别

PERIODIC_SCHEDULE 环境变量

PERIODIC_SCHEDULE 的值与 crontab 文件遵循相同的格式。将变量值指定为用双引号引起的五个字段的字符串,其中各个字段用一个空格分隔:


"minutes hours day-of-month month day-of-week"
minutes hours

以(整小时数之后经过的)分钟数 (0-59) 和小时数 (0-23) 指定开始时间。

day-of-month

指定应该运行 ASET 的月日期,值的范围为 1-31。

month

指定应该运行 ASET 的月份,值的范围为 1-12。

day-of-week

指定应该运行 ASET 的周日期,值的范围为 0-6。星期天为 0 日。

为 ASET 创建定期安排时,可应用以下规则:

如果使用 PERIODIC_SCHEDULE 变量的缺省项,则 ASET 每天在午夜 12:00 执行:


PERIODIC_SCHEDULE=”0 0 * * *” 

TASKS 环境变量

TASKS 变量用于列出 ASET 所执行的任务。缺省设置为列出所有七项任务:


TASKS=”env sysconfig usrgrp tune cklist eeprom firewall”

UID_ALIASES 环境变量

UID_ALIASES 变量用于指定别名文件。如果存在,则 ASET 会参阅此文件以获取允许的多个别名的列表。别名格式为 UID_ALIASES=pathname,其中 pathname 为别名文件的全路径名。

缺省设置如下:


UID_ALIASES=${ASETDIR}/masters/uid_aliases

YPCHECK 环境变量

YPCHECK 变量用于将检查系统表的任务扩展到包括 NIS 或 NIS+ 表。YPCHECK 变量为布尔变量,可以设置为 true 或 false。

缺省设置为 false,表示将检查限定在本地系统表:


YPCHECK=false

CKLISTPATH_level 环境变量

三个核对表路径变量用于列出系统文件检查任务要检查的目录。缺省情况下,将设置以下变量定义。这些定义说明了不同级别变量之间的关系:


CKLISTPATH_LOW=${ASETDIR}/tasks:${ASETDIR}/util:${ASETDIR}/masters:/etc

CKLISTPATH_MED=${CKLISTPATH_LOW}:/usr/bin:/usr/ucb

CKLISTPATH_HIGH=${CKLISTPATH_MED}:/usr/lib:/sbin:/usr/sbin:/usr/ucblib

核对表路径环境变量的值类似于 shell 路径变量的值。与 shell 路径变量相同,核对表路径环境变量也是目录名称的列表。这些目录名称用冒号分隔。您可以使用等号 (=) 将变量名称与其值相连。

ASET 文件示例

本节介绍一些 ASET 文件的示例,包括调优文件和别名文件。

调优文件示例

ASET 可维护三个调优文件。调优文件中的每项都占用一行。每项中的字段按以下顺序排列:


pathname mode owner group type 
pathname

文件的全路径名

mode

用于表示权限设置的五位数

owner

文件的属主

group

文件的组属主

type

文件的类型

编辑调优文件时,可应用以下规则:

别名文件示例

别名文件包含共享同一用户 ID 的别名列表。

每项都具有如下格式:

uid=alias1 =alias2=alias3=...

uid

共享的 UID。

aliasn

共享一个 UID 的用户帐户。

例如,以下项列出了 UID 0sysadmroot 帐户共享此 UID:

0=root=sysadm