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

第 2 部分 系统、文件和设备安全性

本部分介绍可以在非联网系统上配置的安全性。以下各章讨论了如何规划、监视和控制对磁盘、文件及外围设备的访问。

第 2 章 管理计算机安全性(概述)

保持计算机的信息安全是一项重要的系统管理任务。本章概述了有关管理计算机安全性的信息。

以下是本章中概述信息的列表:

Solaris 10 发行版中计算机安全性的增强

从 Solaris 9 发行版开始,已经引入了以下功能来增强系统安全:

控制对计算机系统的访问

在工作场所中,可以将所有与服务器连接的计算机视为一个大型的多功能系统。您要负责此大型系统的安全性。您需要保护网络,防止其受到尝试访问此网络的外来者的破坏,还需要确保网络中各计算机上的数据的完整性。

在文件级别,Solaris OS 提供了可用于保护文件、目录和设备的标准安全功能。在系统和网络级别,安全问题基本相同。第一道安全防线是控制对系统的访问。您可以执行以下操作来控制和监视系统访问:

维护物理安全性

要控制对系统的访问,必须维护计算环境的物理安全性。例如,处于登录状态并且无人值守的系统容易受到未经授权的访问攻击。入侵者可以获取访问操作系统和网络的权限。应该物理保护计算机环境和计算机硬件,防止其受到未经授权的访问攻击。

您可以保护 SPARC 系统,防止硬件设置受到未经授权的访问。使用 eeprom 命令要求在访问 PROM 时提供口令。有关更多信息,请参见如何要求硬件访问口令

维护登录控制

您还必须防止对系统或网络进行未经授权的登录,这可以通过指定口令和控制登录来实现。系统上的所有帐户都应该具有口令。口令是一种简单的验证机制。如果帐户没有设置口令,则猜中用户名的入侵者可以访问整个网络。强口令算法可防止强力攻击。

用户登录系统时,login 命令会根据 /etc/nsswitch.conf 文件中列出的信息检查相应的名称服务或目录服务数据库。此文件包括以下项:

有关 nsswitch.conf 文件的说明,请参见 nsswitch.conf(4) 手册页。有关名称服务和目录服务的信息,请参见《系统管理指南:名称和目录服务(DNS、NIS 和 LDAP)》《System Administration Guide: Naming and Directory Services (NIS+)》

login 命令会检验用户提供的用户名和口令。如果用户名不在口令文件中,则 login 命令会拒绝对系统进行访问。如果口令对于指定的用户名而言不正确,则 login 命令会拒绝对系统进行访问。当用户提供有效的用户名及其对应口令时,系统会授予此用户访问系统的权限。

成功登录到系统之后,可使用 PAM 模块简化应用程序登录。有关更多信息,请参见第 16 章,使用 PAM

Solaris 系统提供了完善的验证和授权机制。有关网络级别的验证和授权机制的介绍,请参见远程访问的验证和授权

管理口令信息

用户登录系统时,必须提供用户名和口令。尽管登录名是公开的,但是口令必须保密。口令应该只有每个用户才知道。应该要求用户谨慎选择其口令。用户应该经常更改其口令。

口令最初是在设置用户帐户时创建的。要维护用户帐户的安全性,可以设置口令生命期,以便强制用户定期更改其口令。还可以通过锁定口令来禁用用户帐户。有关管理口令的详细信息,请参见《系统管理指南:基本管理》中的第 4  章 “管理用户帐户和组(概述)”以及 passwd(1) 手册页。

本地口令

如果网络使用本地文件来验证用户,则口令信息保存在系统的 /etc/passwd/etc/shadow 文件中。用户名和其他信息保存在口令文件 /etc/passwd 中。加密的口令本身保存在单独的阴影文件 /etc/shadow 中。这种安全措施可防止用户获取访问加密口令的权限。尽管任何可以登录到系统的用户都能使用 /etc/passwd 文件,但是仅有超级用户或等效角色才能读取 /etc/shadow 文件。可以使用 passwd 命令来更改本地系统上的用户口令。

NIS 和 NIS+ 口令

如果网络使用 NIS 来验证用户,则口令信息保存在 NIS 口令列表中。NIS 不支持口令生命期。可以使用命令 passwd -r nis 来更改存储在 NIS 口令列表中的用户口令。

如果网络使用 NIS+ 来验证用户,则口令信息保存在 NIS+ 数据库中。可以通过仅允许授权用户进行访问来保护 NIS+ 数据库中的信息。可以使用 passwd -r nisplus 命令来更改存储在 NIS+ 数据库中的用户口令。

LDAP 口令

Solaris LDAP 名称服务将口令信息和阴影信息存储在 LDAP 目录树的 ou=people 容器中。在 Solaris LDAP 名称服务客户机上,可以使用 passwd -r ldap 命令来更改用户口令。LDAP 名称服务将口令存储在 LDAP 系统信息库中。

在 Solaris 10 发行版中,口令策略是在 Sun JavaTM System Directory Server 上强制执行的。具体而言,客户机的 pam_ldap 模块遵循在 Sun Java System Directory Server 上强制执行的口令策略控制。有关更多信息,请参见《系统管理指南:名称和目录服务(DNS、NIS 和 LDAP)》中的“LDAP 名称服务安全模型”

口令加密

强口令加密可提供较早的攻击防线。Solaris 软件提供了四种口令加密算法。与 UNIX 算法相比,其中的两种 MD5 算法和 Blowfish 算法可提供更为强大的口令加密。

口令算法标识符

可以在 /etc/security/policy.conf 文件中指定站点的算法配置。在 policy.conf 文件中,算法以其标识符命名,如下表所示。

表 2–1 口令加密算法

标识符 

说明 

算法手册页 

1

与 BSD 和 Linux 系统上的 MD5 算法兼容的 MD5 算法。

crypt_bsdmd5(5)

2a

与 BSD 系统上的 Blowfish 算法兼容的 Blowfish 算法。

crypt_bsdbf(5)

md5

Sun MD5 算法,此算法被视为比 BSD 和 Linux 版本的 MD5 更为强大。

crypt_sunmd5(5)

__unix__

传统的 UNIX 加密算法。此算法是 policy.conf 文件中的缺省模块。

crypt_unix(5)

policy.conf 文件中的算法配置

以下说明了 policy.conf 文件中的缺省算法配置:


#

…

# crypt(3c) Algorithms Configuration

#

# CRYPT_ALGORITHMS_ALLOW specifies the algorithms that are allowed to

# be used for new passwords.  This is enforced only in crypt_gensalt(3c).

#

CRYPT_ALGORITHMS_ALLOW=1,2a,md5



# To deprecate use of the traditional unix algorithm, uncomment below

# and change CRYPT_DEFAULT= to another algorithm.  For example,

# CRYPT_DEFAULT=1 for BSD/Linux MD5.

#

#CRYPT_ALGORITHMS_DEPRECATE=__unix__



# The Solaris default is the traditional UNIX algorithm.  This is not

# listed in crypt.conf(4) since it is internal to libc.  The reserved

# name __unix__ is used to refer to it.

#

CRYPT_DEFAULT=__unix__

…

更改 CRYPT_DEFAULT 的值之后,将使用与新值关联的算法对新用户的口令进行加密。当前用户更改其口令之后,其旧口令的加密方式会影响加密新口令所用的算法。

例如,假设 CRYPT_ALGORITHMS_ALLOW=1,2a,md5CRYPT_DEFAULT=1。下表说明了将使用何种算法来生成加密口令。

标识符=口令算法 

说明 

初始口令 

更改后的口令 

1 = crypt_bsdmd5

使用同一算法 

1 标识符也是 CRYPT_DEFAULT 的值。继续使用 crypt_bsdmd5 算法对用户口令进行加密。

2a = crypt_bsdbf

使用同一算法 

2a 标识符位于 CRYPT_ALGORITHMS_ALLOW 列表中。因此,使用 crypt_bsbdf 算法对新口令进行加密。

md5 = crypt_md5

使用同一算法 

md5 标识符位于 CRYPT_ALGORITHMS_ALLOW 列表中。因此,使用 crypt_md5 算法对新口令进行加密。

__unix__ = crypt_unix

使用 crypt_bsdmd5 算法

__unix__ 标识符不在 CRYPT_ALGORITHMS_ALLOW 列表中。因此,不能使用 crypt_unix 算法。将使用 CRYPT_DEFAULT 算法对新口令进行加密。

有关配置算法选择的更多信息,请参见 policy.conf(4) 手册页。要指定口令加密算法,请参见更改口令算法(任务列表)

特殊的系统登录

访问系统的两种常用方法是使用普通用户登录或者使用 root 登录。此外,用户还可以使用许多特殊的系统登录来运行管理命令,而无需使用 root 帐户。作为系统管理员,您可以为这些登录帐户指定口令。

下表列出了一些系统登录帐户及其用法。这些系统登录可执行特殊的功能。每种登录都有各自的组标识 (group identification, GID) 号。每种登录都应该具有各自的口令,此口令应该只透露给需要知道的用户。

表 2–2 系统登录帐户及其用法

登录帐户 

GID 

用法  

root

0

几乎没有任何限制。可覆盖所有其他登录、保护和权限。root 帐户具有访问整个系统的权限。应该非常谨慎地保护 root 登录口令。root 帐户(即超级用户)有权使用大多数 Solaris 命令。

daemon

1

控制后台处理。 

bin

2

有权使用部分 Solaris 命令。 

sys

3

有权访问许多系统文件。 

adm

4

有权访问某些管理文件。 

lp

71

有权访问打印机的对象数据文件和假脱机数据文件。 

uucp

5

有权访问 UUCP(UNIX 对 UNIX 复制程序)的对象数据文件和假脱机数据文件。 

nuucp

9

供远程系统用于登录到系统并启动文件传输。 

远程登录

远程登录为入侵者提供了可乘之机。Solaris OS 提供了多个命令来监视、限制和禁用远程登录。有关过程,请参见保证登录和口令的安全(任务列表)

缺省情况下,远程登录无法获取控制或读取特定系统设备(如系统鼠标、键盘、帧缓冲区或音频设备)的权限。有关更多信息,请参见 logindevperm(4) 手册页。

拨号登录

如果能够通过调制解调器或拨号端口访问计算机,则可以添加额外的安全层。您可以要求通过调制解调器或拨号端口访问系统的用户提供拨号口令。拨号口令是附加口令,用户必须提供此口令之后才能被授予访问系统的权限。

仅有超级用户或具有等效功能的角色才能创建或更改拨号口令。要确保系统的完整性,应该大约每月更改一次口令。此功能最有效的功用就是要求提供拨号口令来获取访问网关系统的权限。有关如何设置拨号口令的信息,请参见如何创建拨号口令

创建拨号口令涉及两个文件:/etc/dialups /etc/d_passwddialups 文件包含需要拨号口令的端口的列表。d_passwd 文件包含需要加密口令作为附加拨号口令的 shell 程序的列表。这两个文件中的信息按如下方式处理:

控制对设备的访问

连接到计算机系统的外围设备会引起安全风险。麦克风可以获取会话内容并将其传输到远程系统。CD-ROM 可能会保存其信息供下一个 CD-ROM 设备用户读取。打印机可以从远程访问。系统不可或缺的设备也可能会出现安全问题。例如,网络接口(如 hme0)被视为不可或缺的设备。

Solaris 软件提供了两种方法来控制对设备的访问。设备策略可限制或防止对构成系统的设备进行访问。设备策略在内核中强制执行。设备分配可限制或防止对外围设备进行访问。设备分配在用户分配时强制执行。

设备策略在内核中使用 privilege(权限)来保护选定设备。例如,hme 之类的网络接口的设备策略要求具有所有权限才能进行读取或写入。

设备分配使用授权来保护外围设备,如打印机或麦克风。缺省情况下,不会启用设备分配。一旦启用,便可配置设备分配,以防止使用设备或者要求仅有获得授权才能访问该设备。当分配某个设备以供使用时,在当前用户解除分配此设备之前,其他用户将无法访问此设备。

可以在多个区域中配置 Solaris 系统以控制对设备的访问:

设备策略(概述)

使用设备策略机制,可以指定打开设备的进程需要特定权限。仅有正在使用设备策略指定的权限运行的进程才能访问受设备策略保护的设备。Solaris OS 提供了缺省设备策略。例如,hme0 之类的网络接口要求对其进行访问的进程使用 net_rawaccess 权限运行。这一要求是在内核中强制执行的。有关权限的更多信息,请参见权限(概述)

在早期的 Solaris OS 发行版中,设备节点仅受文件权限的保护。例如,组 sys 拥有的设备只能由 sys 组的成员打开。在 Solaris 10 发行版中,文件权限不会预测哪些用户可打开设备,而是使用文件权限设备策略来保护设备。例如,/dev/ip 文件具有 666 项权限。但是,设备只能由具有相应权限的进程打开。

可以对设备策略的配置进行审计。AUE_MODDEVPLCY 审计事件可记录设备策略的更改。

有关设备策略的更多信息,请参见以下内容:

设备分配(概述)

使用设备分配机制,可以限制对外围设备(如 CD-ROM)的访问。可以在本地管理此机制。如果未启用设备分配,则外围设备仅受文件权限的保护。例如,外围设备在缺省情况下可供以下用户使用:

设备分配可以限制设备仅由授权用户使用,还可以完全阻止对设备进行访问。分配了设备的用户对设备具有独占使用权,直到此用户解除分配此设备为止。解除分配设备时,设备清除脚本会删除任何剩余数据。可以编写设备清除脚本来清除没有脚本的设备中的信息。有关示例,请参见编写新的设备清理脚本

可以对分配设备、解除分配设备以及列出可分配设备的尝试进行审计。审计事件是 ot 审计类的一部分。

有关设备分配的更多信息,请参见以下内容:

控制对计算机资源的访问

作为系统管理员,您可以控制和监视系统活动。可以针对何人使用哪些资源设置限制。可以记录资源的使用,并可以监视正在使用资源的用户,还可以设置计算机以最大程度减少资源的不正确使用。

限制和监视超级用户

系统要求提供 root 口令才能进行超级用户访问。在缺省配置中,用户无法以 root 的身份远程登录系统。远程登录时,用户必须使用其用户名登录,然后使用 su 命令成为 root。可以监视使用 su 命令的用户,特别是那些尝试获取超级用户访问权限的用户。有关监视用户以及限制超级用户访问权限的过程,请参见监视和限制超级用户(任务列表)

配置基于角色的访问控制以替换超级用户

基于角色的访问控制或 RBAC 旨在限制超级用户的功能。超级用户(即 root 用户)具有访问系统中所有资源的权限。借助 RBAC,可以使用一组具有单独权限的角色来替换 root。例如,可以设置一个角色来处理用户帐户创建,设置另一个角色来处理系统文件修改。创建了处理一种或一组功能的角色之后,即可从 root 的功能中删除这些功能。

每个角色都要求已知的用户使用自己的用户名和口令进行登录。登录之后,用户即可承担具有特定角色口令的角色。因此,知道 root 口令的用户只有有限的系统破坏力。有关 RBAC 的更多信息,请参见基于角色的访问控制(概述)

防止无意中误用计算机资源

您可以通过以下方法来防止您自己和您的用户导致意外的错误:

设置 PATH 变量

应该谨慎地正确设置 PATH 变量。否则,可能会无意中运行由其他用户引入的程序。入侵程序会破坏数据或损坏系统。这类对安全性构成威胁的程序称为特洛伊木马程序。例如,一个替代的 su 程序可能会放置在公共目录中,而您作为系统管理员可能会运行此替代程序。这类脚本看上去正好类似于常规的 su 命令。由于这类脚本会在执行之后自行删除,因此,几乎没有明确迹象表明您实际上已运行了特洛伊木马程序。

PATH 变量在登录时自动设置。路径通过以下启动文件设置:.login.profile .cshrc。当设置用户搜索路径以便将当前目录 (.) 置于最后时,系统会阻止运行这类特洛伊木马程序。供超级用户使用的 PATH 变量根本不应该包括当前目录。

自动安全性增强工具 (Automated Security Enhancement Tool, ASET) 会检查启动文件以确保 PATH 变量设置正确。ASET 还可确保 PATH 变量不包含点 (.) 项。

为用户指定受限 Shell

标准 shell 允许用户打开文件,执行命令等。受限 shell 可限制用户更改目录和执行命令。可使用 /usr/lib/rsh 命令调用受限 shell。请注意,受限 shell 并不是远程 shell,后者为 /usr/sbin/rsh。受限 shell 在以下方面不同于标准 shell:

使用受限 shell,可以限制用户对系统文件的访问能力。此 shell 将为需要执行特定任务的用户创建一种限制环境。但是,受限 shell 并非完全安全,它仅旨在防止不熟练的用户无意中造成破坏。

有关受限 shell 的信息,请使用 man -s1m rsh 命令查看 rsh(1M) 手册页。

受限 shell 的更安全的替代项是 Solaris 安全 Shell 中的 ssh 命令。使用 Solaris 安全 Shell,用户可以通过不安全的网络安全地访问远程主机。有关使用 Solaris 安全 Shell 的信息,请参见第 19 章,Solaris 安全 Shell(参考)

限制对文件中数据的访问

由于 Solaris OS 是多用户环境,因此,文件系统的安全性是系统中最基本的安全风险。可以使用传统的 UNIX 文件保护措施来保护文件,还可以使用更安全的访问控制列表 (access control list, ACL)。

您可能需要允许某些用户读取某些文件,同时为另一些用户提供更改或删除某些文件的权限。您可能具有某些不希望其他任何用户查看的数据。第 6 章,控制对文件的访问(任务)介绍了如何设置文件权限。

限制 setuid 可执行文件

可执行文件可能存在安全风险。许多可执行程序必须以 root 的身份(即超级用户身份)执行才能正常工作。运行这些 setuid 程序需要将用户 ID 设置为 0。运行这些程序的任何用户都使用 root ID 运行程序。如果在编写使用 root ID 运行的程序时未注重安全性,则此程序将引起潜在的安全问题。

除了 Sun 附带的 setuid 位设置为 root 的可执行程序之外,还应该禁止使用 setuid 程序。如果无法禁止使用 setuid 程序,则至少应该限制其使用。安全管理很少需要使用 setuid 程序。

有关更多信息,请参见防止可执行文件危及安全。有关过程,请参见防止程序受到安全风险(任务列表)

使用自动安全性增强工具

ASET 安全软件包提供可用于控制和监视系统安全性的自动管理工具。ASET 提供了三种安全级别:低、中和高。可以指定一种 ASET 安全级别。级别越高,ASET 对文件的控制功能越强,从而可限制访问文件并提高系统的安全性。有关更多信息,请参见第 7 章,使用自动安全性增强工具(任务)

使用 Solaris 安全工具包

虽然 ASET 可用于对系统进行少量安全更改,但 Solaris 安全工具包提供了一种灵活且可扩展的机制,用于最小化、加强和保护 Solaris 系统。Solaris 安全工具包(非正式名称为 JASS 工具包)是一种由用户用来对系统执行安全修改的工具。此工具可以提供有关系统安全状态的报告,还可以撤消工具以前运行的内容。JASS 工具包可以从 Sun 的 Web 站点 http://wwws.sun.com/security/jass 下载。此 Web 站点包含指向联机文档的链接。

