跳过导航链接 | |
退出打印视图 | |
系统管理指南:安全性服务 Oracle Solaris 10 8/11 Information Library (简体中文) |
19. 使用 Oracle Solaris 安全 Shell(任务)
Oracle Solaris OS 中包含自动安全性增强工具 (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,您需要对系统管理和系统组件有大致的了解。如果您是初级管理员,可以参阅其他 Oracle Solaris 系统管理文档。您可以参阅相关的手册页来学习 ASET 管理。
taskstat 实用程序可标识已完成的任务,以及仍在运行的任务。每项完成的任务都会生成一个报告文件。有关 taskstat 实用程序的完整说明,请参阅 taskstat(1M)。
此任务会将系统文件的权限设置为指定的安全级别。此任务在安装系统时运行。如果您稍后决定更改先前确立的级别,请再次运行此任务。在低安全级别,权限会设置为适合于开放式信息共享环境的值。在中安全级别,会加强对权限的控制,以便为大多数环境提供足够高的安全性。在高安全级别,会进一步控制权限以严格限制访问。
此任务对系统文件权限或参数设置所做的任何修改都会报告在 tune.rpt 文件中。有关 ASET 在设置权限时参考的文件的示例,请参见调优文件示例。
此任务会检查系统文件,并将每个文件与主文件中相应文件的说明进行比较。主文件是 ASET 首次运行此任务时创建的。主文件包含 checklist 针对指定安全级别执行的系统文件设置。
针对每种安全级别,将定义要检查其文件的目录的列表。可以使用缺省列表,也可以修改该列表,以便针对每个级别指定不同的目录。
对于每个文件,会检查以下条件:
所有者和组
权限位
大小以及校验和
链接数目
上次修改时间
ASET 发现的任何差异都会报告在 cklist.rpt 文件中。此文件包含将系统文件大小、权限及校验和的值与主文件进行比较的结果。
此任务会检查用户帐户和组的一致性和完整性。此任务使用 passwd 和 group 文件中的定义。此任务检查本地口令文件、NIS 口令文件或 NIS+ 口令文件,并报告 NIS+ 的口令文件问题,但不会进行更正。
此任务将检查以下违规:
重复的名称或 ID
格式不正确的项
缺少口令的帐户
无效的登录目录
nobody 帐户
空的组口令
NIS 服务器或 NIS+ 服务器上的 /etc/passwd 文件中的加号 (+)
在执行此任务的过程中,ASET 会检查各种系统表,其中大多数系统表位于 /etc 目录中。
这些文件包括:
/etc/default/login
/etc/hosts.equiv
/etc/inetd.conf
/etc/aliases
/var/adm/utmpx
/.rhosts
/etc/vfstab
/etc/dfs/dfstab
/etc/ftpd/ftpusers
ASET 会对这些文件执行各种检查和修改,并在 sysconf.rpt 文件中报告问题。
此任务会检查为超级用户和其他用户设置 PATH 和 UMASK 环境变量的方式,并检查 /.profile、/.login 和 /.cshrc 文件。
此任务会检查 eeprom 安全参数的值,以确保此参数设置在合适的安全级别。可以将 eeprom 安全参数设置为 none、command 或 full。
ASET 不会更改此设置,但会在 eeprom.rpt 文件中报告其建议。
此任务确保系统可以安全地用作网络中继。此任务通过将专用系统设置为防火墙,保护内部网络不受外部公共网络的干扰,防火墙系统对此进行了说明。防火墙系统可分隔两个网络。在这种情况下,每个网络都作为不可信对象访问另一个网络。防火墙设置任务将禁止 Internet 协议 (Internet Protocol, IP) 包的转发。防火墙还会对外部网络隐藏路由信息。
防火墙任务可以在所有安全级别运行,但是仅在最高级别执行操作。如果要在高安全级别运行 ASET,但发现系统不需要防火墙保护,则可以取消防火墙任务。可以通过编辑 asetenv 文件取消此任务。
所做的任何更改都会报告在 firewall.rpt 文件中。
无论 ASET 以交互方式运行还是在后台运行,它都会生成执行日志。缺省情况下,ASET 会生成标准输出形式的日志文件。执行日志可确认 ASET 是否在指定时间运行,并且还包含所有执行错误消息。aset -n 命令指示将日志通过电子邮件发送到指定的用户。有关 ASET 选项的完整列表,请参见 aset(1M) 手册页。
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 任务生成的所有报告文件都存储在 /usr/aset/reports 目录下的子目录中。本节介绍了 /usr/aset/reports 目录的结构,并提供了管理报告文件的指南。
ASET 将报告文件放在子目录中,这些子目录的名称可反映报告生成时间和日期。通过此约定,可以按顺序跟踪记录,这些记录用于在系统状态随 ASET 执行的不同而变化的过程中记载系统状态。可以监视和比较这些报告以确定系统安全的可靠性。
下图显示了 reports 目录结构的示例。
图 7-1 ASET reports 目录的结构
此示例显示了两个报告子目录。
0124_01:00
0125_01:00
子目录的名称指明了报告的生成日期和时间。每个报告子目录名称都采用以下格式:
monthdate_hour:minute
month、date、hour 和 minute 都是两位数字。例如,0125_01:00 表示 1 月 25 日凌晨 1 点。
这两个报告子目录都包含执行一次 ASET 所生成的报告集合。
latest 目录是始终指向包含最新报告的子目录的符号链接。因此,要查看 ASET 生成的最新报告,可以转至 /usr/aset/reports/latest 目录。此目录中包含 ASET 在最近一次执行期间所执行的每项任务的报告文件。
每个报告文件都以生成此报告的任务命名。下表列出了各项任务及其报告。
表 7-1 ASET 任务和生成的报告
|
每个报告文件中,消息括在开始标题行和结束标题行中。有时,任务会提前结束。例如,意外删除或损坏 ASET 的组件时,任务便会提前结束。在这类情况下,报告文件通常会在结尾附近包含一条消息,指明提前终止的原因。
*** 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 后,应该仔细检查报告文件。重新配置包括修改 asetenv 文件或 masters 子目录中的主文件,或者更改运行 ASET 的安全级别。
报告会记录在重新配置 ASET 时引起的所有错误。通过仔细查看报告,可以在出现问题时做出反应并解决问题。
在对报告文件监视一段时间(其间没有进行配置更改或系统更新)之后,您可能会发现报告的内容开始趋于稳定。如果报告包含的意外信息很少,可以使用 diff 实用程序来比较这些报告。
ASET 的主文件 tune.high、tune.low、tune.med 和 uid_aliases 位于 /usr/aset/masters 目录中。ASET 使用这些主文件来定义安全级别。有关更多详细信息,请参见 asetmasters(4) 手册页。
tune.low、tune.med 和 tune.high 主文件用于定义可用的 ASET 安全级别。这些文件可指定系统文件在每个级别的属性,用于比较和参考。
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 时生成。
CKLISTPATH_LOW
CKLISTPATH_MED
CKLISTPATH_HIGH
环境文件 asetenv 包含影响 ASET 任务的环境变量的列表。可以更改其中一些变量来修改 ASET 操作。有关 asetenv 文件的详细信息,请参见 asetenv(4)。
本节介绍了如何配置 ASET,还介绍了 ASET 的运行环境。
ASET 所需的管理和配置操作最少。在大多数情况下,可以使用缺省值运行 ASET。但是,也可以微调某些影响 ASET 操作和行为的参数,以便最大程度发挥此工具的优点。更改缺省值之前,应了解 ASET 如何运行以及它如何影响系统组件。
ASET 依靠四个配置文件来控制其任务的行为:
/usr/aset/asetenv
/usr/aset/masters/tune.low
/usr/aset/masters/tune.med
/usr/aset/masters/tune.high
/usr/aset/asetenv 文件包含两个主要部分:
用户可配置的环境变量部分
内部环境变量部分
您可以更改用户可配置的参数部分。但是,内部环境变量部分中的设置仅供内部使用,不应修改这些设置。
您可以编辑用户可配置部分中的各项以执行以下操作:
选择要运行的任务
指定系统文件检查任务的目录
安排 ASET 执行
指定 UID 别名文件
将检查扩展到 NIS+ 表
ASET 执行的每项任务都会监视系统安全的特定方面。在大多数系统环境中,必须执行所有任务以便在各方面都可保证安全性。但是,您可能会决定删除一项或多项任务。
例如,防火墙任务可以在所有安全级别下运行,但是仅在高安全级别下执行操作。您可能希望在高安全级别运行 ASET,但是不需要防火墙保护。
可以将 ASET 设置为在没有防火墙功能的情况下在高安全级别运行。为此,可编辑 asetenv 文件中环境变量的 TASKS 列表。缺省情况下,TASKS 列表包含所有的 ASET 任务。要删除某项任务,请从此文件中删除与此任务相关的环境变量。在这种情况下,可从列表中删除 firewall 环境变量。下次运行 ASET 时,便不会执行已排除的任务。
以下示例显示了包含所有 ASET 任务的 TASKS 列表。
TASKS=”env sysconfig usrgrp tune cklist eeprom firewall”
系统文件检查会检查选定系统目录中的文件属性。可以使用以下环境变量来定义要检查的目录。
CKLISTPATH_LOW 变量定义要在低安全级别检查的目录。CKLISTPATH_MED 和 CKLISTPATH_HIGH 环境变量可分别在中安全级别和高安全级别实现类似的功能。
环境变量在较低安全级别定义的目录列表应该是在下一个较高级别定义的目录列表的子集。例如,为 CKLISTPATH_LOW 指定的所有目录应该包括在 CKLISTPATH_MED 中。同样,为 CKLISTPATH_MED 指定的所有目录应该包括在 CKLISTPATH_HIGH 中。
针对这些目录执行的检查并不是递归的。ASET 仅检查在环境变量中显式列出的那些目录,而不检查其子目录。
可以编辑这些环境变量定义,以添加或删除需要 ASET 检查的目录。请注意,这些核对表仅适用于通常不会每日更改的系统文件。例如,用户的起始目录通常动态地频繁更新,因此不适合选择用作核对表的目录。
您可以交互地启动 ASET,也可以使用 -p 选项来请求 ASET 任务在预定时间运行。您可以定期在系统需求较少时运行 ASET。例如,ASET 可参阅 PERIODIC_SCHEDULE 来确定执行 ASET 任务的频率以及运行这些任务的时间。有关设置 ASET 使其定期运行的详细说明,请参见如何定期运行 ASET。
PERIODIC_SCHEDULE 的格式遵循 crontab 项的格式。有关完整信息,请参见 crontab(1)。
UID_ALIASES 变量可指定用于列出共享 UID 的别名文件。缺省文件为 /usr/aset/masters/uid_aliases。
YPCHECK 环境变量可指定 ASET 是否也应该检查系统配置文件表。YPCHECK 为布尔变量。只能将 YPCHECK 指定为 true 或 false。缺省值为 false,它将禁用 NIS+ 表检查。
要了解此环境变量如何运行,请考虑其对 passwd 文件的影响。设置为 false 时,ASET 会检查本地 passwd 文件。如果设置 true,此任务还将检查系统域的 NIS+ passwd 表。
注 - 尽管 ASET 会自动修复本地文件,但是 ASET 仅报告 NIS+ 表中的潜在问题,而不会更改这些表。
ASET 使用三个主调优文件(tune.low、tune.med 和 tune.high)来放松或加强对关键系统文件的访问。这些主文件位于 /usr/aset/masters 目录中。可以修改这些文件以适合您的环境。有关示例,请参见调优文件示例。
tune.low 文件可将权限设置为适合于缺省系统设置的值。tune.med 文件可进一步限制这些权限。tune.med 文件还包括 tune.low 中没有的项。tune.high 文件可更进一步限制这些权限。
首次执行 ASET 时,ASET 会保存并归档初始系统文件。aset.restore 实用程序可重新恢复这些文件。如果当前安排 ASET 定期执行,则此实用程序还会取消对 ASET 的安排。aset.restore 命令位于 ASET 操作目录 /usr/aset 中。
运行 aset.restore 命令时,对系统文件所做的更改会丢失。
应在以下情况下使用 aset.restore 命令:
要删除 ASET 更改并恢复初始系统。
如果先前已将 aset 命令添加到根目录的 crontab,则要永久取消激活 ASET 时,可以从 cron 调度中删除 ASET。有关如何使用 cron 删除自动执行的任务的说明,请参见如何停止定期运行 ASET。
试用 ASET 一段时间后,希望恢复初始系统状态。
某些主要系统功能没有正常运行,并且您怀疑问题是由 ASET 引起时。
一般情况下,ASET 在单机模式下使用,即使在网络所包含的系统中也是如此。作为独立系统的系统管理员,您要负责系统的安全。因此,您将负责运行和管理 ASET 以保护系统。
您还可以在 NFS 分布式环境中使用 ASET。作为网络管理员,您要负责为所有客户机安装、运行和管理各种管理任务。为了便于在多个客户机系统中进行 ASET 管理,可以对全局应用于所有客户机的配置进行更改。通过全局应用更改,无需登录到每个系统即可重复配置更改。
决定如何在联网系统中设置 ASET 时,应该考虑希望谁来控制安全性。您可能希望用户控制其各自系统的部分安全性,还可能希望集中负责安全控制。
要设置多个网络配置时可能会出现这种情况。例如,您可能要为那些指定为低安全级别的客户机设置一种配置,为中级别的客户机设置一种配置,为高级别的客户机设置另一种配置。
如果需要为每种安全级别创建单独的 ASET 网络配置,可以在服务器上创建三种 ASET 配置,为每种级别创建一种配置。可以将每种配置导出到具有相应安全级别的客户机中。对于所有三种配置都相同的某些 ASET 组件可使用链接来共享。
您不仅可以在服务器上集中 ASET 组件,还可以在服务器上设置中央目录以收集所有的 ASET 报告。具有或不具有超级用户特权的客户机均可访问此服务器。有关设置收集机制的说明,请参见如何在服务器上收集 ASET 报告。
通过在服务器上设置报告收集,可以从一个位置查看所有客户机的报告。无论客户机是否具有超级用户特权,都可以使用此方法。或者,如果要用户监视自己的 ASET 报告,可以将报告目录保留在本地系统上。
指定 ASET 工作目录
指定安全级别
指定定期安排
指定要运行的 ASET 任务
指定别名文件
确定是否将检查扩展到 NIS 映射和 NIS+ 表
低安全级别的目录列表
中安全级别的目录列表
高安全级别的目录列表
以下各节中列出的环境变量位于 /usr/aset/asetenv 文件中。ASETDIR 和 ASETSECLEVEL 变量为可选变量。只能使用 /usr/aset/aset 命令通过 shell 来设置这些变量。可以通过编辑此文件来设置其他环境变量。
从 C shell 中,键入:
% setenv ASETDIR pathname
从 Bourne shell 或 Korn shell 中,键入:
$ ASETDIR=pathname $ export ASETDIR
将 pathname 设置为 ASET 工作目录的全路径名。
ASETSECLEVEL 变量用于指定执行 ASET 任务的安全级别。
从 C shell 中,键入:
% setenv ASETSECLEVEL level
从 Bourne shell 或 Korn shell 中,键入:
$ ASETSECLEVEL=level $ export ASETSECLEVEL
在这些命令中,可以将 level 设置为以下各项之一:
低安全级别
中安全级别
高安全级别
PERIODIC_SCHEDULE 的值与 crontab 文件遵循相同的格式。将变量值指定为用双引号引起的五个字段的字符串,其中各个字段用一个空格分隔:
"minutes hours day-of-month month day-of-week"
以(整小时数之后经过的)分钟数 (0-59) 和小时数 (0-23) 指定开始时间。
指定应该运行 ASET 的月日期,值的范围为 1-31。
指定应该运行 ASET 的月份,值的范围为 1-12。
指定应该运行 ASET 的周日期,值的范围为 0-6。星期天为第 0 天。
为 ASET 创建定期安排时,可应用以下规则:
可以为任何字段指定值的列表,各个值用逗号分隔。
可以将值指定为数字,也可以将值指定为一个范围。范围是由连字符连接的一对数字。范围表明了 ASET 任务应该在此范围所包括的所有时间执行。
如果使用 PERIODIC_SCHEDULE 变量的缺省项,则 ASET 每天在午夜 12:00 执行:
PERIODIC_SCHEDULE=”0 0 * * *”
TASKS 变量用于列出 ASET 所执行的任务。缺省设置为列出所有七项任务:
TASKS=”env sysconfig usrgrp tune cklist eeprom firewall”
UID_ALIASES 变量用于指定别名文件。如果存在,则 ASET 会参阅此文件以获取允许的多个别名的列表。别名格式为 UID_ALIASES=pathname,其中 pathname 为别名文件的全路径名。
缺省设置如下:
UID_ALIASES=${ASETDIR}/masters/uid_aliases
YPCHECK 变量用于将检查系统表的任务扩展到包括 NIS 或 NIS+ 表。YPCHECK 变量为布尔变量,可以设置为 true 或 false。
缺省设置为 false,表示将检查限定在本地系统表:
YPCHECK=false
三个核对表路径变量用于列出系统文件检查任务要检查的目录。缺省情况下,将设置以下变量定义。这些定义说明了不同级别变量之间的关系:
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 可维护三个调优文件。调优文件中的每项都占用一行。每项中的字段按以下顺序排列:
pathname mode owner group type
文件的全路径名
用于表示权限设置的五位数
文件的所有者
文件的组所有者
文件的类型
可在路径名中使用常规的 shell 通配符(例如星号 ( *) 和问号 (?)),以便引用多个路径。有关更多信息,请参见 sh(1)。
mode 表示限制性最低的值。如果当前设置已经比指定值的限制性高,则 ASET 不会放松权限设置。例如,如果指定的值为 00777,则权限保持不变,因为 00777 始终比当前设置的限制性低。
此过程说明 ASET 如何处理模式设置。如果降低安全级别或删除 ASET,则此过程会有所不同。从先前执行时的级别降低安全级别时,或是要将系统文件恢复到首次执行 ASET 之前的状态时,ASET 可识别正在执行的操作并降低保护级别。
对于 owner 和 group,必须使用名称而不是数字 ID。
可以使用问号 (?) 来代替 owner、group 和 type,以防止 ASET 更改这些参数的现有值。
type 可以是 symlink、目录或文件。symlink 是符号链接。
较高安全级别的调优文件可将文件权限重置为至少与较低级别的文件权限具有相同限制。另外,在较高的安全级别,还会向列表中添加其他文件。
一个文件可以与多个调优文件项相匹配。例如,etc/passwd 与 etc/pass* 和 /etc/* 项相匹配。
如果两个项具有不同权限,则文件权限将设置为限制性最高的值。在以下示例中,/etc/passwd 文件的权限设置为 00755,这是 00755 和 00770 中限制性较高的值。
/etc/pass* 00755 ? ? file /etc/* 00770 ? ? file
如果两个项指定的 owner 或 group 不同,则后一项优先级更高。在以下示例中,/usr/sbin/chroot 的所有者设置为 root。
/usr/sbin/chroot 00555 bin bin file /usr/sbin/chroot 00555 root bin file
每一项均采用以下格式:
uid=alias1 =alias2=alias3 =...
共享的 UID。
共享一个 UID 的用户帐户。
例如,以下项列出了 UID 0。sysadm 和 root 帐户共享此 UID:
0=root=sysadm