Alex Noordergraaf 和 Glenn Brunette 合著的《Securing Systems with the Solaris Security Toolkit》(ISBN 0-13-141071-7,2003 年 6 月)中对此工具包进行了详细说明。本书是 Sun Microsystems Press 出版的 Sun BluePrints 系列的一部分。

使用 Solaris 资源管理功能

Solaris 软件提供了完善的资源管理功能。使用这些功能,可以按照服务器整合环境中的应用程序对资源使用进行分配、安排、监视以及设置上限操作。使用资源控制框架,可以对进程占用的系统资源设置约束。这类约束有助于防止尝试使系统资源发生泛洪的脚本引起的拒绝服务攻击。

使用 Solaris 资源管理功能,可以为特殊项目指定资源,还可以动态调整可用资源。有关更多信息,请参见《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》中的第 I 部分, “资源管理”

使用 Solaris Zones

Solaris Zones 提供了一种应用程序执行环境,其中单个 Solaris OS 实例中各进程与系统的其余部分隔离开来。这种隔离阻止了在一个区域中运行的进程监视或影响在其他区域中运行的进程。即使运行的进程具有超级用户功能,也不能查看或影响其他区域中的活动。

Solaris Zones 非常适用于将多个应用程序置于一台服务器中的环境。有关更多信息,请参见《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》中的第 II 部分, “Zones”

监视计算机资源的使用情况

作为系统管理员,需要监视系统活动。您需要注意计算机的所有方面,包括以下各项:

了解这些知识之后,即可使用可用工具来审计系统使用情况并监视个别用户的活动。如果怀疑安全性受到破坏,则使用监视功能会非常有用。有关审计服务的更多信息,请参见第 27 章,Solaris 审计(概述)

监视文件完整性

作为系统管理员,需要确保所管理的系统上安装的文件尚未被意外更改。在大型安装中,使用用于对每个系统上的软件栈进行比较和报告的工具可跟踪系统。使用基本审计报告工具 (Basic Audit Reporting Tool, BART),可以通过在一段时间内对一个或多个系统执行文件级检查来全面验证系统。一个或多个系统的 BART 清单在一段时间内的变化可以验证系统的完整性。BART 提供了清单创建、清单比较以及脚本报告规则。有关更多信息,请参见第 5 章,使用基本审计报告工具(任务)

控制对文件的访问

Solaris OS 是一种多用户环境。在多用户环境中,所有登录到系统的用户均可读取属于其他用户的文件。使用相应的文件权限,用户还可以使用属于其他用户的文件。有关更多介绍,请参见第 6 章,控制对文件的访问(任务)。有关针对文件设置相应权限的逐步说明,请参见保护文件(任务列表)

通过加密保护文件

通过使其他用户无法访问某个文件,可以保证此文件的安全。例如,具有权限 600 的文件无法由其属主和超级用户之外的用户读取。具有权限 700 的目录同样无法访问。但是,猜中您的口令或者知道 root 口令的用户可以访问此文件。另外,每次将系统文件备份到脱机介质时,还可以在备份磁带上保留原本无法访问的文件。

Solaris 加密框架提供了 digest macencrypt 命令来保护文件。有关更多信息,请参见第 13 章,Solaris 加密框架(概述)

使用访问控制列表

ACL(发音为 “ackkl”)可以对文件权限进行更多控制。如果传统的 UNIX 文件保护无法提供足够的保护,则可添加 ACL。传统的 UNIX 文件保护可为三种用户类提供读取、写入和执行权限:属主、组和其他用户。ACL 可提供更为精确的安全性。可以使用 ACL 定义以下文件权限:

有关使用 ACL 的更多信息,请参见使用访问控制列表保护文件

跨计算机共享文件

网络文件服务器可以控制可共享的文件,还可以控制有权访问文件的客户机,以及允许这些客户机使用的访问类型。通常,文件服务器可以为所有客户机或特定客户机授予读写权限或只读权限。通过 share 命令使资源可用时,便会指定访问控制。

文件服务器上的 /etc/dfs/dfstab 文件列出了此服务器为网络中的客户机提供的文件系统。有关共享文件系统的更多信息,请参见《系统管理指南:网络服务》中的“自动文件系统共享”

限制对共享文件的 root 访问

通常,不允许超级用户对通过网络共享的文件系统进行 root 访问。NFS 系统通过将请求程序的用户更改为具有用户 ID 60001 的用户 nobody,可以防止以 root 身份对已挂载的文件系统进行访问。用户 nobody 的访问权限与为公众提供的那些访问权限相同。用户 nobody 具有的访问权限与没有凭证的用户所具有的访问权限相同。例如,如果公众只对某个文件具有执行权限,则用户 nobody 只能执行此文件。

NFS 服务器可以按主机授予超级用户对共享文件系统的权限。要授予这些权限,请使用 share 命令的 root=hostname 选项。应该谨慎使用此选项。有关 NFS 的安全选项的介绍,请参见《系统管理指南:网络服务》中的第 6  章 “访问网络文件系统(参考)”

控制网络访问

计算机常常是其他计算机配置的一部分。此配置称为网络。连接的计算机可通过网络交换信息。联网的计算机可以访问网络中其他计算机的数据和其他资源。计算机网络创建了一种强大且完善的计算环境。但是,网络同时也使计算机安全性变得更为复杂。

例如,在计算机网络中,独立的计算机都允许共享信息。未经授权的访问存在安全风险。由于许多用户都有权访问网络,因此更可能会出现未经授权的访问,尤其是由于用户错误进行的访问。口令使用不当也会导致未经授权的访问。

网络安全性机制

网络安全性通常基于限制或阻止来自远程系统的操作。下图介绍了可以对远程操作强制执行的安全限制。

图 2–1 远程操作的安全限制

图中说明了限制对远程系统进行访问的三种方法:防火墙系统、验证机制和授权机制。

远程访问的验证和授权

验证是一种在特定用户访问远程系统时,限制这些用户的访问权限的方法。可以同时在系统级别和网络级别设置验证。授权是一种在授予用户访问远程系统的权限之后,限制此用户可执行的操作的方法。下表列出了可提供验证和授权的服务。

表 2–3 远程访问的验证和授权服务

服务 

说明 

更多信息 

IPsec 

IPsec 提供了基于主机和基于证书的验证以及网络通信流量加密。 

《系统管理指南:IP 服务》中的第 19  章 “IP 安全体系结构(概述)”

Kerberos 

Kerberos 使用加密功能对登录系统的用户进行验证和授权。 

有关示例,请参见Kerberos 服务的工作方式

LDAP 和 NIS+ 

LDAP 目录服务和 NIS+ 名称服务可以提供网络级别的验证和授权。 

《系统管理指南:名称和目录服务(DNS、NIS 和 LDAP)》《System Administration Guide: Naming and Directory Services (NIS+)》

远程登录命令 

使用远程登录命令,用户可以通过网络登录到远程系统并使用其资源。rloginrcpftp 是一些远程登录命令。如果是“受信任主机”,则会自动执行验证。否则,系统会要求进行自我验证。

《系统管理指南:网络服务》中的第 29  章 “访问远程系统(任务)”

SASL 

简单身份验证和安全层 (Simple Authentication and Security Layer, SASL) 是一种为网络协议提供验证和可选安全性服务的框架。可以使用插件来选择相应的验证协议。 

SASL(概述)

安全 RPC 

安全 RPC 通过对远程计算机发出请求的用户进行验证,可提高网络环境的安全性。可以使用 UNIX、DES 或 Kerberos 验证系统来实现安全 RPC。 

安全 RPC 概述

 

安全 RPC 还可用于在 NFS 环境中提供额外的安全性。具有安全 RPC 的 NFS 环境称为安全 NFS。安全 NFS 针对公钥使用 Diffie-Hellman 验证。 

NFS 服务和安全 RPC

Solaris 安全 Shell 

Solaris 安全 Shell 可以对不安全网络上的网络通信流量进行加密。Solaris 安全 Shell 通过单独使用口令、公钥或同时使用这两者来提供验证。Solaris 安全 Shell 针对公钥使用 RSA 和 DSA 验证。 

Solaris 安全 Shell(概述)

安全 RPC 的可能替代项是 Solaris 特权端口机制。为特权端口指定的端口号小于 1024。客户机系统验证客户机的凭证之后,此客户机便会使用特权端口与服务器建立连接。然后,服务器通过检查连接的端口号来检验客户机凭证。

未运行 Solaris 软件的客户机可能无法使用特权端口进行通信。如果客户机无法通过此端口进行通信,则会显示类似以下内容的错误消息:


“Weak Authentication

NFS request from unprivileged port”

防火墙系统

可以设置防火墙系统来防止外部对网络中的资源进行访问。防火墙系统是一台安全主机,可充当内部网络与外部网络之间的屏障。内部网络将所有其他网络均视为不可信对象。 应该考虑将此设置作为内部网络和任何与其进行通信的外部网络(如 Internet)之间的强制性设置。

防火墙可充当网关和屏障,并可充当在网络之间传递数据的网关,还可充当阻止与网络来回自由传递数据的屏障。防火墙要求内部网络中的用户登录到防火墙系统之后才能访问远程网络中的主机。同样,外部网络中的用户必须先登录到防火墙系统,然后才会被授予访问内部网络中主机的权限。

防火墙还可用于某些内部网络之间。例如,可以设置防火墙或安全网关计算机来限制包的传送。如果网关计算机不是包的源地址或目标地址,则网关可以禁止两个网络之间的包交换。防火墙还应设置为仅转发特定协议的包。例如,可以允许包传送邮件,但不允许传送 telnetrlogin 命令。ASET 以高安全级别运行时,会禁用 Internet 协议 (Internet Protocol, IP) 包的转发。

此外,从内部网络发送的所有电子邮件均会首先发送到防火墙系统。然后,防火墙将邮件传送给外部网络中的主机。防火墙系统还会接收所有传入的电子邮件,并将邮件分发给内部网络中的主机。


注意 – 注意 –

防火墙可阻止未经授权的用户访问网络中的主机。应该严格维护对防火墙强制执行的安全性,但对网络中其他主机的安全性限制可以较为宽松。但是,突破防火墙的入侵者可以获取访问内部网络中所有其他主机的权限。


防火墙系统不应该包含任何受信任主机。受信任主机是指不要求用户提供口令即可从其中进行登录的主机。防火墙系统不应该共享其任何文件系统,也不应该挂载其他服务器的任何文件系统。

可以使用以下技术来通过防火墙加强系统的安全性:

加密和防火墙系统

大多数局域网可以通过称为的块在计算机之间传输数据。通过称为包粉碎的过程,网络之外的未经授权用户可能会破坏或损坏数据。

包粉碎涉及在包到达其目标之前捕获这些包。然后,入侵者会向内容中加入任意数据,并将这些包发送回其原始路线。在局域网中,不可能粉碎包,因为包会同时到达所有系统(包括服务器)。但是,可以在网关上粉碎包,因此请确保网络中的所有网关都受到保护。

大多数危险的攻击都会影响数据的完整性。这类攻击包括更改包的内容或者模拟用户。涉及窃听的攻击不会破坏数据的完整性。窃听者会记录会话内容以便稍后重放,但不会模拟用户。尽管窃听攻击不会攻击数据的完整性,但是会影响保密性。可以对通过网络的数据进行加密来保护敏感信息的保密性。

报告安全问题

如果您遇到可疑的安全性破坏,则可以与计算机应急响应组/协调中心 (Computer Emergency Response Team/Coordination Center, CERT/CC) 联系。CERT/CC 是国防部高级研究项目署 (Defense Advanced Research Projects Agency, DARPA) 资助的项目,设在卡耐基梅隆大学的软件工程学院。此项目署可以您帮助解决遇到的任何安全问题,还可以指示您与其他更适合特殊要求的计算机应急响应组联系。您可以通过全天候热线致电 CERT/CC:(412) 268-7090。或者,向 cert@cert.sei.cmu.edu 发送电子邮件与此响应组联系。

第 3 章 控制对系统的访问(任务)

本章介绍用于控制可以访问 Solaris 系统的用户的过程。以下是本章中信息的列表:

有关系统安全的概述信息,请参见第 2 章,管理计算机安全性(概述)

控制系统访问(任务列表)

一台计算机的安全性取决于其最薄弱的登录点。以下任务列表说明了应监视和确保安全的若干方面:

任务 

说明 

参考 

监视、允许和拒绝用户登录 

监视异常登录活动。临时禁止登录。管理拨号登录。 

保证登录和口令的安全(任务列表)

提供强口令加密 

指定用于加密用户口令的算法。安装其他算法。 

更改口令算法(任务列表)

监视和限制超级用户活动 

定期监视超级用户活动。禁止 root 用户远程登录。

监视和限制超级用户(任务列表)

禁止访问硬件设置 

禁止普通用户使用 PROM。 

SPARC: 控制对系统硬件的访问(任务列表)

保证登录和口令的安全(任务列表)

以下任务列表说明监视用户登录和禁用用户登录的过程。

任务 

说明 

参考 

显示用户的登录状态 

列出有关用户登录帐户的详细信息,如全名和口令生命期信息。 

如何显示用户的登录状态

查找没有口令的用户 

仅查找其帐户无需口令的那些用户。 

如何显示没有口令的用户

临时禁用登录 

拒绝用户在系统关闭或例行维护时登录到计算机。  

如何临时禁止用户登录

保存失败的登录尝试 

为五次登录尝试后仍不能提供正确口令的用户创建日志。 

如何监视失败的登录尝试

保存所有失败的登录尝试 

为失败的登录尝试创建日志。 

如何监视所有失败的登录尝试

创建拨号口令 

要求通过调制解调器或拨号端口远程登录的用户提供其他口令。 

如何创建拨号口令

临时禁用拨号登录 

禁止用户通过调制解调器或端口远程拨入。 

如何临时禁用拨号登录

保证登录和口令的安全

您可以限制远程登录和要求用户具有口令,也可以监视失败的访问尝试以及临时禁用登录。

Procedure如何显示用户的登录状态

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 使用 logins 命令显示用户的登录状态。


    # logins -x -l username
    
    -x

    显示一组扩展的登录状态信息。

    -l username

    显示指定用户的登录状态。变量 username 是用户的登录名称。必须以逗号分隔的列表形式指定多个登录名称。

    logins 命令使用相应的口令数据库来获取用户的登录状态。该数据库可以是本地 /etc/passwd 文件,也可以是名称服务的口令数据库。有关更多信息,请参见 logins(1M) 手册页。


示例 3–1 显示用户的登录状态

在以下示例中,显示了用户 rimmer 的登录状态。


# logins -x -l rimmer

rimmer       500     staff           10   Annalee J. Rimmer

                     /export/home/rimmer

                     /bin/sh

                     PS 010103 10 7 -1
rimmer

标识用户的登录名称。

500

标识用户 ID (user ID, UID)。

staff

标识用户的主组。

10

标识组 ID (group ID, GID)。

Annalee J. Rimmer

标识注释。

/export/home/rimmer

标识用户的起始目录。

/bin/sh

标识登录 shell。

PS 010170 10 7 -1

指定口令生命期信息:

  • 上次更改口令的日期

  • 更改之间要求的天数

  • 在该天数后必须更改

  • 警告期


Procedure如何显示没有口令的用户

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 使用 logins 命令显示所有没有口令的用户。


    # logins -p

    -p 选项用于显示没有口令的用户列表。除非启用了名称服务,否则 logins 命令将使用本地系统的口令数据库。


示例 3–2 显示没有口令的用户

在以下示例中,用户 pmorph 没有口令。


# logins -p

pmorph          501     other           1       Polly Morph

# 

Procedure如何临时禁止用户登录

在系统关闭或例行维护期间,可临时禁止用户登录。超级用户登录将不受影响。有关更多信息,请参见 nologin(4) 手册页。

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 在文本编辑器中创建 /etc/nologin 文件。


    # vi /etc/nologin
    
  3. 添加有关系统可用性的消息。

  4. 关闭并保存该文件。


示例 3–3 禁止用户登录

在此示例中,用户将收到系统不可用的通知。


# vi /etc/nologin

(Add system message here)

 

# cat /etc/nologin 

***No logins permitted.***



***The system will be unavailable until 12 noon.***

您也可以将系统引导至运行级 0(单用户模式)以禁止登录。有关将系统引导至单用户模式的信息,请参见《系统管理指南:基本管理》中的第 9  章 “关闭系统(任务)”


Procedure如何监视失败的登录尝试

此过程从终端窗口捕获失败的登录尝试。此过程不会从 CDE 或 GNOME 登录尝试中捕获失败的登录。

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. /var/adm 目录中创建 loginlog 文件。


    # touch /var/adm/loginlog
    
  3. loginlog 文件中,为 root 用户设置读写权限。


    # chmod 600 /var/adm/loginlog
    
  4. loginlog 文件中,将组成员关系更改为 sys


    # chgrp sys /var/adm/loginlog
    
  5. 检验日志是否正常工作。

    例如,使用错误的口令五次登录系统。然后,显示 /var/adm/loginlog 文件。


    # more /var/adm/loginlog
    
    jdoe:/dev/pts/2:Tue Nov  4 10:21:10 2003
    
    jdoe:/dev/pts/2:Tue Nov  4 10:21:21 2003
    
    jdoe:/dev/pts/2:Tue Nov  4 10:21:30 2003
    
    jdoe:/dev/pts/2:Tue Nov  4 10:21:40 2003
    
    jdoe:/dev/pts/2:Tue Nov  4 10:21:49 2003
    
    #

    loginlog 文件中,每次失败的尝试都对应一项。每一项都包含用户的登录名称、tty 设备以及登录尝试失败的时间。如果用户登录尝试失败的次数少于五次,则不会记录任何失败的登录尝试。

    如果 loginlog 文件不断增大,则表明可能是存在侵入计算机系统的尝试。因此,应定期检查并清除该文件的内容。有关更多信息,请参见 loginlog(4) 手册页。

Procedure如何监视所有失败的登录尝试

此过程捕获 syslog 文件中所有失败的登录尝试。

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 使用所需的 SYSLOGSYSLOG_FAILED_LOGINS 值设置 /etc/default/login 文件。

    编辑 /etc/default/login 文件以更改相应项。请确保取消对 SYSLOG=YES 的注释。


    # grep SYSLOG /etc/default/login
    
    # SYSLOG determines whether the syslog(3) LOG_AUTH facility 
    
    # should be used
    
    SYSLOG=YESSYSLOG_FAILED_LOGINS=0
    
    #
  3. 使用正确的权限创建文件以保存日志信息。

    1. /var/adm 目录中创建 authlog 文件。


      # touch /var/adm/authlog
      
    2. authlog 文件中,为 root 用户设置读写权限。


      # chmod 600 /var/adm/authlog
      
    3. authlog 文件中,将组成员关系更改为 sys


      # chgrp sys /var/adm/authlog
      
  4. 编辑 syslog.conf 文件以记录失败的口令尝试。

    这些失败应发送到 authlog 文件。

    1. syslog.conf 文件中键入以下项。

      使用制表符分隔 syslog.conf 的同一行中的字段。


      auth.notice <按 Tab 键>  /var/adm/authlog
    2. 刷新 syslog 守护进程的配置信息。


      # svcadm refresh system/system-log
      
  5. 检验日志是否正常工作。

    例如,使用错误的口令以普通用户的身份登录系统。然后,以主管理员角色或超级用户身份显示 /var/adm/authlog 文件。


    # more /var/adm/authlog
    
    Nov  4 14:46:11 example1 login: [ID 143248 auth.notice] 
    
     Login failure on /dev/pts/8 from example2, stacey
    
    #
  6. 定期监视 /var/adm/authlog 文件。


示例 3–4 在三次登录失败后记录访问尝试

按照上述过程进行操作,但在 /etc/default/login 文件中将 SYSLOG_FAILED_LOGINS 的值设置为 3



示例 3–5 在三次登录失败后关闭连接

/etc/default/login 文件中取消对 RETRIES 项的注释,然后将 RETRIES 的值设置为 3。所做编辑将立即生效。在一个会话中重试登录三次后,系统便会关闭连接。


Procedure如何创建拨号口令


注意 – 注意 –

首次建立拨号口令时,务必保持登录到至少一个端口。请在其他端口上测试该口令。如果注销以测试新口令,则可能无法重新登录。如果同时还登录到另一个端口,则可返回并修复相应错误。


  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 创建一个包含串行设备列表的 /etc/dialups 文件。

    添加要使用拨号口令保护的所有端口。/etc/dialups 文件的内容应与以下信息类似:


    /dev/term/a
    
    /dev/term/b
    
    /dev/term/c
  3. 对于要求拥有拨号口令的登录程序,创建一个 /etc/d_passwd 文件,并在文件中添加这些程序。

    添加用户可在登录时运行的 shell 程序,例如 uucicoshkshcsh/etc/d_passwd 文件的显示应与以下信息类似:


    /usr/lib/uucp/uucico:encrypted-password:
    
    /usr/bin/csh:encrypted-password:
    
    /usr/bin/ksh:encrypted-password:
    
    /usr/bin/sh:encrypted-password:

    在此过程的后续部分,将为每个登录程序添加加密口令。

  4. 在这两个文件中,将拥有权设置为 root


    # chown root /etc/dialups /etc/d_passwd
  5. 在这两个文件中,将组拥有权设置为 root


    # chgrp root /etc/dialups /etc/d_passwd
  6. 在这两个文件中,为 root 设置读写权限。


    # chmod 600 /etc/dialups /etc/d_passwd
  7. 创建加密口令。

    1. 创建临时用户。


      # useradd username
      
    2. 为临时用户创建口令。


      # passwd username
      
      New Password:  <键入口令>
      
      Re-enter new Password:   <重新键入口令>
      
      passwd: password successfully changed for username
      
    3. 捕获加密口令。


      # grep username /etc/shadow > username.temp
    4. 编辑 username.temp 文件。

      删除除加密口令以外的所有字段。第二个字段保存加密口令。

      例如,在以下行中,加密口令为 U9gp9SyA/JlSk


      temp:U9gp9SyA/JlSk:7967:::::7988:
    5. 删除临时用户。


      # userdel username
      
  8. 将加密口令从 username.temp 文件复制到 /etc/d_passwd 文件中。

    可为每个登录 shell 创建不同口令。或者,对每个登录 shell 使用相同口令。

  9. 将该口令通知拨号用户。

    应确保在通知用户的过程中口令不会被篡改。

Procedure如何临时禁用拨号登录

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 将下面的项作为单独的一行放入 /etc/d_passwd 文件:


    /usr/bin/sh:*:

更改口令算法(任务列表)

以下任务列表说明管理口令算法的过程:

任务 

参考 

提供强口令加密 

如何指定口令加密算法

为名称服务提供强口令加密 

如何为 NIS 域指定新的口令算法

如何为 NIS+ 域指定新的口令算法

如何为 LDAP 域指定新的口令算法

添加新的口令加密模块 

如何安装第三方的口令加密模块

更改口令加密的缺省算法

缺省情况下,使用 crypt_unix 算法加密用户口令。通过更改缺省口令加密算法,可以使用更强大的加密算法,如 MD5Blowfish

Procedure如何指定口令加密算法

在此过程中,BSD-Linux 版本的 MD5 算法是用户更改其口令时使用的缺省加密算法。此算法适合由运行 Solaris、BSD 和 Linux 版本的 UNIX 的计算机构成的混合网络。有关口令加密算法和算法标识符的列表,请参见表 2–1

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 指定所选加密算法的标识符。

    键入标识符作为 /etc/security/policy.conf 文件中的 CRYPT_DEFAULT 变量的值。

    可能需要在文件中添加注释以对选择进行说明。


    # cat  /etc/security/policy.conf
    
    …
    
    CRYPT_ALGORITHMS_ALLOW=1,2a,md5
    
    #
    
    # Use the version of MD5 that works with Linux and BSD systems.
    
    # Passwords previously encrypted with __unix__ will be encrypted with MD5
    
    # when users change their passwords.
    
    #
    
    #
    
    CRYPT_DEFAULT=__unix__
    
    CRYPT_DEFAULT=1
    

    在此示例中,算法配置可确保不会使用功能最弱的算法 crypt_unix 加密口令。使用 crypt_unix 模块加密口令的用户将在更改其口令时获得使用 crypt_bsdmd5 加密的口令。

    有关配置算法选择的更多信息,请参见 policy.conf(4) 手册页。


示例 3–6 使用 Blowfish 算法加密口令

在此示例中,Blowfish 算法的标识符 2a 被指定为 policy.conf 文件中的 CRYPT_DEFAULT 变量的值:


CRYPT_ALGORITHMS_ALLOW=1,2a,md5

#CRYPT_ALGORITHMS_DEPRECATE=__unix__

CRYPT_DEFAULT=2a

此配置与使用 Blowfish 算法的 BSD 系统兼容。


Procedure如何为 NIS 域指定新的口令算法

当 NIS 域中的用户更改其口令时,NIS 客户机会查看 /etc/security/policy.conf 文件中的本地算法配置。NIS 客户机将加密口令。

  1. 在 NIS 客户机的 /etc/security/policy.conf 文件中指定口令加密算法。

  2. 将修改过的 /etc/security/policy.conf 文件复制到 NIS 域中的每台客户机。

  3. 为尽可能减少混淆,将修改过的 /etc/security/policy.conf 文件复制到 NIS 根服务器和从服务器。

Procedure如何为 NIS+ 域指定新的口令算法

当 NIS+ 域中的用户更改其口令时,NIS+ 名称服务会查看 NIS+ 主服务器的 /etc/security/policy.conf 文件中的算法配置。运行 rpc.nispasswd 守护进程的 NIS+ 主服务器将创建加密口令。

  1. 在 NIS+ 主服务器的 /etc/security/policy.conf 文件中指定口令加密算法。

  2. 为尽可能减少混淆,将 NIS+ 主服务器的 /etc/security/policy.conf 文件复制到 NIS+ 域中的每台主机。

Procedure如何为 LDAP 域指定新的口令算法

正确配置 LDAP 客户机后,LDAP 客户机便可以使用新的口令算法。LDAP 客户机的行为与 NIS 客户机的行为相同。

  1. 在 LDAP 客户机的 /etc/security/policy.conf 文件中指定口令加密算法。

  2. 将修改过的 policy.conf 文件复制到 LDAP 域中的每台客户机。

  3. 确保客户机的 /etc/pam.conf 文件不使用 pam_ldap 模块。

    确保注释符号 (#) 位于包含 pam_ldap.so.1 的项的前面。另外,请勿将新的 server_policy 选项与 pam_authtok_store.so.1 模块一起使用。

    客户机的 pam.conf 文件中的 PAM 项允许根据本地算法配置来加密口令。PAM 项还允许验证口令。

    当 LDAP 域中的用户更改其口令时,LDAP 客户机会查看 /etc/security/policy.conf 文件中的本地算法配置。LDAP 客户机将加密口令。然后,客户机将加密过的口令连同 {crypt} 标记一起发送到服务器。该标记告知服务器该口令已加密。该口令将按原样存储在服务器上。验证时,客户机先从服务器检索存储的口令。然后,将存储的口令与其从用户键入的口令生成的加密版本进行比较。


    注 –

    要利用 LDAP 服务器的口令策略控制,请将 server_policy 选项与 pam.conf 文件中的 pam_authtok_store 项一起使用。这样,将使用 Sun JavaTM System Directory Server 的加密机制在服务器上加密口令。有关过程,请参见《系统管理指南:名称和目录服务(DNS、NIS 和 LDAP)》中的第 11  章 “为使用 LDAP 客户机设置 Sun Java System Directory Server(任务)”


Procedure如何安装第三方的口令加密模块

第三方口令加密算法通常在软件包中作为模块提供。运行 pkgadd 命令时,供应商的脚本应修改 /etc/security/crypt.conf 文件。然后,您可修改 /etc/security/policy.conf 文件以包含新模块及其标识符。

  1. 使用 pkgadd 命令添加软件。

    有关如何添加软件的详细说明,请参见《系统管理指南:基本管理》中的“添加或删除软件包 (pkgadd)”

  2. 确认是否已添加新模块及模块标识符。

    读取 /etc/security/crypt.conf 文件中的加密算法列表。

    例如,以下行说明已安装了用于实现 crypt_rot13 算法的模块:


    # crypt.conf
    
    #
    
    md5 /usr/lib/security/$ISA/crypt_md5.so
    
    rot13 /usr/lib/security/$ISA/crypt_rot13.so
    
    
    
    # For *BSD - Linux compatibility
    
    # 1 is MD5,  2a is Blowfish
    
    1 /usr/lib/security/$ISA/crypt_bsdmd5.so
    
    2a /usr/lib/security/$ISA/crypt_bsdbf.so
  3. 将新安装算法的标识符添加到 /etc/security/policy.conf 文件。

    以下行显示了需要修改以添加 rot13 标识符的 policy.conf 文件的摘录:


    # Copyright 1999-2002 Sun Microsystems, Inc.  All rights reserved.
    
    # ...
    
    #ident  "@(#)policy.conf        1.6     02/06/07 SMI"
    
    # ...
    
    # crypt(3c) Algorithms Configuration
    
    CRYPT_ALGORITHMS_ALLOW=1,2a,md5,rot13
    
    #CRYPT_ALGORITHMS_DEPRECATE=__unix__
    
    CRYPT_DEFAULT=md5

    在此示例中,如果当前口令是使用 crypt_rot13 算法加密的,则使用 rot13 算法。新用户口令使用 crypt_sunmd5 算法进行加密。此算法配置适用于仅 Solaris 网络。

监视和限制超级用户(任务列表)

以下任务列表说明如何监视和限制 root 用户登录:

任务 

说明 

参考 

监视正在使用 su 命令的用户

定期扫描 sulog 文件。

如何监视正在使用 su 命令的用户

在控制台上显示超级用户活动 

在超级用户尝试登录时监视其访问尝试。 

如何限制和监视超级用户登录

监视和限制超级用户

另一种使用超级用户帐户的方法是设置基于角色的访问控制。基于角色的访问控制称为 RBAC。有关 RBAC 的概述信息,请参见基于角色的访问控制(概述)。要设置 RBAC,请参见第 9 章,使用基于角色的访问控制(任务)

Procedure如何监视正在使用 su 命令的用户

sulog 文件列出了 su 命令的每次使用情况,而不仅仅包括用于从用户切换到超级用户的 su 尝试。

    定期监视 /var/adm/sulog 文件的内容。


    # more /var/adm/sulog
    
    SU 12/20 16:26 + pts/0 stacey-root
    
    SU 12/21 10:59 + pts/0 stacey-root
    
    SU 01/12 11:11 + pts/0 root-rimmer
    
    SU 01/12 14:56 + pts/0 pmorph-root
    
    SU 01/12 14:57 + pts/0 pmorph-root

    这些项显示以下信息:

    • 输入命令的日期和时间。

    • 尝试是否成功。加号 (+) 表明尝试成功。减号 (-) 表明尝试失败。

    • 发出命令的端口。

    • 用户名称和切换身份的名称。

    缺省情况下,通过 /etc/default/su 文件中的以下项启用此文件中的 su 记录:


    SULOG=/var/adm/sulog

Procedure如何限制和监视超级用户登录

此方法可立即检测访问本地系统的超级用户尝试。

  1. 查看 /etc/default/login 文件中的 CONSOLE 项。


    CONSOLE=/dev/console

    缺省情况下,控制台设备设置为 /dev/console。使用此设置,root 可以登录到控制台。root 无法远程登录。

  2. 检验 root 是否可以远程登录。

    从远程系统,尝试以超级用户身份登录。


    mach2 % rlogin -l root mach1
    
    Password: <键入 mach1 的超级用户口令>
    
    Not on system console
    
    Connection closed.
  3. 监视成为超级用户的尝试。

    缺省情况下,会使用 SYSLOG 实用程序在控制台上列显成为超级用户的尝试。

    1. 在桌面上打开终端控制台。

    2. 在另一个窗口中,使用 su 命令成为超级用户。


      % su
      
      Password: <键入超级用户口令>
      
      #

      将在终端控制台上列显一条消息。


      Sep 7 13:22:57 mach1 su: 'su root' succeeded for jdoe on /dev/pts/6

示例 3–7 记录超级用户访问尝试

在此示例中,SYSLOG 不会记录超级用户尝试。因此,管理员将通过删除 /etc/default/su 文件中的 #CONSOLE=/dev/console 项的注释来记录这些尝试。


# CONSOLE determines whether attempts to su to root should be logged

# to the named device

#

CONSOLE=/dev/console

当用户尝试成为超级用户时,将在终端控制台上列显该尝试。


SU 09/07 16:38 + pts/8 jdoe-root

故障排除

要在 /etc/default/login 文件包含缺省 CONSOLE 项的情况下从远程系统成为超级用户,用户必须先使用其用户名登录。使用其用户名登录后,用户便可以使用 su 命令成为超级用户。

如果控制台显示类似于 Mar 16 16:20:36 mach1 login: ROOT LOGIN /dev/pts/14 FROM mach2.Example.COM 的项,则系统允许远程 root 登录。要禁止远程超级用户访问,请将 /etc/default/login 文件中的 #CONSOLE=/dev/console 项更改为 CONSOLE=/dev/console

SPARC: 控制对系统硬件的访问(任务列表)

以下任务列表说明如何使 PROM 免受不需要的访问:

任务 

说明 

参考 

禁止用户更改系统硬件设置 

修改 PROM 设置需要提供口令。 

如何要求硬件访问口令

禁用中止序列 

禁止用户访问 PROM。 

如何禁用系统的中止序列

控制对系统硬件的访问

可以通过要求在访问硬件设置时提供口令来保护物理计算机,也可以通过禁止用户使用中止序列离开窗口系统来保护计算机。

Procedure如何要求硬件访问口令

在 x86 系统上,保护 PROM 即是保护 BIOS。有关如何保护 BIOS,请参阅计算机手册。

  1. 成为超级用户或承担拥有设备安全配置文件、维护和修复配置文件或系统管理员配置文件的角色。

    系统管理员配置文件包括维护和修复配置文件。要创建拥有系统管理员配置文件的角色并将该角色指定给用户,请参见配置 RBAC(任务列表)

  2. 在终端窗口中,键入 PROM 安全模式。


    # eeprom security-mode=command
    
    
    
    Changing PROM password:
    
    New password: <键入口令>
    
    Retype new password: <重新键入口令>	
    

    选择值 commandfull。有关更多详细信息,请参见 eeprom(1M) 手册页。

    如果键入上述命令时未提示输入 PROM 口令,则表明系统已拥有 PROM 口令。

  3. (可选的)要更改 PROM 口令,请键入以下命令:


    # eeprom security-password= 按回车键
    
    Changing PROM password:
    
    New password: <键入口令>
    
    Retype new password: <重新键入口令>
    

    新的 PROM 安全模式和口令将立即生效。但是,很可能在下次引导时才会对这些更改进行通知。


    注意 – 注意 –

    切勿忘记 PROM 口令。如果没有此口令,硬件将不可用。


Procedure如何禁用系统的中止序列

某些服务器系统具有键开关。如果将键开关设置在安全位置,则该开关将覆盖软件键盘中止设置。因此,使用以下过程进行的任何更改都可能无法实现。

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. KEYBOARD_ABORT 的值更改为 disable

    注释掉 /etc/default/kbd 文件中的 enable 行。然后,添加 disable 行:


    # cat /etc/default/kbd
    
    …
    
    # KEYBOARD_ABORT affects the default behavior of the keyboard abort
    
    # sequence, see kbd(1) for details.  The default value is "enable".
    
    # The optional value is "disable".  Any other value is ignored.
    
    …
    
    #KEYBOARD_ABORT=enable
    
    KEYBOARD_ABORT=disable
    
  3. 更新键盘缺省值。


    # kbd -i
    

第 4 章 控制对设备的访问(任务)

本章介绍了保护设备的逐步说明,并包含一个参考部分。以下是本章中的信息列表:

有关设备保护的概述信息,请参见控制对设备的访问

配置设备(任务列表)

以下任务列表介绍了管理设备访问的任务。

任务 

参考 

管理设备策略 

配置设备策略(任务列表)

管理设备分配 

管理设备分配(任务列表)

使用设备分配 

分配设备(任务列表)

配置设备策略(任务列表)

以下任务列表介绍了与设备策略相关的设备配置过程。

任务 

说明 

参考 

查看系统上设备的设备策略 

列出设备及其设备策略。 

如何查看设备策略

要求使用设备的权限 

使用权限保护设备。 

如何更改现有设备上的设备策略

删除设备的权限要求 

删除或减少访问设备所需的权限。 

示例 4–3

审计设备策略中的更改 

在审计跟踪中记录设备策略的更改。 

如何审计设备策略中的更改

访问 /dev/arp

获取 Solaris IP MIB-II 信息。 

如何从 /dev/* 设备检索 IP MIB-II 信息

配置设备策略

设备策略会限制或防止对作为系统整体部分的设备进行访问。策略在内核中实施。

Procedure如何查看设备策略

    显示系统上所有设备的设备策略。


    % getdevpolicy | more
    
    DEFAULT
    
            read_priv_set=none
    
            write_priv_set=none
    
    ip:*
    
            read_priv_set=net_rawaccess
    
            write_priv_set=net_rawaccess
    
    …

示例 4–1 查看特定设备的设备策略

此示例显示了三个设备的设备策略。


% getdevpolicy /dev/allkmem /dev/ipsecesp /dev/hme

/dev/allkmem

        read_priv_set=all

        write_priv_set=all

/dev/ipsecesp

        read_priv_set=sys_net_config

        write_priv_set=sys_net_config

/dev/hme

        read_priv_set=net_rawaccess

        write_priv_set=net_rawaccess

Procedure如何更改现有设备上的设备策略

  1. 承担拥有设备安全权限配置文件的角色或成为超级用户。

    主管理员角色拥有设备安全权限配置文件。还可以将设备安全权限配置文件指定给所创建的角色。有关如何创建角色并将其指定给用户的信息,请参见示例 9–3

  2. 向设备中添加策略。


    # update_drv -a -p policy device-driver
    
    -a

    指定 device-driverpolicy

    -p policy

    device-driver 的设备策略。设备策略指定两组权限。一组用于读取设备,另一组用于写入设备。

    device-driver

    设备驱动程序。

    有关更多信息,请参见 update_drv(1M) 手册页。


示例 4–2 向现有设备中添加策略

以下示例向 ipnat 设备中添加设备策略。


# getdevpolicy /dev/ipnat

/dev/ipnat

        read_priv_set=none

        write_priv_set=none

# update_drv -a \

-p 'read_priv_set=net_rawaccess write_priv_set=net_rawaccess' ipnat

# getdevpolicy /dev/ipnat

/dev/ipnat

        read_priv_set=net_rawaccess

        write_priv_set=net_rawaccess


示例 4–3 删除设备的策略

以下示例从 ipnat 设备的设备策略中删除读取的一组权限。


# getdevpolicy /dev/ipnat

/dev/ipnat

        read_priv_set=net_rawaccess

        write_priv_set=net_rawaccess

# update_drv -a -p write_priv_set=net_rawaccess ipnat

# getdevpolicy /dev/ipnat

/dev/ipnat

        read_priv_set=none

        write_priv_set=net_rawaccess

Procedure如何审计设备策略中的更改

缺省情况下,as 审计类包括 AUE_MODDEVPLCY 审计事件。

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 预选包括 AUE_MODDEVPLCY 审计事件的审计类。

    as 类添加到 audit_control 文件的 flags 行中。此文件的显示将与以下内容类似:


    # audit_control file
    
    dir:/var/audit
    
    flags:lo,as
    
    minfree:20
    
    naflags:lo

    有关详细说明,请参见如何修改 audit_control 文件

Procedure如何从 /dev/* 设备检索 IP MIB-II 信息

检索 Solaris IP MIB-II 信息的应用程序应该打开 /dev/arp,而不是 /dev/ip

  1. 确定 /dev/ip /dev/arp 上的设备策略。


    % getdevpolicy /dev/ip /dev/arp
    
    /dev/ip
    
            read_priv_set=net_rawaccess
    
            write_priv_set=net_rawaccess
    
    /dev/arp
    
            read_priv_set=none
    
            write_priv_set=none

    请注意,读写 /dev/ip 需要具有 net_rawaccess 权限,而 /dev/arp 不需要权限。

  2. 打开 /dev/arp 并推送 tcpudp 模块。

    此方法不需要权限,与打开 /dev/ip 并推送 arptcpudp 模块等效。由于现在打开 /dev/ip 需要权限,因此首选使用 /dev/arp 方法。

管理设备分配(任务列表)

以下任务列表介绍了启用和配置设备分配的过程。缺省情况下不会启用设备分配。启用设备分配之后,请参见分配设备(任务列表)

任务 

说明 

参考 

使设备可分配 

可以一次将一个设备分配给一个用户。 

如何使设备可分配

授权用户分配设备 

将设备分配授权指定给用户。 

如何授权用户来分配设备

查看系统上的可分配设备 

列出可分配的设备及其状态。 

如何查看有关设备的分配信息

强制分配设备 

将设备分配给有即时需要的用户 

强制分配设备

强制解除设备分配 

解除当前分配给某用户设备的分配 

强制解除设备分配

更改设备的分配属性 

更改分配设备的要求 

如何更改可以分配的设备

创建设备清理脚本 

清除物理设备中的数据。 

编写新的设备清理脚本

禁用设备分配 

删除所有设备中的分配限制。 

如何禁用审计

审计设备分配 

在审计跟踪中记录设备分配 

如何审计设备分配

管理设备分配

设备分配会限制或防止对外围设备进行访问。限制在用户分配时实施。缺省情况下,用户必须具有授权才能访问可分配设备。

Procedure如何使设备可分配

如果已经运行 bsmconv 命令启用了审计,则已经在系统上启用了设备分配。有关更多信息,请参见 bsmconv(1M) 手册页。

  1. 承担拥有审计控制权限配置文件的角色或成为超级用户。

    主管理员角色拥有审计控制权限配置文件。还可以将审计控制权限配置文件指定给所创建的角色。有关如何创建角色并将其指定给用户的信息,请参见示例 9–3

  2. 启用设备分配。


    # 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.

    注 –

    此命令禁用 Volume Management 守护进程 (/etc/rc3.d/S81volmgt)。


Procedure如何授权用户来分配设备

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 创建包含适当授权和命令的权限配置文件。

    通常,可以创建包括 solaris.device.allocate 授权的权限配置文件。请按照如何创建或更改权限配置文件中的说明执行。授予权限配置文件适当属性,例如:

    • 权限配置文件名称: Device Allocation

    • 授予的授权: solaris.device.allocate

    • 带有安全属性的命令:带有 sys_mount 权限的 mount 和带有 sys_mount 权限的 umount

  3. 创建权限配置文件的角色。

    请按照如何使用 GUI 创建和指定角色中的说明执行。使用以下角色属性作为指南:

    • 角色名: devicealloc

    • 角色全名: Device Allocator

    • 角色说明: Allocates and mounts allocated devices

    • 权限配置文件: Device Allocation

      此权限配置文件必须在包括于角色中的配置文件列表的顶部。

  4. 将此角色指定给允许分配设备的每个用户。

  5. 为用户讲授如何使用设备分配。

    有关分配可移除介质的示例,请参见如何分配设备

    由于 Volume Management 守护进程 (vold) 未运行,因此不会自动挂载可移除介质。有关挂载已分配设备的示例,请参见如何挂载已分配的设备

Procedure如何查看有关设备的分配信息

开始之前

必须启用设备分配,此过程才会成功。有关如何启用设备分配的信息,请参见如何使设备可分配

  1. 承担拥有设备安全权限配置文件的角色或成为超级用户。

    主管理员角色拥有设备安全权限配置文件。还可以将设备安全权限配置文件指定给所创建的角色。有关如何创建角色并将其指定给用户的信息,请参见示例 9–3

  2. 显示有关系统上可分配设备的信息。


    # list_devices device-name
    

    其中,device-name 是以下各项之一:

    • audio[n]-麦克风和扬声器。

    • fd[n]-软盘驱动器。

    • sr[n]-CD-ROM 驱动器。

    • st[n]-磁带机。

故障排除

如果 list_devices 命令返回一条类似于以下内容的错误消息,则表明未启用设备分配,或者您不具有足够权限来检索此信息。

list_devices: No device maps file entry for specified device.

为使此命令成功执行,请启用设备分配并承担具有 solaris.device.revoke 授权的角色。

Procedure强制分配设备

强制分配应在某个用户忘记解除设备分配时使用,也可以在用户对设备有即时需要时使用。

开始之前

此用户或角色必须具有 solaris.device.revoke 授权。

  1. 确定角色中是否具有适当授权。


    $ auths
    
    solaris.device.allocate solaris.device.revoke
  2. 将设备强制分配给需要此设备的用户。

    此示例将磁带机强制分配给用户 jdoe


    $ allocate -U jdoe
    

Procedure强制解除设备分配

在进程终止或用户注销时,不会自动解除对用户的设备分配。用户忘记解除设备分配时,应使用强制解除分配。

开始之前

此用户或角色必须具有 solaris.device.revoke 授权。

  1. 确定角色中是否具有适当授权。


    $ auths
    
    solaris.device.allocate solaris.device.revoke
  2. 强制解除设备分配。

    此示例强制解除打印机分配。现在,其他用户可以分配此打印机。


    $ deallocate -f /dev/lp/printer-1
    

Procedure如何更改可以分配的设备

  1. 承担拥有设备安全权限配置文件的角色或成为超级用户。

    主管理员角色拥有设备安全权限配置文件。还可以将设备安全权限配置文件指定给所创建的角色。有关如何创建角色并将其指定给用户的信息,请参见示例 9–3

  2. 指定是否需要授权,或者指定 solaris.device.allocate 授权。

    更改 device_allocate 文件中设备项的第五个字段。


    audio;audio;reserved;reserved;solaris.device.allocate;/etc/security/lib/audio_clean
    
    fd0;fd;reserved;reserved;solaris.device.allocate;/etc/security/lib/fd_clean
    
    sr0;sr;reserved;reserved;solaris.device.allocate;/etc/security/lib/sr_clean

    其中,solaris.device.allocate 指示用户必须具有 solaris.device.allocate 授权才能使用此设备。


示例 4–4 允许任何用户分配设备

在以下示例中,系统上的任何用户都可以分配所有设备。device_allocate 文件中每个设备项的第五个字段都更改为一个 at 符号 (@)。


$ whoami

devicesec

$ vi /etc/security/device_allocate

audio;audio;reserved;reserved;@;/etc/security/lib/audio_clean

fd0;fd;reserved;reserved;@;/etc/security/lib/fd_clean

sr0;sr;reserved;reserved;@;/etc/security/lib/sr_clean

…


示例 4–5 防止使用某些外围设备

在以下示例中,不能使用音频设备。device_allocate 文件中音频设备项的第五个字段更改为一个星号 (*)。


$ whoami

devicesec

$ vi /etc/security/device_allocate

audio;audio;reserved;reserved;*;/etc/security/lib/audio_clean

fd0;fd;reserved;reserved;solaris device.allocate;/etc/security/lib/fd_clean

sr0;sr;reserved;reserved;solaris device.allocate;/etc/security/lib/sr_clean

…


示例 4–6 防止使用所有外围设备

在以下示例中,不能使用外围设备。device_allocate 文件中每个设备项的第五个字段都更改为一个星号 (*)。


$ whoami

devicesec

$ vi /etc/security/device_allocate

audio;audio;reserved;reserved;*;/etc/security/lib/audio_clean

fd0;fd;reserved;reserved;*;/etc/security/lib/fd_clean

sr0;sr;reserved;reserved;*;/etc/security/lib/sr_clean

…

Procedure如何审计设备分配

缺省情况下,设备分配命令位于 other 审计类中。

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 预选 ot 类进行审计。

    ot 类添加到 audit_control 文件的 flags 行中。此文件的显示与以下信息类似:


    # audit_control file
    
    dir:/var/audit
    
    flags:lo,ot
    
    minfree:20
    
    naflags:lo

    有关详细说明,请参见如何修改 audit_control 文件

分配设备(任务列表)

以下任务列表介绍了向用户说明如何分配设备的过程。

任务 

说明 

参考 

分配设备 

使某用户可以用某设备,同时防止任何其他用户使用此设备。 

如何分配设备

挂载已分配的设备 

使用户可以查看需要挂载的设备,例如 CD-ROM 或软盘。 

如何挂载已分配的设备

解除设备分配 

使其他用户可以使用可分配设备。 

如何解除设备分配

分配设备

设备分配使设备每次只能被一个用户使用。必须挂载需要挂载点的设备。

Procedure如何分配设备

开始之前

必须启用设备分配,如如何使设备可分配中所述。如果需要授权,则用户必须具有此授权。

  1. 分配设备。

    根据设备名称指定设备。


    % allocate device-name
    
  2. 检验是否已分配此设备。

    运行相同命令。


    % allocate device-name
    
    allocate. Device already allocated.

示例 4–7 分配麦克风

在此示例中,用户 jdoe 分配麦克风 audio


% whoami

jdoe

% allocate audio


示例 4–8 分配打印机

在此示例中,某用户分配打印机。该用户解除打印机分配或打印机被强制分配给其他用户之前,任何其他用户都不能打印到 printer-1


% allocate /dev/lp/printer-1

有关强制解除分配的示例,请参见强制解除设备分配



示例 4–9 分配磁带机

在此示例中,用户 jdoe 分配磁带机 st0


% whoami

jdoe

% allocate st0

故障排除

如果 allocate 命令不能分配设备,则会在控制台窗口显示一条错误消息。有关分配错误消息的列表,请参见 allocate(1) 手册页。

Procedure如何挂载已分配的设备

开始之前

用户或角色已分配了此设备。要挂载设备,用户或角色必须具有挂载此设备所需的权限。有关如何提供所需权限的信息,请参见如何授权用户来分配设备

  1. 承担可以分配和挂载设备的角色。


    % su role-name
    
    Password: <键入 role-name 的口令>
    
    $
  2. 在角色起始目录中创建并保护挂载点。

    只需在首次需要挂载点的时候执行此步骤。


    $ mkdir mount-point ; chmod 700 mount-point
    
  3. 列出可分配的设备。


    $ list_devices -l
    
    List of allocatable devices
    
  4. 分配设备。

    根据设备名称指定设备。


    $ allocate device-name
    
  5. 挂载设备。


    $ mount -o ro -F filesystem-type device-path mount-point
    

    其中,

    -o ro

    指示将此设备挂载为只读。使用 -o rw 指示应该可以写入此设备。

    -F filesystem-type

    指示设备的文件系统格式。通常,使用 HSFS 文件系统格式化 CD-ROM。而软盘通常使用 PCFS 文件系统进行格式化。

    device-path

    指示设备的路径。list_devices -l 命令的输出包括 device-path

    mount-point

    指示在步骤 2 中创建的挂载点。


示例 4–10 分配软盘驱动器

在此示例中,用户承担可以分配和挂载软盘驱动器 fd0 的角色。软盘已使用 PCFS 文件系统进行了格式化。


% roles

devicealloc

% su devicealloc

Password: <键入 devicealloc 的口令>

$ mkdir /home/devicealloc/mymnt

$ chmod 700 /home/devicealloc/mymnt

$ list_devices -l

...

device: fd0 type: fd files: /dev/diskette /dev/rdiskette /dev/fd0a

...

$ allocate fd0

$ mount -o ro -F pcfs /dev/diskette /home/devicealloc/mymnt

$ ls /home/devicealloc/mymnt

List of the contents of diskette


示例 4–11 分配 CD-ROM 驱动器

在此示例中,用户承担可以分配和挂载 CD-ROM 驱动器 sr0 的角色。此驱动器按照 HSFS 文件系统进行格式化。


% roles

devicealloc

% su devicealloc

Password: <键入 devicealloc 的口令>

$ mkdir /home/devicealloc/mymnt

$ chmod 700 /home/devicealloc/mymnt

$ list_devices -l

...

device: sr0 type: sr files: /dev/sr0 /dev/rsr0 /dev/dsk/c0t2d0s0 ...

...

$ allocate sr0

$ mount -o ro -F hsfs /dev/sr0 /home/devicealloc/mymnt

$ cd /home/devicealloc/mymnt ; ls

List of the contents of CD-ROM

故障排除

如果 mount 命令不能挂载设备,则会显示一条错误消息: mount:insufficient privileges。检查以下各项:

如果仍然不能挂载已分配的设备,请与管理员联系。

Procedure如何解除设备分配

解除分配使其他用户可以分配和使用此设备。

开始之前

必须已经分配此设备。

  1. 如果此设备已挂载,请将其卸载。


    $ cd $HOME
    
    $ umount mount-point
    
  2. 解除设备分配。


    $ deallocate device-name
    

示例 4–12 解除麦克风分配

在此示例中,用户 jdoe解除麦克风 audio 的分配。


% whoami

jdoe

% deallocate audio


示例 4–13 解除 CD-ROM 驱动器的分配

在此示例中,设备分配器角色解除 CD-ROM 驱动器的分配。消息列显后,会弹出 CD-ROM。


$ whoami

devicealloc

$ cd /home/devicealloc

$ umount /home/devicealloc/mymnt

$ ls /home/devicealloc/mymnt

$ 

$ deallocate sr0

/dev/sr0:      326o

/dev/rsr0:     326o

…

sr_clean: Media in sr0 is ready.  Please, label and store safely.

设备保护(参考)

设备策略保护 Solaris OS 中的设备。设备分配可以保护外围设备。设备策略由内核实施。可以选择启用设备分配,并在用户级别实施。

设备策略命令

设备管理命令管理本地文件的设备策略。设备策略可以包括权限要求。只有超级用户或具有等效功能的角色才能管理设备。

下表列出了设备管理命令。

表 4–1 设备管理命令

命令 

目的 

手册页 

devfsadm

在运行的系统上管理设备和设备驱动程序。还装入设备策略。 

使用 devfsadm 命令,可以清除指向磁盘、磁带、端口、音频设备和伪设备的不稳定 /dev 链接。还可以重新配置已命名驱动程序的设备。

devfsadm(1M)

getdevpolicy

显示与一个或多个设备关联的策略。任何用户都可以运行此命令。 

getdevpolicy(1M)

add_drv

将新设备驱动程序添加到正在运行的系统。包含将设备策略添加到此新设备的选项。通常,正在安装设备驱动程序时会在脚本中调用此命令。 

add_drv(1M)

update_drv

更新现有设备驱动程序的属性。包含为此设备更新设备策略的选项。通常,正在安装设备驱动程序时会在脚本中调用此命令。 

update_drv(1M)

rem_drv

删除设备或设备驱动程序。 

rem_drv(1M)

设备分配

设备分配可以保护站点免受数据丢失、计算机病毒以及其他安全问题的破坏。与设备策略不同,设备分配是可选的。只有在 bsmconv 脚本运行之后才可分配设备。。设备分配使用授权限制对可分配设备的访问。

设备分配的组成

设备分配机制的组成如下所示:

这些命令和脚本使用以下本地文件实现设备分配:


注 –

Solaris OS 的将来发行版可能不支持 /etc/security/dev 目录。


设备分配命令

与大写选项一起使用时,allocatedeallocate list_devices 命令是管理命令。否则,这些命令是用户命令。下表列出了设备分配命令。

表 4–2 设备分配命令

命令 

目的 

手册页 

bsmconv

创建数据库以处理设备分配。还启用审计服务。您必须是超级用户或承担主管理员角色。 

bsmconv(1M)

dminfo

根据设备类型、设备名称以及全路径名搜索可分配设备。 

dminfo(1M)

list_devices

列出可分配设备的状态。 

列出与 device_maps 文件中列出的任何设备关联的所有设备特定文件。

list_devices(1)

list_devices -U

列出可分配或分配给指定用户 ID 的设备。使用此选项可以检查可分配或分配给其他用户的设备。必须具有 solaris.device.revoke 授权。

 

allocate

保留一个可分配设备以供一个用户使用。 

缺省情况下,用户必须具有 solaris.device.allocate 授权才能分配设备。可以修改 device_allocate 文件,使其不需要用户授权。然后,系统上的任何用户都可以请求分配设备以供使用。

allocate(1)

deallocate

删除设备的分配保留。 

deallocate(1)

分配命令授权

缺省情况下,用户必须具有 solaris.device.allocate 授权才能保留可分配设备。有关如何创建包括 solaris.device.allocate 授权的权限配置文件的信息,请参见如何授权用户来分配设备

管理员必须具有 solaris.device.revoke 授权才能更改任何设备的分配状态。例如,allocatelist_devices 命令的 -U 选项,以及 deallocate 命令的 -F 选项需要 solaris.device.revoke 授权。

有关更多信息,请参见要求授权的命令

分配错误状态

deallocate 命令解除分配失败,或 allocate 命令分配失败时,设备将被置于分配错误状态。可分配设备处于分配错误状态时,必须强制解除对此设备的分配。只有超级用户或者具有设备管理权限配置文件或设备安全权限配置文件的角色才能处理分配错误状态。

deallocate 命令和 -F 选项一起使用可强制解除分配。或者,可以使用 allocate -U 将设备指定给用户。设备分配后,便可查明出现的任何错误消息。更正设备的所有问题后,可强制解除其分配。

device_maps 文件

设置设备分配时会创建设备映射。启用审计服务后,bsmconv 命令会创建缺省 /etc/security/device_maps 文件。可以为站点自定义此初始 device_maps 文件。device_maps 文件包括与每个可分配设备关联的设备名称、设备类型和设备特定文件。

device_maps 文件定义每个设备的设备特定文件映射,这在许多情况下并不是直观的。使用此文件,程序可以查看设备特定文件和设备之间的映射关系。例如,可以使用 dminfo 命令,在设置可分配设备时检索要指定的设备名称、设备类型和设备特定文件。dminfo 命令使用 device_maps 文件来报告此信息。

每个设备由仅占一行的项表示,该项格式如下:


device-name:device-type:device-list

示例 4–14 device_maps 项样例

以下是 device_maps 文件中软盘驱动器 fd0 的项的示例:


fd0:\

        fd:\

        /dev/diskette /dev/rdiskette /dev/fd0a /dev/rfd0a \

/dev/fd0b /dev/rfd0b /dev/fd0c /dev/fd0 /dev/rfd0c /dev/rfd0:\

device_maps 文件中的行可以用反斜杠 (\) 结束,以在下一行继续项。也可以包括注释。井号 (#) 注释前面未紧跟反斜杠的下一个新行之前的所有后续文本。所有字段中都允许前导空格和后缀空格。字段定义如下:

device-name

指定此设备的名称。有关当前设备名称的列表,请参见如何查看有关设备的分配信息

device-type

指定通用设备类型。通用名称是设备类的名称,例如 stfdaudiodevice-type 字段在逻辑上将相关设备分组。

device-list

列出与物理设备关联的设备特定文件。device-list 必须包含所有允许访问特定设备的特定文件。如果此列表不完整,则恶意用户仍可以获取或修改专用信息。device-list 字段的有效项反映位于 /dev 目录中的设备文件。

device_allocate 文件

启用审计服务后,bsmconv 命令会创建初始 /etc/security/device_allocate 文件。此初始 device_allocate 文件可以用作起始点。可以修改 device_allocate 文件,以将设备从可分配更改为不可分配,或者添加新设备。以下是一个 device_allocate 文件样例。


st0;st;;;;/etc/security/lib/st_clean

fd0;fd;;;;/etc/security/lib/fd_clean

sr0;sr;;;;/etc/security/lib/sr_clean

audio;audio;;;*;/etc/security/lib/audio_clean

device_allocate 文件中的项并不表示此设备是可分配的,除非此项专门声明此设备是可分配的。请注意 device_allocate 文件样例中音频设备项第五个字段中的星号 (*)。第五个字段中的星号向系统指示此设备不是可分配的。因此,不能使用此设备。如果此字段中存在其他值或没有值,则指示可以使用此设备。

device_allocate 文件中,每个设备由仅占一行的项表示,该项的格式如下:


device-name;device-type;reserved;reserved;auths;device-exec

device_allocate 文件中的行可以用反斜杠 (\) 结束,以在下一行继续项。也可以包括注释。井号 (#) 注释前面未紧跟反斜杠的下一个新行之前的所有后续文本。所有字段都允许前导空格和后缀空格。字段定义如下:

device-name

指定此设备的名称。有关当前设备名称的列表,请参见如何查看有关设备的分配信息

device-type

指定通用设备类型。通用名称是设备类的名称,例如 stfdsrdevice-type 字段在逻辑上将相关设备分组。使设备可分配后,可 device_maps 文件的 device-type 字段中检索设备名称。

reserved

Sun 保留两个标记为 reserved 的字段以供将来使用。

auths

指定此设备是否可分配。此字段中的星号 (*) 指示此设备是不可分配的。授权字符串或空字段指示此设备是可分配的。例如,auths 字段中的字符串 solaris.device.allocate 指示需要 solaris.device.allocate 授权才能分配此设备。此文件中的 at 符号 (@) 指示任何用户都可以分配此设备。

device-exec

提供为特殊处理(例如分配进程期间的清除和对象重用保护)而调用的脚本的路径名称。每当 deallocate 命令对此设备执行操作时,都会运行 device-exec 脚本。

例如,sr0 设备的以下项指示具有 solaris.device.allocate 授权的用户可以分配 CD-ROM 驱动器:


sr0;sr;reserved;reserved;solaris.device.allocate;/etc/security/lib/sr_clean

可以决定接受缺省设备及其已定义特征。安装新设备后,可以修改这些项。任何需要在使用之前分配的设备都必须在该设备系统的 device_allocatedevice_maps 文件中定义。当前,将盒式磁带机、软盘驱动器、CD-ROM 驱动器和音频芯片视为可分配的。这些设备类型具有设备清理脚本。


注 –

XylogicsTM 磁带机或归档磁带机还使用为 SCSI 设备提供的 st_clean 脚本。需要为其他设备(如调制解调器、终端、图形输入板和其他可分配设备)创建自己的设备清理脚本。脚本必须满足此类型设备的对象重用要求。


设备清理脚本

设备分配满足称为对象重用的部分要求。设备清理脚本说明安全要求,即在重用之前从物理设备中清除所有可用数据。清除数据后,其他用户才可分配此设备。缺省情况下,盒式磁带机、软盘驱动器、CD-ROM 驱动器和音频设备需要设备清理脚本。Solaris OS 提供了这些脚本。本节介绍设备清理脚本的功能。

磁带的设备清理脚本

st_clean 设备清理脚本支持三种磁带设备:

st_clean 脚本使用 mt 命令的 rewoffl 选项来清除此设备。有关更多信息,请参见 mt(1) 手册页。如果此脚本在系统引导期间运行,则会查询此设备以确定它是否联机。如果设备联机,则此脚本确定设备中是否有介质。内含介质的 ¼ 英寸磁带设备会被置于分配错误状态。分配错误状态强制管理员手动清除此设备。

系统正常操作期间,在交互模式下执行 deallocate 命令时,将提示用户删除此介质。从设备中删除此介质之后才会进行解除分配。

软盘驱动器和 CD-ROM 驱动器的设备清理脚本

为软盘驱动器和 CD-ROM 驱动器提供以下设备清理脚本:

这些脚本使用 eject 命令从驱动器中删除介质。如果 eject 命令失败,则会将此设备置于分配错误状态。有关更多信息,请参见 eject(1) 手册页。

音频的设备清理脚本

使用 audio_clean 脚本清除音频设备。此脚本执行 AUDIO_GETINFO ioctl 系统调用来读取设备。然后,此脚本执行 AUDIO_SETINFO ioctl 系统调用将此设备的配置重置为缺省值。

编写新的设备清理脚本

如果将更多可分配设备添加到系统,则可能需要创建自己的设备清理脚本。deallocate 命令将参数传送到设备清理脚本中。在此显示的参数是包含设备名称的字符串。有关更多信息,请参见 device_allocate(4) 手册页。


clean-script -[I|i|f|S] device-name

设备清理脚本在成功时一定会返回 "0",而在失败时返回大于 "0" 的值。-I-f-S 选项确定脚本的运行模式:

-I

只有在系统引导期间才需要此选项。所有输出必须转到系统控制台。强制弹出介质失败或无法强制弹出介质必定会将此设备置于分配错误状态。

-i

-I 选项类似,但不显示输出。

-f

用于强制清除。此选项是交互的,并且假定用户可以响应提示。如果一部分清除操作失败,则带有此选项的脚本必须尝试完成清除。

-S

用于标准清除。此选项是交互的,并且假定用户可以响应提示。

第 5 章 使用基本审计报告工具(任务)

本章介绍如何在系统上创建文件清单以及如何使用此清单来检查系统的完整性。使用基本审计报告工具 (Basic Audit Reporting Tool, BART),您可以通过在一段时间内对系统执行文件层检查来全面地验证系统。

以下是本章中信息的列表:

基本审计报告工具(概述)

BART 是一种完全在文件系统层运行的文件跟踪工具。使用 BART,可以迅速、轻松、可靠地收集有关安装在已部署的系统上的软件栈组件的信息。使用 BART,可以通过简化耗时的管理任务来显著降低管理系统网络的成本。

使用 BART,可以根据已知的基准确定系统上所进行的文件层更改。可以使用 BART 根据完全安装并配置的系统创建基准或控制清单。然后可将此基准与系统快照进行比较,将生成一个列出从系统安装以来所进行的文件层更改的报告。

bart 命令是标准 UNIX 命令。您可以将 bart 命令的输出重定向到文件以便进行后续处理。

BART 功能

BART 在设计上侧重于既有效又灵活的简单语法。使用此工具,可以生成给定系统在一段时间内的清单。然后,需要验证此系统的文件时,可以通过比较新旧清单来生成报告。使用 BART 的另一种方法是生成若干个相似系统的清单,然后进行系统间的比较。BART 与现有审计工具的主要区别在于 BART 在跟踪信息和报告信息方面都非常灵活。

BART 的其他优点和用法包括:

BART 组件

BART 有两个主要组件和一个可选组件:

BART 清单

您可以使用 bart create 命令在特定时间拍摄系统的文件层快照。输出是名为清单的关于文件和文件属性的目录。此清单列出了有关系统上所有文件或特定文件的信息。它包含了有关文件属性的信息,其中可以包括一些唯一标识的信息,如 MD5 校验和。有关 MD5 校验和的更多信息,请参见 md5(3EXT) 手册页。清单可以进行存储,并可以在客户机和服务器系统间传送。


注 –

BART 不会跨越文件系统边界,但同一类型的文件系统除外。此约束使 bart create 命令的输出更容易预测。例如,在不带参数的情况下,bart create 命令编制根 (/) 目录下所有 UFS 文件系统的目录。但是,不会对 NFS 或 TMPFS 文件系统或已挂载的 CD-ROM 编制目录。创建清单时,请勿尝试审计网络中的文件系统。请注意,使用 BART 监视联网的文件系统会占用大量的资源而生成价值很小的清单。


有关 BART 清单的更多信息,请参见BART 清单文件格式

BART 报告

此报告工具有三项输入:两份要比较的清单和一个可选 rules 文件,此 rules 文件由用户提供,用于指明要标记的差异。

可以使用 bart compare 命令比较两份清单,一份是控制清单,另一份是测试清单。准备这些清单使用的文件系统、选项和 rules 文件必须与使用 bart create 命令时相同。

bart compare 命令的输出是一份报告,其中按文件列出了两份清单间的差异。差异是指上述两份清单中所列出的某个特定文件的任何属性的变化。两份清单间文件项的添加或删除也被视为差异。

报告差异时使用两个控制级别:

这些控制级别是特意设置的,因为生成清单所需的开销比报告两份清单间差异所需的开销大。创建清单之后,即可通过使用不同的 rules 文件运行 bart compare 命令来从各个方面比较清单。

有关 BART 报告的更多信息,请参见BART 报告

BART Rules 文件

rules 文件是一个运行 bart 命令时可选的作为输入的文本文件。此文件使用包含和排除规则。rules 文件用于创建自定义清单和报告。使用 rules 文件,可以用简洁的语法表达要编制目录的文件集以及要监视的任何给定文件集的属性。在比较清单时,使用 rules 文件有助于标记清单间的差异。使用 rules 文件是一种收集有关系统上文件的特定信息的有效方法。

可以使用文本编辑器创建 rules 文件。通过 rules 文件,可以执行以下任务:


注 –

您可以创建若干个用于不同用途的 rules 文件。但是,如果使用 rules 文件创建清单,则比较清单时必须使用同一个 rules 文件。如果比较清单时所用的 rules 文件与创建清单时所用的 rules 文件不同,则 bart compare 命令的输出会列出许多无效的差异。

rules 文件中也可能包含由于用户错误而导致的语法错误和其他不明确的信息。如果 rules 文件确实包含错误信息,则也会报告这些错误。


使用 rules 文件来监视系统上的特定文件和文件属性需要进行规划。创建 rules 文件之前,请首先确定系统上要监视的文件和文件属性。根据要完成的目标,可以使用 rules 文件来创建清单、比较清单或执行其他操作。

有关 BART rules 文件的更多信息,请参见BART Rules 文件格式bart_rules(4) 手册页。

使用 BART(任务列表)

任务 

说明 

参考 

创建清单。 

获取一个列出有关系统上安装的所有文件的信息的清单。 

如何创建清单

创建自定义清单。 

通过以下方法之一来获取一个列出有关系统上安装的特定文件的信息的清单: 

  • 通过指定子树

  • 通过指定文件名

  • 通过使用 rules 文件

 

 

 

 

如何自定义清单

 

 

比较同一系统在一段时间内的清单。或者,将不同系统的清单与控制系统清单进行比较。 

获取比较系统在一段时间内的更改的报告。或者,获取一个或几个系统与控制系统的相比较的报告。 

如何比较同一系统在一段时间内的清单

如何比较不同系统的清单与控制系统的清单

(可选)自定义 BART 报告。 

通过以下方法之一获取自定义 BART 报告: 

  • 通过指定属性。

  • 通过使用 rules 文件。

 

 

 

如何通过指定文件属性自定义 BART 报告

如何通过使用 Rules 文件自定义 BART 报告

使用 BART(任务)

您可以以普通用户、超级用户或承担主管理员角色的用户的身份来运行 bart 命令。 如果作为普通用户运行 bart 命令,则只能列出和监视有权访问的文件,如有关起始目录中文件的信息。在运行 bart 命令时成为超级用户的优势是您所创建的清单会包含有关要监视的隐藏文件和专用文件的信息。如果需要列出和监视有关具有限制性权限的文件(例如 /etc/passwd/etc/shadow 文件)的信息,请以超级用户或承担等效角色的用户的身份来运行 bart 命令。有关使用基于角色的访问控制的更多信息,请参见配置 RBAC(任务列表)

BART 安全注意事项

以超级用户的身份运行 bart 命令会使任何人都能读取输出。此输出可能包含专用文件名。如果您在运行 bart 命令时成为超级用户,请采取相应的措施保护输出。例如,使用可生成具有限制性权限的输出文件的选项。


注 –

本章中的过程和示例显示了由超级用户运行的 bart 命令。除非另有指定,否则以超级用户的身份运行 bart 命令为可选操作。


Procedure如何创建清单

可以在 Solaris 软件的初始安装之后立即创建系统清单。此类清单可提供用于比较同一系统在一段时间内的更改的基准。或者,可以将此清单与不同系统的清单进行比较。例如,如果为网络中的每个系统拍摄快照,然后将每个测试清单与控制清单进行比较,则可以迅速确定需要执行哪些操作来实现测试系统与基准配置的同步。

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 安装 Solaris 软件之后,创建一个控制清单并将输出重定向到文件。


    # bart create options > control-manifest
    
    -R

    指定清单的根目录。所有由规则指定的路径都会被解释为此目录的相对路径。所有由清单报告的路径均为此目录的相对路径。

    -I

    无论是从命令行执行此选项,还是从标准输入中读取此选项,它都会接受要列出的单个文件的列表。

    -r

    此清单的 rules 文件的名称。请注意, 在与 -r 选项一起使用时,会从标准输入读取 rules 文件。

    -n

    禁用文件列表中所有常规文件的内容签名。此选项可用于改善性能。或者,可以在需要更改文件列表的内容时使用此选项,这与系统日志文件的情况类似。

  3. 检查清单内容。

  4. 保存清单以便将来使用。

    为清单选择一个有意义的名称。例如,使用系统名称及此清单的创建日期。


示例 5–1 创建可列出有关系统上所有文件的信息的清单

如果运行不带任何选项的 bart create 命令,则会列出有关系统上安装的所有文件的信息。当从核心映像安装多个系统时,可使用此类清单作为基准。或者,在需要确保安装完全一致的情况下使用此类清单运行比较。

例如:


# bart create

! Version 1.0

! Thursday, December 04, 2003 (16:17:39)

# Format:

#fname D size mode acl dirmtime uid gid

#fname P size mode acl mtime uid gid

#fname S size mode acl mtime uid gid

#fname F size mode acl mtime uid gid contents

#fname L size mode acl lnmtime uid gid dest

#fname B size mode acl mtime uid gid devnode

#fname C size mode acl mtime uid gid devnode

/ D 1024 40755 user::rwx,group::r-x,mask:r-x,other:r-x 3fd9ea47 0 0

/.java D 512 40755 user::rwx,group::r-x,mask:r-x,other:r-x 3f8dc04d 0 10

/.java/.userPrefs D 512 40700 user::rwx,group::---,mask:---

other:--- 3f8dc06b 010

/.java/.userPrefs/.user.lock.root F 0 100600 user::rw-

group::---,mask:---,other:--- 3f8dc06b 0 10 -

/.java/.userPrefs/.userRootModFile.root F 0 100600 user::rw-,

group::---,mask:---,other:--- 3f8dc0a1 0 10 -

/.smc.properties F 1389 100644 user::rw-,group::r--,mask:r--

other:r-- 3f8dca0c0 10

.

.

.

/var/sadm/pkg/SUNWdtmad/install/depend F 932 100644 user::rw-,

group::r--,mask:r--,other:r-- 3c23a19e 0 0 -

/var/sadm/pkg/SUNWdtmad/pkginfo F 594 100644 user::rw-

group::r--,mask:r--,other:r-- 3f81e416 0 0 -

/var/sadm/pkg/SUNWdtmad/save D 512 40755 user::rwx,group::r-x

mask:r-x,other:r-x 3f81e416 0 0

/var/sadm/pkg/SUNWdtmaz D 512 40755 user::rwx,group::r-x

mask:r-x,other:r-x 3f81e41b 0 0

/var/sadm/pkg/TSIpgxw/save D 512 40755 user::rwx

group::r-x,mask:r-x,other:r-x 3f81e892 0 0

.

.

.

每份清单都包括头和项。每个清单文件项均是单独的一行,具体取决于文件类型。例如,对于上面输出的每个清单项而言,类型 F 指定文件,而类型 D 指定目录。同时还列出了有关大小、内容、用户 ID、组 ID 和权限的信息。输出中的文件项按文件名的编码版本排序,从而能够正确地处理特殊字符。所有项均按文件名的升序排列。所有非标准文件名(例如那些包含嵌入的换行符或制表符的文件名)都在排序之前将非标准字符引起来。

! 开头的行提供有关清单的元数据。清单版本行指示清单规格版本。日期行以日期格式显示清单的创建日期。请参见 date(1) 手册页。清单比较工具会忽略某些行。被忽略的行包括空白行、仅包含空格的行,以及以 # 开头的注释。


Procedure如何自定义清单

可以通过以下方法之一自定义清单:

  1. 确定要列出和监视的文件。

  2. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  3. 安装 Solaris 软件之后,使用以下选项之一创建自定义清单:

    • 通过指定子树:


      # bart create -R root-directory
      
    • 通过指定一个或多个文件名:


      # bart create -I filename...
      

      例如:


      # bart create -I /etc/system /etc/passwd /etc/shadow
      
    • 通过使用 rules 文件:


      # bart create -r rules-file
      
  4. 检查清单内容。

  5. 保存清单以便将来使用。


示例 5–2 通过指定子树创建清单

此示例说明了如何创建仅包含有关 /etc/ssh 子树中文件的信息的清单。


# bart create -R /etc/ssh

! Version 1.0

! Saturday, November 29, 2003 (14:05:36)

# Format:

#fname D size mode acl dirmtime uid gid

#fname P size mode acl mtime uid gid

#fname S size mode acl mtime uid gid

#fname F size mode acl mtime uid gid contents

#fname L size mode acl lnmtime uid gid dest

#fname B size mode acl mtime uid gid devnode

#fname C size mode acl mtime uid gid devnode

/ D 512 40755 user::rwx,group::r-x,mask:r-x,other:r-x 3f81eab9 0 3

/ssh_config F 861 100644 user::rw-,group::r--,mask:r--,

other:r-- 3f81e504 0 3 422453ca0e2348cd9981820935600395

/ssh_host_dsa_key F 668 100600 user::rw-,group::---,mask:---,

other:--- 3f81eab9 0 0 5cc28cdc97e833069fd41ef89e4d9834

/ssh_host_dsa_key.pub F 602 100644 user::rw-,group::r--,mask:r--,

other:r-- 3f81eab9 0 0 16118c736995a4e4754f5ab4f28cf917

/ssh_host_rsa_key F 883 100600 user::rw-,group::---,mask:---,

other:--- 3f81eaa2 0 0 6ff17aa968ecb20321c448c89a8840a9

/ssh_host_rsa_key.pub F 222 100644 user::rw-,group::r--,mask:r--,

other:r-- 3f81eaa2 0 0 9ea27617efc76058cb97aa2caa6dd65a

.

.

.


示例 5–3 通过指定文件名自定义清单

此示例说明了如何创建仅列出有关系统上 /etc/passwd/etc/shadow 文件的信息的清单。


# bart create -I /etc/passwd /etc/shadow

! Version 1.0

! Monday, December 15, 2003 (16:28:55)

# Format:

#fname D size mode acl dirmtime uid gid

#fname P size mode acl mtime uid gid

#fname S size mode acl mtime uid gid

#fname F size mode acl mtime uid gid contents

#fname L size mode acl lnmtime uid gid dest

#fname B size mode acl mtime uid gid devnode

#fname C size mode acl mtime uid gid devnode

/etc/passwd F 542 100444 user::r--,group::r--,mask:r--,

other:r-- 3fcfd45b 0 3 d6

84554f85d1de06219d80543174ad1a

/etc/shadow F 294 100400 user::r--,group::---,mask:---,

other:--- 3f8dc5a0 0 3 fd

c3931c1ae5ee40341f3567b7cf15e2

下面以比较的方式列出了同一系统上 /etc/passwd /etc/shadow 文件的 ls - al 命令的标准输出。


# ls -al /etc/passwd

-r--r--r--   1 root     sys          542 Dec  4 17:42 /etc/passwd

# ls -al /etc/shadow

-r--------   1 root     sys          294 Oct 15 16:09 /etc/shadow


示例 5–4 通过使用 Rules 文件自定义清单

此示例说明了如何通过使用 rules 文件仅列出 /etc 目录中的文件来创建清单。同一个 rules 文件还包括由 bart compare 命令用于监视 /etc/system 文件的 acl 属性更改的指令。


Procedure如何比较同一系统在一段时间内的清单

当您要监视同一系统在一段时间内的文件层更改时,请使用此过程。此类清单可以帮助找到损坏或异常的文件,检测安全性破坏,或对系统的性能问题进行疑难解答。

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 安装 Solaris 软件之后,创建系统上要监视的文件的控制清单。


    # bart create -R /etc > control-manifest
    
  3. 在每次需要监视系统更改时创建一个在准备方式上与控制清单完全相同的测试清单。


    # bart create -R /etc > test-manifest
    
  4. 将控制清单与测试清单进行比较。


    # bart compare options control-manifest  test-manifest > bart-report
    
    -r

    此比较的 rules 文件的名称。将 -r 选项和 一起使用意味着从标准输入中读取指令。

    -i

    允许用户从命令行设置全局 IGNORE 指令。

    -p

    生成用于进行程序分析的标准非本地化输出的程序模式。

    control-manifest

    控制系统的 bart create 命令输出。

    test-manifest

    测试系统的 bart create 命令输出。

  5. 检查 BART 报告中的异常情况。


示例 5–5 比较同一系统在一段时间内的清单

此示例说明了如何监视两个时间点之间 /etc 目录中发生的更改。此类比较使您可以迅速确定系统上的重要文件是否受到威胁。

上面的输出指示 vfstab 文件的权限自创建了控制清单以来已发生更改。此报告可以用于检查拥有权、日期、内容或任何其他文件属性是否已发生变化。具备此类信息有助于跟踪可能的文件篡改者和更改可能发生的时间。


Procedure如何比较不同系统的清单与控制系统的清单

您可以运行系统间比较,这样可以迅速确定在基准系统和其他系统之间是否存在任何文件层差异。例如,如果您已经在基准系统上安装了特定版本的 Solaris 软件,并且需要了解其他系统是否也安装了相同的软件包,则可以创建那些系统的清单,然后将测试清单与控制清单进行比较。此类比较会列出与控制系统比较的每个测试系统在文件内容方面的任何差异。

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 安装 Solaris 软件之后,创建控制清单。


    # bart create options > control-manifest
    
  3. 保存控制清单。

  4. 在测试系统上,使用相同的 bart 选项创建清单,并将输出重定向到文件中。


    # bart create options > test1-manifest
    

    为测试清单选择一个特殊而有意义的名称。

  5. 将测试清单一直保存在系统的中心位置,直至准备比较清单为止。

  6. 需要比较清单时,将控制清单复制到测试清单的位置。或者,将测试清单复制到控制系统。

    例如:

    # cp control-manifest /net/test-server/bart/manifests

    如果测试系统不是已挂载 NFS 系统,则使用 FTP 或一些其他某个可靠方法将控制清单复制到测试系统。

  7. 将控制清单与测试清单进行比较并将输出重定向到文件。


    # bart compare control-manifest test1-manifest > test1.report
    
  8. 检查 BART 报告中的异常情况。

  9. 对于每个需要与控制清单比较的测试清单,重复执行步骤 4 至步骤 9。

    对于每个测试系统使用相同的 bart 选项。


示例 5–6 比较不同系统的清单与控制系统的清单

此示例介绍了如何通过比较控制清单与不同系统的测试清单来监视 /usr/bin 目录内容的更改。

上面的输出指示了 /usr/bin 目录中 su 文件的组 ID 与控制系统中的组 ID 不同。此信息有助于确定测试系统上是否安装了不同版本的软件或是否有人篡改了文件。


Procedure如何通过指定文件属性自定义 BART 报告

此过程为可选过程,它介绍了如何通过从命令行指定文件属性来自定义 BART 报告。如果创建了列出有关系统上所有文件或特定文件的信息的基准清单,则可以在需要监视特定目录、子目录、一个或多个文件的更改的时运行 bart compare 命令,并指定不同的属性。您可以通过从命令行指定不同的文件属性来针对同一清单运行不同类型的比较。

  1. 确定需要监视的文件属性。

  2. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  3. 安装 Solaris 软件之后,创建控制清单。

  4. 在需要监视更改时创建测试清单。

    按照准备控制清单的方式准备测试清单。

  5. 比较清单。

    例如:


    # bart compare -i dirmtime,lnmtime,mtime control-manifest.121503 \
    
    test-manifest.010504 > bart.report.010504
    
    

    请注意,使用逗号分隔在命令行语法中指定的各个属性。

  6. 检查 BART 报告中的异常情况。

Procedure如何通过使用 Rules 文件自定义 BART 报告

此过程也是可选过程,它介绍了如何通过使用 rules 文件作为 bart compare 命令的输入来自定义 BART 报告。通过使用 rules 文件,可以自定义 BART 报告,从而使您能够灵活地为多个文件或子树指定多个属性。可以使用不同的 rules 文件来针对同一清单运行不同的比较。

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 确定需要监视的文件和文件属性。

  3. 使用文本编辑器创建具有相应指令的 rules 文件。

  4. 安装 Solaris 软件之后,使用所创建的 rules 文件创建一个控制清单。


    # bart create -r rules-file > control-manifest
    
  5. 创建在准备方式上与控制清单完全相同的测试清单。


    # bart create -r rules-file > test-manifest
    
  6. 使用同一个 rules 文件比较控制清单与测试清单。


    # bart compare -r rules-file control-manifest test-manifest > bart.report
    
    
  7. 检查 BART 报告中的异常情况。


示例 5–7 通过使用 Rules 文件自定义 BART 报告

以下 rules 文件同时包括 bart createbart compare 命令的指令。此 rules 文件指示 bart create 命令列出有关 /usr/bin 目录内容的信息。此外,rules 文件还指示 bart compare 命令仅跟踪同一目录中大小和内容方面的更改。


# Check size and content changes in the /usr/bin directory.

# This rules file only checks size and content changes.

# See rules file example.



IGNORE all

CHECK size contents

/usr/bin

在上面的输出中,bart compare 命令报告 /usr/bin 目录中的差异。此输出指示已删除了 /usr/bin/ypcat 文件,并添加了 /usr/bin/gunzip 文件。


BART 清单、Rules 文件和报告(参考)

本节包含以下参考信息:

BART 清单文件格式

每个清单文件项均是单独的一行,具体取决于文件类型。每个项都以 fname(即文件名)开头。为了避免分析文件名中嵌入的特殊字符所导致的问题,已对文件名进行了编码。有关更多信息,请参见BART Rules 文件格式

后续字段表示以下文件属性:

type

文件类型,可能值为:

  • B 表示块设备节点

  • C 表示字符设备节点

  • D 表示目录

  • F 表示文件

  • L 表示符号链接

  • P 表示管道

  • S 表示套接字

size

以字节为单位的文件大小。

mode

表示文件权限的八进制数。

acl

文件的 ACL 属性。对于具有 ACL 属性的文件,它包含了 acltotext() 的输出。

uid

此项的属主的数字用户 ID。

gid

此项的属主的数字组 ID。

dirmtime

目录上次修改的时间,以秒为单位,从 1970 年 1 月 1 日 00:00:00 UTC(国际协调时间)开始计算。

lnmtime

链接上次修改的时间,以秒为单位,从 1970 年 1 月 1 日 00:00:00 UTC 开始计算。

mtime

文件上次修改的时间,以秒为单位,从 1970 年 1 月 1 日 00:00:00 UTC 开始计算。

contents

文件校验和的值。此属性仅为常规文件指定。如果关闭上下文检查,或者无法计算校验和,则此字段的值为

dest

符号链接的目标。

devnode

设备节点值。此属性仅用于字符设备文件和块设备文件。

有关 BART 清单的更多信息,请参见 bart_manifest(4) 手册页。

BART Rules 文件格式

bart 命令的输入文件为文本文件。这些文件由行组成,行中指定了要包括在清单中的文件和要包括在报告中的文件属性。同一个输入文件可同时在两项 BART 功能中使用。工具将忽略以 # 开头的行、空白行以及包含空格的行。

输入文件包含三种类型的指令:


示例 5–8 Rules 文件格式


<Global CHECK/IGNORE Directives>

<subtree1> [pattern1..]

<IGNORE/CHECK Directives for subtree1>



<subtree2> [pattern2..]

subtree3> [pattern3..]

subtree4> [pattern4..]

<IGNORE/CHECK Directives for subtree2, subtree3, subtree4>


注 –

所有指令均会按顺序进行读取,后面的指令可能会覆盖前面的指令。


每行都有一个子树指令。指令必须以绝对路径名开头,后面跟有零个或多个模式匹配语句。

Rules 文件属性

bart 命令使用 CHECKIGNORE 语句定义要跟踪或忽略的属性。每个属性都有一个关联的关键字。

属性关键字有:

all 关键字是指所有文件属性。

引用语法

BART 所用的 rules 文件规范语言是用于表示非标准文件名的标准 UNIX 引用语法。嵌入的制表符、空格、换行符或特殊字符以八进制格式编码,以保证工具能够读取文件名。这种不一致的引用语法会阻止在命令管道中正确处理某些文件名,如包含嵌入的回车的文件名。使用 rules 规范语言可表达复杂的文件名过滤条件,这些条件如果仅使用 shell 语法会很难并且无法有效表达。

有关 BART rules 文件或 BART 所用的引用语法的更多信息,请参见 bart_rules(4) 手册页。

BART 报告

在缺省模式下,bart compare 命令会检查系统上安装的除已修改的目录时间标记 (dirmtime) 外所有文件,如以下示例所示:


CHECK all

IGNORE	dirmtime

如果提供了 rules 文件,则全局指令 CHECK allIGNORE dirmtime 会按照以上顺序自动前置到 rules 文件之前。

BART 输出

将返回以下退出值:

0

成功

1

处理文件时出现非致命错误,如权限问题

>1

出现致命错误,如无效的命令行选项

报告机制可提供两种类型的输出:详细输出和程序输出:

有关 bart 命令支持的属性的列表,请参见Rules 文件属性

有关 BART 的更多信息,请参见 bart(1M) 手册页。

第 6 章 控制对文件的访问(任务)

本章介绍如何保护 Solaris 操作系统 (Solaris Operating System, Solaris OS) 中的文件,还将介绍如何防范其权限可能危及系统安全的文件。

以下是本章中信息的列表:

使用 UNIX 权限保护文件

通过 UNIX 文件权限和 ACL 可保证文件安全。带 sticky 位的文件和可执行文件要求特殊的安全措施。

用于查看和保证文件安全的命令

下表给出了用于监视以及保证文件和目录安全的命令。

表 6–1 保证文件和目录安全的命令

命令 

说明 

手册页 

ls

列出目录中的文件及其有关信息。 

ls(1)

chown

更改文件的拥有权。 

chown(1)

chgrp

更改文件的组拥有权。 

chgrp(1)

chmod

更改文件的权限。可以使用符号模式(使用字母和符号)或绝对模式(使用八进制数字)更改文件的权限。 

chmod(1)

文件和目录的拥有权

传统 UNIX 文件权限可以为三类用户指定拥有权:

文件属主通常可以指定或修改文件权限。此外,具有管理功能的用户或角色(如超级用户或主管理员角色)可以更改文件的拥有权。要覆盖系统策略,请参见示例 6–2

文件可以是七种类型之一。每种类型由一个符号显示:

-(减号)

文本或程序

b

块特殊文件

c

字符特殊文件

d

目录

l

符号链接

s

套接字

D

P

命名管道 (FIFO)

UNIX 文件权限

下表列出并说明了可以为文件或目录的每类用户授予的权限。

表 6–2 文件和目录权限

符号 

权限 

对象 

说明 

r

读 

文件 

指定的用户可以打开和读取文件内容。 

 

 

目录 

指定的用户可以列出目录中的文件。 

w

写 

文件 

指定的用户可以修改文件的内容或删除该文件。 

 

 

目录 

指定的用户可以在目录中添加文件或链接。这些用户也可以删除目录中的文件或链接。 

x

执行 

文件 

指定的用户可以执行文件(如果该文件为程序或 shell 脚本)。这些用户也可以使用一个 exec(2) 系统调用来运行程序。

 

 

目录 

指定的用户可以打开或执行目录中的文件。这些用户也可以使该目录以及该目录下的目录成为当前目录。 

-

拒绝 

文件和目录 

指定的用户无法读写或执行文件。 

这些文件权限可应用于常规文件,也可应用于特殊文件(如设备、套接字和命名管道 (FIFO))。

对于符号链接,所应用的权限为链接指向的文件权限。

通过对目录设置受限文件权限,可以保护该目录及其子目录中的文件。但是请注意,超级用户有权访问系统中的所有文件和目录。

特殊文件权限(setuidsetgid 和 Sticky 位)

可执行文件和公共目录可以使用三种特殊类型的权限:setuidsetgid 和 sticky 位。设置这些权限之后,运行可执行文件的任何用户都应采用该可执行文件属主(或组)的 ID。

设置特殊权限时必须非常小心,因为特殊权限会带来安全风险。例如,通过执行将用户 ID (user ID, UID) 设置为 0root 的 UID)的程序,用户可以获取超级用户功能。此外,所有用户可以为其拥有的文件设置特殊权限,这会带来其他安全问题。

应对系统中未经授权使用 setuid 权限和 setgid 权限获取超级用户功能的情况进行监视。可疑权限为用户而不是 rootbin 授予管理程序的拥有权。要搜索并列出所有使用此特殊权限的文件,请参见如何使用特殊文件权限查找文件

setuid 权限

对可执行文件设置 setuid 权限时,将对运行该文件的进程授予基于文件属主的访问权限。该访问权限不是基于正在运行可执行文件的用户。使用此特殊权限,用户可以访问通常只有属主才可访问的文件和目录。

例如,passwd 命令的 setuid 权限使用户可以更改口令。拥有 setuid 权限的 passwd 命令与以下类似:


-r-sr-sr-x   3 root     sys       28144 Jun 17 12:02 /usr/bin/passwd

此特殊权限会带来安全风险。一些确定的用户甚至可以在 setuid 进程执行完毕后,找到保持由该进程授予他们的权限的方法。


注 –

在程序中使用具有保留 UID (0–100) 的 setuid 权限可能无法正确设置有效的 UID。请使用 shell 脚本或避免将保留的 UID 用于 setuid 权限。


setgid 权限

setgid 权限与 setuid 权限类似。可将进程的有效组 ID (group ID, GID) 更改为拥有该文件的组,并基于授予该组的权限对用户授权访问权限。/usr/bin/mail 命令拥有 setgid 权限:


-r-x--s--x   1 root   mail     67504 Jun 17 12:01 /usr/bin/mail

setgid 权限应用于目录时,该目录中已创建的文件将属于该目录所属于的组。这些文件不属于创建进程所属于的组。在目录中拥有写和执行权限的任何用户都可以在其中创建文件。但是,文件将属于拥有该目录的组,而不是用户所属于的组。

应对系统中未经授权使用 setgid 权限获取超级用户功能的情况进行监视。可疑权限为非常规组而不是 rootbin 授予对此类程序的访问权限。要搜索并列出所有使用此权限的文件,请参见如何使用特殊文件权限查找文件

Sticky 位

sticky 位是保护目录中文件的权限位。如果对目录设置了 sticky 位,则只有文件属主、目录属主或特权用户才可以删除文件。root 用户和主管理员角色即是特权用户。sticky 位禁止用户从公共目录(如 /tmp)中删除其他用户的文件:


drwxrwxrwt 7  root  sys   400 Sep  3 13:37 tmp

在 TMPFS 文件系统中设置公共目录时,务必手动设置 sticky 位。有关说明,请参见示例 6–5

缺省 umask

创建文件或目录时,将使用一组缺省权限进行创建。系统缺省值为空。文本文件拥有 666 权限,该权限对所有用户授予读写权限。目录和可执行文件拥有 777 权限,该权限对所有用户授予读写和执行权限。通常,用户会覆盖其 /etc/profile 文件、.cshrc 文件或 .login 文件中的系统缺省值。

umask 命令指定的值将从缺省值中减去。此进程的作用是以 chmod 命令授予权限的相同方式拒绝这些权限。例如,chmod 022 对组和其他用户授予写权限。umask 022 命令拒绝组和其他用户的写权限。

下表给出了一些典型 umask 设置及其对可执行文件的影响。

表 6–3 不同安全级别的 umask 设置

安全级别 

umask 设置

禁用的权限 

许可 (744)

022

w(组和其他用户)

中等 (740)

027

w(组),rwx(其他用户)

中等 (741)

026

w(组),rw(其他用户)

严重 (700)

077

rwx(组和其他用户)

有关设置 umask 值的更多信息,请参见 umask(1) 手册页。

文件权限模式

使用 chmod 命令,可以更改文件的权限。要更改文件的权限,您必须是超级用户或是文件或目录的属主。

可以使用 chmod 命令按照以下两种模式之一设置权限:

下表列出了在绝对模式下设置文件权限的八进制值。可按顺序以三个一组的形式,使用这些数字来设置属主、组和其他用户的权限。例如,值 644 为属主设置读写权限,为组和其他用户设置只读权限。

表 6–4 在绝对模式下设置文件权限

八进制值 

设置文件权限 

权限说明 

0

---

无权限 

1

--x

仅执行权限 

2

-w-

只写权限 

3

-wx

写和执行权限 

4

r--

只读权限 

5

r-x

读和执行权限 

6

rw-

读写权限 

7

rwx

读写和执行权限 

下表列出了用于在符号模式下设置文件权限的符号。符号可以指定要设置或更改其权限的用户、要执行的操作,以及要指定或更改的权限。

表 6–5 在符号模式下设置文件权限

符号 

功能 

说明 

u

who

用户(属主) 

g

who

组 

o

who

其他用户 

a

who

所有 

=

operator

赋值 

+

operator

添加 

-

operator

删除 

r

permissions

读 

w

permissions

写 

x

permissions

执行 

l

permissions

强制锁定,setgid 位打开,组执行位关闭

s

permissions

setuidsetgid 位打开

t

permissions

Sticky 位打开,对于其他用户,执行位打开 

功能列中的名称 who operator permissions 指定用于更改文件或目录的权限的符号。

who

指定要更改其权限的用户。

operator

指定要执行的操作。

permissions

指定要更改的权限。

可以在绝对模式或符号模式下设置文件的特殊权限。但是,必须使用符号模式设置或删除目录的 setuid 权限。在绝对模式下,通过在权限三元字节的左侧添加新的八进制值,可设置特殊权限。下表列出了用于对文件设置特殊权限的八进制值。

表 6–6 在绝对模式下设置特殊文件权限

八进制值 

特殊文件权限 

1

Sticky 位 

2

setgid

4

setuid

使用访问控制列表保护文件

传统 UNIX 文件保护可为以下三类用户提供读写和执行权限:文件属主、文件组和其他用户。访问控制列表 (Access Control List, ACL) 通过允许您执行以下操作来提供更好的文件安全性:

例如,如果想要组中的每个用户都能够读取某文件,则只需要授予该组对该文件的读取权限即可。现在,假设您希望组中只有一个用户能够写入该文件。标准 UNIX 不提供该级别的文件安全性。但是,ACL 可提供此级别的文件安全性。

ACL 项定义文件的 ACL。这些项通过 setfacl 命令设置。 ACL 项由以下字段组成并使用冒号进行分隔:


entry-type:[uid|gid]:perms
entry-type

设置文件权限的 ACL 项的类型。例如,entry-type 可以是 user(文件属主)或 mask(ACL 掩码)。有关 ACL 项的列表,请参见表 6–7表 6–8

uid

用户名或用户 ID (user ID, UID)。

gid

组名或组 ID (group ID, GID)。

perms

表示 entry-type 中设置的权限。perms 可以由符号字符 rwx 或八进制数字表示。这些数字与用于 chmod 命令的数字相同。

在以下示例中,ACL 项为用户 stacey 设置读写权限。


user:stacey:rw-

注意 – 注意 –

仅 UFS 文件系统支持 UFS 文件系统属性,例如 ACL。因此,如果将具有 ACL 项的文件恢复或复制到 /tmp 目录(通常挂载为 TMPFS 文件系统)中,则这些 ACL 项将丢失。使用 /var/tmp 目录临时存储 UFS 文件。


文件的 ACL 项

下表列出了对文件设置 ACL 时可以使用的有效 ACL 项。前三个 ACL 项提供基本的 UNIX 文件保护。

表 6–7 文件的 ACL 项

ACL 项 

说明 

u[ser]::perms

文件属主权限。 

g[roup]::perms

文件组权限。 

o[ther]:perms

文件属主或文件组成员之外的用户的权限。 

m[ask]:perms

ACL 掩码。掩码项表示允许用户(属主除外)和组拥有的最大权限。掩码是一种可快速更改所有用户和组的权限的方法。 

例如,mask:r-- 掩码项表示,用户和组只能拥有读取权限,即使他们可能拥有写和执行权限。

u[ser]:uid:perms

特定用户的权限。对于 uid,可以指定用户名或数字 UID。

g[roup]:gid:perms

特定组的权限。对于 gid,可以指定组名或数字 GID。

目录的 ACL 项

表 6–7 中说明的 ACL 项外,还可以对目录设置缺省 ACL 项。在具有缺省 ACL 项的目录中创建的文件或目录将具有与缺省 ACL 项相同的 ACL 项。表 6–8 列出了目录的缺省 ACL 项。

首次为特定用户和组设置目录的缺省 ACL 项时,还必须为文件属主、文件组、其他用户和 ACL 掩码设置缺省 ACL 项。这些项是必需的。这些项是下表中前四个缺省 ACL 项。

表 6–8 目录的缺省 ACL 项

缺省 ACL 项 

说明 

d[efault]:u[ser]::perms

缺省文件属主权限。 

d[efault]:g[roup]::perms

缺省文件组权限。 

d[efault]:o[ther]:perms

文件属主或文件组成员之外的用户的缺省权限。 

d[efault]:m[ask]:perms

缺省 ACL 掩码。 

d[efault]:u[ser]:uid:perms

特定用户的缺省权限。对于 uid,可以指定用户名或数字 UID。

d[efault]:g[roup]:gid:perms

特定组的缺省权限。对于 gid,可以指定组名或数字 GID。

用于管理 ACL 的命令

以下命令可管理文件或目录的 ACL。

setfacl 命令

设置、添加、修改和删除 ACL 项。有关更多信息,请参见 setfacl(1) 手册页。

getfacl 命令

显示 ACL 项。有关更多信息,请参见 getfacl(1) 手册页。

防止可执行文件危及安全

在将可执行栈的权限设置为读写和执行时,很多安全错误与缺省可执行栈有关。虽然允许栈拥有执行权限,但大多数程序可以在不使用可执行栈的情况下正常运行。

使用 noexec_user_stack 变量,可以指定栈映射是否可执行。从 Solaris 2.6 发行版开始,可以使用该变量。缺省情况下,该变量被设置为零(64 位应用程序中除外),这将提供兼容 ABI 的行为。如果将该变量设置为非零值,则系统会将系统中每个进程的栈标记为可读写,但不可执行。

设置此变量后,将向尝试执行其栈中代码的程序发送一个 SIGSEGV 信号。此信号通常将导致程序终止,同时进行核心转储。这样的程序还将生成一条警告消息,该消息中包括违例程序的名称、进程 ID 和运行该程序的用户的实际 UID。例如:


a.out[347] attempt to execute code on stack by uid 555 

syslog kern 功能设置为 notice 级别时,该消息由 syslog 守护进程记录。缺省情况下,将在 syslog.conf 文件中设置此日志,这意味着,消息将发送到控制台和 /var/adm/messages 文件。有关更多信息,请参见 syslogd(1M)syslog.conf(4) 手册页。

syslog 消息用于观察可能的安全问题。通过设置此变量,该消息还将确定依赖于可执行栈(已被禁止,无法正确执行操作)的有效程序。如果不想记录任何消息,则可以在 /etc/system 文件中将 noexec_user_stack_log 变量设置为零。即使未记录消息,SIGSEGV 信号仍可能会导致执行程序终止,同时进行核心转储。

如果希望程序显式将其栈标记为可执行,则可以使用 mprotect() 功能。有关更多信息,请参见 mprotect(2) 手册页。

由于硬件限制,在大多数基于 x86 的系统中不能使用捕获和报告可执行栈问题的功能。AMD64 产品系列中的系统可以捕获和报告可执行栈问题。

保护文件(任务列表)

以下任务列表说明一组保护文件的过程。

任务 

说明 

参考 

使用 UNIX 权限保护文件 

查看文件的 UNIX 权限。使用 UNIX 权限保护文件。 

使用 UNIX 权限保护文件(任务列表)

使用 ACL 保护文件 

添加 ACL,以便在比 UNIX 权限更周密的级别上保护文件。 

使用 ACL 保护文件(任务列表)

防止系统受到来自文件的安全风险 

查找具有可疑拥有权的可执行文件。禁用可能会破坏系统的文件。 

防止程序受到安全风险(任务列表)

使用 UNIX 权限保护文件(任务列表)

以下任务列表说明列出文件权限、更改文件权限,以及使用特殊文件权限保护文件的过程。

任务 

参考 

显示文件信息 

如何显示文件信息

更改文件拥有权 

如何更改文件的属主

如何更改文件的组拥有权

更改文件权限 

如何在符号模式下更改文件权限

如何在绝对模式下更改文件权限

如何在绝对模式下更改特殊文件权限

Procedure如何显示文件信息

使用 ls 命令显示有关目录中所有文件的信息。

    键入以下命令以显示当前目录中所有文件的长列表。


    % ls -la
    
    -l

    显示包括用户拥有权、组拥有权和文件权限的长格式。

    -a

    显示所有文件,包括以点 (.) 开头的隐藏文件。


示例 6–1 显示文件信息

在以下示例中,显示了 /sbin 目录中部分文件的列表。


% cd /sbin

% ls -la

total 13456

drwxr-xr-x   2 root     sys          512 Sep  1 14:11 .

drwxr-xr-x  29 root     root        1024 Sep  1 15:40 ..

-r-xr-xr-x   1 root     bin       218188 Aug 18 15:17 autopush

lrwxrwxrwx   1 root     root          21 Sep  1 14:11 bpgetfile -> ...

-r-xr-xr-x   1 root     bin       505556 Aug 20 13:24 dhcpagent

-r-xr-xr-x   1 root     bin       456064 Aug 20 13:25 dhcpinfo

-r-xr-xr-x   1 root     bin       272360 Aug 18 15:19 fdisk

-r-xr-xr-x   1 root     bin       824728 Aug 20 13:29 hostconfig

-r-xr-xr-x   1 root     bin       603528 Aug 20 13:21 ifconfig

-r-xr-xr-x   1 root     sys       556008 Aug 20 13:21 init

-r-xr-xr-x   2 root     root      274020 Aug 18 15:28 jsh

-r-xr-xr-x   1 root     bin       238736 Aug 21 19:46 mount

-r-xr-xr-x   1 root     sys         7696 Aug 18 15:20 mountall

   .

   .

   .

每一行按以下顺序显示了有关文件的信息:


Procedure如何更改文件的属主

文件属主、主管理员角色或超级用户可以更改任何文件的拥有权。

  1. 显示文件的权限。


    % ls -l example-file
    
    -rw-r--r--   1 janedoe   staff   112640 May 24 10:49 example-file
  2. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  3. 更改文件的属主。


    # chown stacey example-file
    
  4. 检验文件的属主是否已更改。


    # ls -l example-file
    
    -rw-r--r--   1 stacey   staff   112640 May 26 08:50 example-file 

示例 6–2 允许用户更改其他用户拥有的文件的拥有权

安全注意事项-您应该有合理理由通过将 rstchown 变量设置为零来覆盖系统安全策略。访问系统的任何用户都可以更改系统中任何文件的拥有权。

在此示例中,在 /etc/system 文件中将 rstchown 变量的值设置为零。通过此设置,文件属主可以使用 chown 命令将文件的拥有权更改为另一用户。通过此设置,文件属主还可以使用 chgrp 命令将文件的组拥有权设置为非其所在的组。重新引导系统后,更改将生效。


set rstchown = 0

有关更多信息,请参见 chown(1)chgrp(1) 手册页。

此外,请注意,已挂载 NFS 的文件系统对更改拥有权和组有更多限制。有关限制对已挂载 NFS 的系统的访问的更多信息,请参见《系统管理指南:网络服务》中的第 6  章 “访问网络文件系统(参考)”


Procedure如何更改文件的组拥有权

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 更改文件的组拥有权。


    $ chgrp scifi example-file
    

    有关设置组的信息,请参见《系统管理指南:基本管理》中的第 4  章 “管理用户帐户和组(概述)”

  3. 检验文件的组拥有权是否已更改。


    $ ls -l example-file
    
     -rw-r--r--   1 stacey   scifi   112640 June 20 08:55  example-file

    另请参见示例 6–2

Procedure如何在符号模式下更改文件权限

  1. 如果您不是文件或目录的属主,请成为超级用户或承担等效角色。

    只有当前属主或超级用户可以使用 chmod 命令更改文件或目录的文件权限。

  2. 在符号模式下更改权限。


    % chmod who operator permissions filename
    
    who

    指定要更改其权限的用户。

    operator

    指定要执行的操作。

    permissions

    指定要更改的权限。有关有效的符号列表,请参见表 6–5

    filename

    指定文件或目录。

  3. 检验文件的权限是否已更改。


    % ls -l filename
    

示例 6–3 在符号模式下更改权限

在以下示例中,将解除其他用户的读取权限。


% chmod o-r example-file1

在以下示例中,将为用户、组和其他用户添加读和执行权限。


$ chmod a+rx example-file2

在以下示例中,将为组指定读写和执行权限。


$ chmod g=rwx example-file3

Procedure如何在绝对模式下更改文件权限

  1. 如果您不是文件或目录的属主,请成为超级用户或承担等效角色。

    只有当前属主或超级用户可以使用 chmod 命令更改文件或目录的文件权限。

  2. 在绝对模式下更改权限。


    % chmod nnn filename
    
    nnn

    按照该顺序指定将表示文件属主、文件组和其他用户的权限的八进制值。有关有效八进制值的列表,请参见表 6–4

    filename

    指定文件或目录。


    注 –

    使用 chmod 命令更改具有 ACL 项的文件的文件组权限时,文件组权限和 ACL 掩码都将更改为新权限。请注意,新 ACL 掩码权限可以更改在文件中具有 ACL 项的其他用户和组的权限。使用 getfacl 命令以确保为所有 ACL 项都设置了适当的权限。有关更多信息,请参见 getfacl(1) 手册页。


  3. 检验文件的权限是否已更改。


    % ls -l filename
    

示例 6–4 在绝对模式下更改权限

在以下示例中,将公共目录的权限从 744(读、写、执行;只读;只读)更改为 755(读、写、执行;读和执行;读和执行)。


# ls -ld public_dir

drwxr--r--  1 ignatz   staff    6023 Aug  5 12:06 public_dir

# chmod 755 public_dir

# ls -ld public_dir

drwxr-xr-x  1 ignatz   staff    6023 Aug  5 12:06 public_dir

在以下示例中,将可执行 shell 脚本的权限从读写更改为读写和执行。


% ls -l my_script

-rw------- 1 ignatz   staff    6023 Aug  5 12:06 my_script

% chmod 700 my_script

% ls -l my_script

-rwx------ 1 ignatz   staff    6023 Aug  5 12:06 my_script

Procedure如何在绝对模式下更改特殊文件权限

  1. 如果您不是文件或目录的属主,请成为超级用户或承担等效角色。

    只有当前属主或具有超级用户功能的用户可以使用 chmod 命令更改文件或目录的特殊权限。

  2. 在绝对模式下更改特殊权限。


    % chmod nnnn filename
    
    nnnn

    指定用于更改文件或目录的权限的八进制值。最左侧的八进制值设置文件的特殊权限。有关特殊权限的有效八进制值的列表,请参见表 6–6

    filename

    指定文件或目录。


    注 –

    使用 chmod 命令更改具有 ACL 项的文件的文件组权限时,文件组权限和 ACL 掩码都将更改为新权限。请注意,新 ACL 掩码权限可以更改在文件中具有 ACL 项的其他用户和组的权限。使用 getfacl 命令以确保为所有 ACL 项都设置了适当的权限。有关更多信息,请参见 getfacl(1) 手册页。


  3. 检验文件的权限是否已更改。


    % ls -l filename
    

示例 6–5 在绝对模式下设置特殊文件权限

在以下示例中,将对 dbprog 文件设置 setuid 权限。


# chmod 4555 dbprog

# ls -l dbprog

-r-sr-xr-x   1 db     staff        12095 May  6 09:29 dbprog

在以下示例中,将对 dbprog2 文件设置 setgid 权限。


# chmod 2551 dbprog2

# ls -l dbprog2

-r-xr-s--x   1 db     staff       24576 May  6 09:30 dbprog2

在以下示例中,将对 public_dir 目录设置 sticky 位权限。


# chmod 1777 public_dir

# ls -ld public_dir

drwxrwxrwt   2 ignatz   staff          512 May 15 15:27 public_dir

使用 ACL 保护文件(任务列表)

以下任务列表说明列出文件的 ACL、更改 ACL,以及将 ACL 复制到另一个文件的过程。

任务 

参考 

确定文件是否具有 ACL 

如何检查文件是否具有 ACL

将 ACL 添加到文件 

如何将 ACL 项添加到文件

复制 ACL 

如何复制 ACL

修改 ACL 

如何更改文件的 ACL 项

删除文件的 ACL 

如何删除文件的 ACL 项

显示文件的 ACL 

如何显示文件的 ACL 项

Procedure如何检查文件是否具有 ACL

    检查文件是否具有 ACL。


    % ls -l filename
    

    其中,filename 指定文件或目录。

    在输出中,模式字段右侧的加号 (+) 表示该文件具有 ACL。


    注 –

    除非已添加了用于扩展 UNIX 文件权限的 ACL 项,否则会将文件视为具有“琐碎” ACL,并且不会显示加号 (+)。



示例 6–6 检查文件是否具有 ACL

在以下示例中,ch1.sgm 文件具有 ACL。ACL 由模式字段右侧的加号 (+) 表示。


% ls -l ch1.sgm

-rwxr-----+  1 stacey   techpubs      167 Nov 11 11:13 ch1.sgm

Procedure如何将 ACL 项添加到文件

  1. 使用 setfacl 命令设置文件的 ACL。


    % setfacl -s user::perms,group::perms,other:perms,mask:perms,acl-entry-list filename ...
    
    -s

    设置文件的 ACL。如果文件已具有 ACL,则会替换该 ACL。此选项要求至少有 user::group::other:: 项。

    user::perms

    指定文件属主权限。

    group::perms

    指定组属主权限。

    other:perms

    为文件属主或组成员之外的用户指定权限。

    mask:perms

    指定 ACL 掩码的权限。掩码表示允许用户(属主除外)和组拥有的最大权限。

    acl-entry-list

    指定文件或目录中要为特定用户和组设置的一个或多个 ACL 项的列表。也可以设置目录的缺省 ACL 项。表 6–7表 6–8 显示了有效的 ACL 项。

    filename ...

    指定要对其设置 ACL 的一个或多个文件或目录。多个 filename 由空格分隔。


    注意 – 注意 –

    如果该文件已存在 ACL,则 -s 选项将使用新的 ACL 替换整个 ACL。


    有关更多信息,请参见 setfacl(1) 手册页。

  2. 检验是否已对文件设置了 ACL 项。


    % getfacl filename
    

    有关更多信息,请参见如何检查文件是否具有 ACL


示例 6–7 设置文件的 ACL

在以下示例中,会在 ch1.sgm 文件中将文件属主权限设置为读写、将文件组权限设置为只读,并将其他用户权限设置为无。此外,还在文件中为用户 anusha 指定读写权限。将 ACL 掩码权限设置为读写,这意味着任何用户或组都没有执行权限。


% setfacl -s user::rw-,group::r--,other:---,mask:rw-,user:anusha:rw- ch1.sgm

% ls -l

total 124

-rw-r-----+  1 stacey  techpubs   34816 Nov 11 14:16 ch1.sgm

-rw-r--r--   1 stacey  techpubs   20167 Nov 11 14:16 ch2.sgm

-rw-r--r--   1 stacey  techpubs    8192 Nov 11 14:16 notes

% getfacl ch1.sgm

# file: ch1.sgm

# owner: stacey

# group: techpubs

user::rw-

user:anusha:rw-    #effective:rw-

group::r--         #effective:r--

mask:rw-

other:---

在以下示例中,会将文件属主权限设置为读写和执行,将文件组权限设置为只读,并将其他用户权限设置为无。此外,还会在 ch2.sgm 文件中将 ACL 掩码权限设置为读。最后,将为用户 anusha 指定读写权限。但是,由于 ACL 掩码的原因,anusha 的权限为只读。


% setfacl -s u::7,g::4,o:0,m:4,u:anusha:7 ch2.sgm

% getfacl ch2.sgm

# file: ch2.sgm

# owner: stacey

# group: techpubs

user::rwx

user:anusha:rwx         #effective:r--

group::r--              #effective:r--

mask:r--

other:---

Procedure如何复制 ACL

    通过重定向 getfacl 输出,将文件的 ACL 复制到另一个文件。


    % getfacl filename1 | setfacl -f - filename2 
    
    filename1

    指定将从其中复制 ACL 的文件。

    filename2

    指定要对其设置所复制的 ACL 的文件。


示例 6–8 复制 ACL

在以下示例中,会将 ch2.sgm 中的 ACL 复制到 ch3.sgm


% getfacl ch2.sgm | setfacl -f - ch3.sgm

Procedure如何更改文件的 ACL 项

  1. 使用 setfacl 命令修改文件的 ACL 项。


    % setfacl -m acl-entry-list filename ... 
    
    -m

    修改现有的 ACL 项。

    acl-entry-list

    指定文件或目录中要修改的一个或多个 ACL 项的列表。也可以修改目录的缺省 ACL 项。表 6–7表 6–8 显示了有效的 ACL 项。

    filename ...

    指定一个或多个文件或目录,由空格分隔。

  2. 检验是否已修改文件的 ACL 项。


    % getfacl filename
    

示例 6–9 修改文件的 ACL 项

在以下示例中,将用户 anusha 的权限修改为读写。


% setfacl -m user:anusha:6 ch3.sgm

% getfacl ch3.sgm

# file: ch3.sgm

# owner: stacey

# group: techpubs

user::rw-				

user::anusha:rw-        #effective:r--

group::r-               #effective:r--

mask:r--

other:r-

在以下示例中,将组 staff 的缺省权限修改为对 book 目录的读取权限。此外,还将缺省 ACL 掩码权限修改为读写。


% setfacl -m default:group:staff:4,default:mask:6 book

Procedure如何删除文件的 ACL 项

  1. 删除文件的 ACL 项。


    % setfacl -d acl-entry-list  filename ... 
    
    -d

    删除指定的 ACL 项。

    acl-entry-list

    指定文件或目录中要删除的 ACL 项(未指定权限)的列表。只能删除特定用户和组的 ACL 项和缺省 ACL 项。表 6–7表 6–8 显示了有效的 ACL 项。

    filename ...

    指定一个或多个文件或目录,由空格分隔。

    或者,可以使用 setfacl -s 命令删除文件的所有 ACL 项,并使用所指定的新 ACL 项替换它们。

  2. 检验是否已删除文件的 ACL 项。


    % getfacl filename
    

示例 6–10 删除文件的 ACL 项

在以下示例中,将从 ch4.sgm 文件中删除用户 anusha


% setfacl -d user:anusha ch4.sgm

Procedure如何显示文件的 ACL 项

    使用 getfacl 命令显示文件的 ACL 项。


    % getfacl [-a | -d] filename ...
    
    -a

    显示指定文件或目录的文件名、文件属主、文件组和 ACL 项。

    -d

    显示指定目录的文件名、文件属主、文件组和缺省 ACL 项(如果存在)。

    filename ...

    指定一个或多个文件或目录,由空格分隔。

    如果在命令行中指定多个文件名,则会在每两个 ACL 项之间显示一个空白行。


示例 6–11 显示文件的 ACL 项

在以下示例中,将显示文件 ch1.sgm 的所有 ACL 项。用户和组项旁边的 #effective: 注释表示由 ACL 掩码修改后的权限。


% getfacl ch1.sgm



# file: ch1.sgm

# owner: stacey

# group: techpubs

user::rw-

user:anusha:r-        #effective:r--

group::rw-            #effective:rw-

mask:rw-

other:---

在以下示例中,将显示目录 book 的缺省 ACL 项。


% getfacl -d book



# file: book

# owner: stacey

# group: techpubs

user::rwx

user:anusha:r-x       #effective:r-x

group::rwx            #effective:rwx

mask:rwx

other:---

default:user::rw-

default:user:anusha:r--

default:group::rw-

default:mask:rw-

default:other:---

防止程序受到安全风险(任务列表)

以下任务列表说明查找系统中的危险可执行程序,以及禁止程序利用可执行栈的过程。

任务 

说明 

参考 

使用特殊权限查找文件 

查找设置了 setuid 位,但不归 root 用户拥有的文件。

如何使用特殊文件权限查找文件

防止可执行栈溢出 

防止程序利用可执行栈。 

如何禁止程序使用可执行栈

防止记录可执行栈消息 

关闭记录可执行栈消息 

示例 6–13

Procedure如何使用特殊文件权限查找文件

应对系统中未经授权在程序中使用 setuidsetgid 权限的情况进行监视。使用 setuidsetgid 权限,普通用户可以获取超级用户功能。可疑可执行文件为用户而不是 rootbin 授予拥有权。

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 使用 find 命令查找拥有 setuid 权限的文件


    # find directory -user root -perm -4000 -exec ls -ldb {} \; >/tmp/filename
    
    find directory

    检查以指定的 directory(可以是 root (/)、sys binmail)开头的所有挂载路径。

    -user root

    仅显示由 root 拥有的文件。

    -perm -4000

    仅显示权限被设置为 4000 的文件。

    -exec ls -ldb

    ls -ldb 格式显示 find 命令的输出。

    >/tmp/filename

    包含 find 命令的结果的文件。

  3. /tmp/filename 中显示结果。


    # more /tmp/filename
    

    有关 setuid 权限的背景信息,请参见setuid 权限


示例 6–12 使用 setuid 权限查找文件

以下示例的输出显示,名为 rar 的用户创建了一份 /usr/bin/sh 的个人副本,并将权限设置为 rootsetuid。因此,/usr/rar/bin/sh 程序将使用 root 权限运行。

通过将文件从 /tmp 目录中移出,可以保存此输出以供将来参考。


# find / -user root -perm -4000 -exec ls -ldb {} \; > /var/tmp/ckprm

# cat /var/tmp/ckprm

-r-sr-xr-x 1 root bin 38836 Aug 10 16:16 /usr/bin/at

-r-sr-xr-x 1 root bin 19812 Aug 10 16:16 /usr/bin/crontab

---s--x--x 1 root sys 46040 Aug 10 15:18 /usr/bin/ct

-r-sr-xr-x 1 root sys 12092 Aug 11 01:29 /usr/lib/mv_dir

-r-sr-sr-x 1 root bin 33208 Aug 10 15:55 /usr/lib/lpadmin

-r-sr-sr-x 1 root bin 38696 Aug 10 15:55 /usr/lib/lpsched

---s--x--- 1 root rar 45376 Aug 18 15:11 /usr/rar/bin/sh

-r-sr-xr-x 1 root bin 12524 Aug 11 01:27 /usr/bin/df

-rwsr-xr-x 1 root sys 21780 Aug 11 01:27 /usr/bin/newgrp

-r-sr-sr-x 1 root sys 23000 Aug 11 01:27 /usr/bin/passwd

-r-sr-xr-x 1 root sys 23824 Aug 11 01:27 /usr/bin/su

# mv /var/tmp/ckprm /export/sysreports/ckprm

Procedure如何禁止程序使用可执行栈

有关可执行栈的安全风险的说明,请参见防止可执行文件危及安全

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 编辑 /etc/system 文件并添加以下行:


    set noexec_user_stack=1
  3. 重新引导系统。


    # init 6
    

示例 6–13 禁止记录可执行栈消息

在此示例中,将禁止记录可执行栈消息,然后重新引导系统。


# cat /etc/system

set noexec_user_stack=1

set noexec_user_stack_log=0

# init 6

第 7 章 使用自动安全性增强工具(任务)

本章介绍了如何使用自动安全性增强工具 (Automated Security Enhancement Tool, ASET) 来监视或限制对系统文件和目录的访问。

以下是本章中的逐步说明列表:

如需一种比 ASET 更为全面的工具,请使用 Solaris 安全工具包。Solaris 安全工具包提供了用于强化和最小化 Solaris 系统的框架。此工具包包括文件配置工具、报告工具和撤消功能。此工具包是免费的,可以从 Sun Web 站点 http://wwws.sun.com/security/jass 下载。此 Web 站点包含指向联机文档的链接。

Alex Noordergraaf 和 Glenn Brunette 合著的《Securing Systems with the Solaris Security Toolkit》(ISBN 0-13-141071-7,2003 年 6 月)中对此工具包进行了详细说明。本书是 Sun Microsystems Press 出版的 Sun BluePrints 系列的一部分。

自动安全性增强工具 (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

运行 ASET(任务列表)

任务 

说明 

参考 

从命令行运行 ASET 

以指定的 ASET 级别保护系统。查看执行日志可了解更改。 

如何交互运行 ASET

按固定间隔以批处理模式运行 ASET 

设置 cron(时钟守护进程)作业以确保 ASET 保护系统。 

如何定期运行 ASET

停止以批处理模式运行 ASET 

删除 ASET cron 作业。 

如何停止定期运行 ASET

将 ASET 报告存储在服务器上 

收集来自客户机的 ASET 报告以便集中进行监视。 

如何在服务器上收集 ASET 报告

要设置 ASET 中的变量,请参见ASET 环境变量。要配置 ASET,请参见配置 ASET

Procedure如何交互运行 ASET

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见配置 RBAC(任务列表)

  2. 使用 aset 命令交互运行 ASET。


    # /usr/aset/aset -l level -d pathname
    
    level

    指定安全级别。有效值为 lowmediumhigh。缺省设置为 low。有关安全级别的详细信息,请参见ASET 安全级别

    pathname

    指定 ASET 的工作目录。缺省设置为 /usr/aset

  3. 查看屏幕上显示的 ASET 执行日志,验证 ASET 是否正在运行。

    执行日志消息可确定正在运行的任务。


示例 7–1 交互运行 ASET

在以下示例中,ASET 在低安全级别运行,并且使用缺省工作目录。


# /usr/aset/aset -l low

======= ASET Execution Log =======

 

ASET running at security level low

 

Machine = jupiter; Current time = 0111_09:26

 

aset: Using /usr/aset as working directory

 

Executing task list ...

	firewall

	env

	sysconf

	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

Procedure如何定期运行 ASET

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见配置 RBAC(任务列表)

  2. 如有必要,设置希望 ASET 定期运行的时间。

    应该在系统需求较少时运行 ASET。/usr/aset/asetenv 文件中的 PERIODIC_SCHEDULE 环境变量用于设置 ASET 的定期运行时间。缺省情况下,时间设置为每天午夜。

    如果希望设置其他时间,请编辑 /usr/aset/asetenv 文件中的 PERIODIC_SCHEDULE 变量。有关设置 PERIODIC_SCHEDULE 变量的详细信息,请参见PERIODIC_SCHEDULE 环境变量

  3. 使用 aset 命令向 crontab 文件中添加项。


    # /usr/aset/aset -p
    

    -p 选项可在 crontab 文件中插入一行,使 ASET 在 /usr/aset/asetenv 文件中的 PERIODIC_SCHEDULE 环境变量确定的时间开始运行。

  4. 显示 crontab 项以检验安排 ASET 运行的时间。


    # crontab -l root
    

Procedure如何停止定期运行 ASET

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 编辑 crontab 文件。


    # crontab -e root
    
  3. 删除 ASET 项。

  4. 保存更改并退出。

  5. 显示 crontab 项,检验 ASET 项是否已删除。


    # crontab -l root
    

Procedure如何在服务器上收集 ASET 报告

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 在服务器上设置目录:

    1. 转到 /usr/aset 目录。


      mars# cd /usr/aset
      
    2. 创建 rptdir 目录。


      mars# mkdir rptdir
      
    3. 转到 rptdir 目录并创建 client_rpt 目录。

      此步骤可为客户机创建 client_rpt 子目录。对于每台需要收集报告的客户机,请重复此步骤。


      mars# cd rptdir
      
      mars# mkdir client_rpt
      

      在以下示例中,创建了目录 all_reports 以及子目录 pluto_rptneptune_rpt


      mars# cd /usr/aset
      
      mars# mkdir all_reports
      
      mars# cd all_reports
      
      mars# mkdir pluto_rpt
      
      mars# mkdir neptune_rpt
      
  3. client_rpt 目录添加到 /etc/dfs/dfstab 文件中。

    这些目录应可选择进行读取还是写入。

    例如,可使用读写权限共享 dfstab 文件中的以下各项。


    share -F nfs -o rw=pluto /usr/aset/all_reports/pluto_rpt
    
    share -F nfs -o rw=neptune /usr/aset/all_reports/neptune_rpt
  4. 使 dfstab 文件中的资源可供客户机使用。


    # shareall
    
  5. 在每台客户机上,在挂载点 /usr/aset/masters/reports 上挂载服务器中的客户机子目录。


    # mount server:/usr/aset/client_rpt /usr/aset/masters/reports
    
  6. 编辑 /etc/vfstab 文件以在系统引导时自动挂载目录。

    neptune 上的 /etc/vfstab 中的以下样例项列出了要从 mars/usr/aset/all_reports/neptune_rpt 以及 neptune 上的挂载点 /usr/aset/reports 挂载的目录。系统引导时,vfstab 中列出的目录会自动挂载。


    mars:/usr/aset/all_reports/neptune.rpt /usr/aset/reports nfs - yes hard

解决 ASET 问题

本节介绍 ASET 生成的错误消息。

ASET 错误消息


ASET failed: no mail program found.

原因:

系统指示 ASET 将执行日志发送给用户,但是无法找到邮件程序。

解决方法:

安装邮件程序。


Usage: aset [-n user[@host]]]] in /bin/mail or /usr/ucb/mail.


Cannot decide current and previous security levels.

原因:

ASET 无法确定当前调用和先前调用的安全级别。

解决方法:

确保通过命令行选项或 ASETSECLEVEL 环境变量设置了当前安全级别。此外,还应确保 ASETDIR/archives/asetseclevel.arch 的最后一行正确反映先前的安全级别。如果未设置这些值,或者这些值不正确,请输入正确的值。


ASET working directory undefined.


To specify, set ASETDIR environment variable or use command line option -d.


ASET startup unsuccessful.

原因:

ASET 工作目录未定义,或者定义错误。此工作目录为操作目录。

解决方法:

使用 ASETDIR 环境变量或 -d 命令行选项来更正此错误,然后重新启动 ASET。


ASET working directory $ASETDIR missing.


ASET startup unsuccessful.

原因:

ASET 工作目录未定义,或者定义错误。此工作目录为操作目录。此问题可能是由于 ASETDIR 变量引用了不存在的目录而引起,或是 -d 命令行选项可能引用了不存在的目录。

解决方法:

确保正确引用了正确的目录,即包含 ASET 目录分层结构的目录。


Cannot expand $ASETDIR to full pathname.

原因:

ASET 无法将由 ASETDIR 变量或 -d 命令行选项提供的目录名称扩展为全路径名。

解决方法:

确保目录名称正确。确保目录引用了用户可以访问的现有目录。


aset: invalid/undefined security level.


To specify, set ASETSECLEVEL environment variable or use command line option -l, with argument= low/med/high.

原因:

安全级别未定义或者定义错误。仅有值 lowmedhigh 可以接受。

解决方法:

使用 ASETSECLEVEL 变量或 -l 命令行选项来指定这三个值中的其中一个。


ASET environment file asetenv not found in $ASETDIR.


ASET startup unsuccessful.

原因:

ASET 在其工作目录中无法找到 asetenv 文件。

解决方法:

确保 ASET 的工作目录中存在 asetenv 文件。有关此文件的详细信息,请参见 asetenv(4) 手册页。


filename doesn't exist or is not readable.

原因:

通过 filename 引用的文件不存在或无法读取。使用 -u 选项时可能会出现此问题。通过此选项,可以指定一个包含要检查的用户列表的文件。

解决方法:

确保 -u 选项的参数存在并可读取。


ASET task list TASKLIST undefined.

原因:

未定义应在 asetenv 文件中定义的 ASET 任务列表。此消息表示 asetenv 文件错误。

解决方法:

检查 asetenv 文件。确保在 User Configurable 部分中定义了任务列表。另外,还要检查此文件的其他部分以确保文件的完整性。有关有效的 asetenv 文件的内容,请参见 asetenv(4) 手册页。


ASET task list $TASKLIST missing.


ASET startup unsuccessful.

原因:

未定义应在 asetenv 文件中定义的 ASET 任务列表。此消息表示 asetenv 文件错误。

解决方法:

检查 asetenv 文件。确保在 User Configurable 部分中定义了任务列表。另外,还要检查此文件的其他部分以确保文件的完整性。有关有效的 asetenv 文件的内容,请参见 asetenv(4) 手册页。


Schedule undefined for periodic invocation.


No tasks executed or scheduled. Check asetenv file.

原因:

使用 -p 选项请求了 ASET 调度,但未在 asetenv 文件中定义环境变量 PERIODIC_SCHEDULE

解决方法:

检查 asetenv 文件的 User Configurable 部分以确保定义了此变量。确保此变量的格式正确。


Warning! Duplicate ASET execution scheduled.


Check crontab file.

原因:

安排 ASET 运行多次。换句话说,在一个 ASET 调度仍有效时请求了另一个调度。如果确实需要多个调度,则此消息不一定就表示错误。在这种情况下,此消息仅用作警告。如果需要多个调度,则应该使用正确的调度格式以及 crontab 命令。有关更多信息,请参见 crontab(1) 手册页。

解决方法:

通过 crontab 命令检验正确的调度是否有效。确保 ASET 不存在不必要的 crontab 项。