本部分介绍可以在非联网系统上配置的安全性。以下各章讨论了如何规划、监视和控制对磁盘、文件及外围设备的访问。
保持计算机的信息安全是一项重要的系统管理任务。本章概述了有关管理计算机安全性的信息。
以下是本章中概述信息的列表:
从 Solaris 9 发行版开始,已经引入了以下功能来增强系统安全:
强口令加密可用并可配置。有关更多信息,请参见口令加密。
设备策略通过权限进行了增强。有关更多信息,请参见设备策略(概述)。
对于设备分配,将来的 Solaris OS 发行版可能不支持 /etc/security/dev 目录。
基本审计报告工具 (Basic Audit Reporting Tool, BART) 可以监视系统中文件的真实性。有关更多信息,请参见第 5 章,使用基本审计报告工具(任务)。
文件可以通过强加密进行保护。有关更多信息,请参见通过加密保护文件。
权限在内核级别增强进程权利。有关更多信息,请参见权限(概述)。
Solaris 加密框架集中了提供者和使用者的加密服务。有关更多信息,请参见第 13 章,Solaris 加密框架(概述)。
PAM 框架为许多程序(如 Solaris 安全 Shell)提供功能。有关更多信息,请参见Solaris 10 发行版对 PAM 所做的更改。
Solaris Zones 和资源管理控制对计算机资源的访问。有关更多信息,请参见《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》。
在工作场所中,可以将所有与服务器连接的计算机视为一个大型的多功能系统。您要负责此大型系统的安全性。您需要保护网络,防止其受到尝试访问此网络的外来者的破坏,还需要确保网络中各计算机上的数据的完整性。
在文件级别,Solaris OS 提供了可用于保护文件、目录和设备的标准安全功能。在系统和网络级别,安全问题基本相同。第一道安全防线是控制对系统的访问。您可以执行以下操作来控制和监视系统访问:
要控制对系统的访问,必须维护计算环境的物理安全性。例如,处于登录状态并且无人值守的系统容易受到未经授权的访问攻击。入侵者可以获取访问操作系统和网络的权限。应该物理保护计算机环境和计算机硬件,防止其受到未经授权的访问攻击。
您可以保护 SPARC 系统,防止硬件设置受到未经授权的访问。使用 eeprom 命令要求在访问 PROM 时提供口令。有关更多信息,请参见如何要求硬件访问口令。
您还必须防止对系统或网络进行未经授权的登录,这可以通过指定口令和控制登录来实现。系统上的所有帐户都应该具有口令。口令是一种简单的验证机制。如果帐户没有设置口令,则猜中用户名的入侵者可以访问整个网络。强口令算法可防止强力攻击。
用户登录系统时,login 命令会根据 /etc/nsswitch.conf 文件中列出的信息检查相应的名称服务或目录服务数据库。此文件包括以下项:
files-表示本地系统上的 /etc 文件
ldap-表示 LDAP 服务器上的 LDAP 目录服务
nis-表示 NIS 主服务器上的 NIS 数据库
nisplus-表示 NIS+ 根服务器上的 NIS+ 数据库
有关 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 不支持口令生命期。可以使用命令 passwd -r nis 来更改存储在 NIS 口令列表中的用户口令。
如果网络使用 NIS+ 来验证用户,则口令信息保存在 NIS+ 数据库中。可以通过仅允许授权用户进行访问来保护 NIS+ 数据库中的信息。可以使用 passwd -r nisplus 命令来更改存储在 NIS+ 数据库中的用户口令。
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 | ||
2a | ||
md5 | ||
__unix__ |
以下说明了 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,md5,CRYPT_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_passwd。dialups 文件包含需要拨号口令的端口的列表。d_passwd 文件包含需要加密口令作为附加拨号口令的 shell 程序的列表。这两个文件中的信息按如下方式处理:
如果 /etc/passwd 中的用户登录 shell 与 /etc/d_passwd 中的某项相匹配,则用户必须提供拨号口令。
如果在 /etc/d_passwd 中无法找到 /etc/passwd 中的用户登录 shell,则用户必须提供缺省口令。缺省口令是用于 /usr/bin/sh 的项。
如果 /etc/passwd 中的登录 shell 字段为空,则用户必须提供缺省口令。缺省口令是用于 /usr/bin/sh 的项。
如果 /etc/d_passwd 没有用于 /usr/bin/sh 的项,则对于其登录 shell 字段在 /etc/passwd 中为空或者不与 /etc/d_passwd 中的任何项相匹配的那些用户,系统不会提示输入拨号口令。
连接到计算机系统的外围设备会引起安全风险。麦克风可以获取会话内容并将其传输到远程系统。CD-ROM 可能会保存其信息供下一个 CD-ROM 设备用户读取。打印机可以从远程访问。系统不可或缺的设备也可能会出现安全问题。例如,网络接口(如 hme0)被视为不可或缺的设备。
Solaris 软件提供了两种方法来控制对设备的访问。设备策略可限制或防止对构成系统的设备进行访问。设备策略在内核中强制执行。设备分配可限制或防止对外围设备进行访问。设备分配在用户分配时强制执行。
设备策略在内核中使用 privilege(权限)来保护选定设备。例如,hme 之类的网络接口的设备策略要求具有所有权限才能进行读取或写入。
设备分配使用授权来保护外围设备,如打印机或麦克风。缺省情况下,不会启用设备分配。一旦启用,便可配置设备分配,以防止使用设备或者要求仅有获得授权才能访问该设备。当分配某个设备以供使用时,在当前用户解除分配此设备之前,其他用户将无法访问此设备。
可以在多个区域中配置 Solaris 系统以控制对设备的访问:
设置设备策略-在 Solaris 10 发行版中,可以要求使用一个权限集来运行要访问特定设备的进程。没有这些权限的进程将无法使用设备。在系统引导时,Solaris 软件将配置设备策略。可以在安装期间为第三方驱动程序配置设备策略。安装之后,您可以作为系统管理员将设备策略添加到设备中。
使设备可分配-启用设备分配之后,可以限制一台设备在某一时间只能由一个用户使用。可以进一步要求用户实现某些安全要求。例如,可以要求用户在获取授权后再使用设备。
禁止使用设备-可以禁止计算机系统上的任何用户使用某一设备(如麦克风)。服务站系统可能是一个用于使特定的设备不可用的不错选择。
将设备限定到特殊区域-可以指定在某个非全局区域中使用设备。有关更多信息,请参见《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》中的“非全局区域中的设备使用”。有关设备和区域的更多基本介绍,请参见《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》中的“区域中的已配置设备”。
使用设备策略机制,可以指定打开设备的进程需要特定权限。仅有正在使用设备策略指定的权限运行的进程才能访问受设备策略保护的设备。Solaris OS 提供了缺省设备策略。例如,hme0 之类的网络接口要求对其进行访问的进程使用 net_rawaccess 权限运行。这一要求是在内核中强制执行的。有关权限的更多信息,请参见权限(概述)。
在早期的 Solaris OS 发行版中,设备节点仅受文件权限的保护。例如,组 sys 拥有的设备只能由 sys 组的成员打开。在 Solaris 10 发行版中,文件权限不会预测哪些用户可打开设备,而是使用文件权限和设备策略来保护设备。例如,/dev/ip 文件具有 666 项权限。但是,设备只能由具有相应权限的进程打开。
可以对设备策略的配置进行审计。AUE_MODDEVPLCY 审计事件可记录设备策略的更改。
有关设备策略的更多信息,请参见以下内容:
使用设备分配机制,可以限制对外围设备(如 CD-ROM)的访问。可以在本地管理此机制。如果未启用设备分配,则外围设备仅受文件权限的保护。例如,外围设备在缺省情况下可供以下用户使用:
任何可以对软盘或 CD-ROM 进行读写操作的用户。
任何可以连接麦克风的用户。
任何可以访问已连接的打印机的用户。
设备分配可以限制设备仅由授权用户使用,还可以完全阻止对设备进行访问。分配了设备的用户对设备具有独占使用权,直到此用户解除分配此设备为止。解除分配设备时,设备清除脚本会删除任何剩余数据。可以编写设备清除脚本来清除没有脚本的设备中的信息。有关示例,请参见编写新的设备清理脚本。
可以对分配设备、解除分配设备以及列出可分配设备的尝试进行审计。审计事件是 ot 审计类的一部分。
有关设备分配的更多信息,请参见以下内容:
作为系统管理员,您可以控制和监视系统活动。可以针对何人使用哪些资源设置限制。可以记录资源的使用,并可以监视正在使用资源的用户,还可以设置计算机以最大程度减少资源的不正确使用。
系统要求提供 root 口令才能进行超级用户访问。在缺省配置中,用户无法以 root 的身份远程登录系统。远程登录时,用户必须使用其用户名登录,然后使用 su 命令成为 root。可以监视使用 su 命令的用户,特别是那些尝试获取超级用户访问权限的用户。有关监视用户以及限制超级用户访问权限的过程,请参见监视和限制超级用户(任务列表)。
基于角色的访问控制或 RBAC 旨在限制超级用户的功能。超级用户(即 root 用户)具有访问系统中所有资源的权限。借助 RBAC,可以使用一组具有单独权限的角色来替换 root。例如,可以设置一个角色来处理用户帐户创建,设置另一个角色来处理系统文件修改。创建了处理一种或一组功能的角色之后,即可从 root 的功能中删除这些功能。
每个角色都要求已知的用户使用自己的用户名和口令进行登录。登录之后,用户即可承担具有特定角色口令的角色。因此,知道 root 口令的用户只有有限的系统破坏力。有关 RBAC 的更多信息,请参见基于角色的访问控制(概述)。
您可以通过以下方法来防止您自己和您的用户导致意外的错误:
可以为用户指定受限 shell。受限 shell 通过控制用户仅访问其工作所需的那些系统部分来防止出现用户错误。事实上,通过谨慎设置,可以确保用户仅访问有助于提高其工作效率的那些系统部分。
可以针对用户无需访问的文件设置限制性权限。
应该谨慎地正确设置 PATH 变量。否则,可能会无意中运行由其他用户引入的程序。入侵程序会破坏数据或损坏系统。这类对安全性构成威胁的程序称为特洛伊木马程序。例如,一个替代的 su 程序可能会放置在公共目录中,而您作为系统管理员可能会运行此替代程序。这类脚本看上去正好类似于常规的 su 命令。由于这类脚本会在执行之后自行删除,因此,几乎没有明确迹象表明您实际上已运行了特洛伊木马程序。
PATH 变量在登录时自动设置。路径通过以下启动文件设置:.login、.profile 和 .cshrc。当设置用户搜索路径以便将当前目录 (.) 置于最后时,系统会阻止运行这类特洛伊木马程序。供超级用户使用的 PATH 变量根本不应该包括当前目录。
自动安全性增强工具 (Automated Security Enhancement Tool, ASET) 会检查启动文件以确保 PATH 变量设置正确。ASET 还可确保 PATH 变量不包含点 (.) 项。
标准 shell 允许用户打开文件,执行命令等。受限 shell 可限制用户更改目录和执行命令。可使用 /usr/lib/rsh 命令调用受限 shell。请注意,受限 shell 并不是远程 shell,后者为 /usr/sbin/rsh。受限 shell 在以下方面不同于标准 shell:
受限用户只能使用其起始目录,因此无法使用 cd 命令来更改目录。因此,这类用户无法浏览系统文件。
受限用户无法更改 PATH 变量,因此这类用户只能使用系统管理员设置的路径中的命令。受限用户也无法使用完整路径名来执行命令或脚本。
使用受限 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 章,控制对文件的访问(任务)介绍了如何设置文件权限。
可执行文件可能存在安全风险。许多可执行程序必须以 root 的身份(即超级用户身份)执行才能正常工作。运行这些 setuid 程序需要将用户 ID 设置为 0。运行这些程序的任何用户都使用 root ID 运行程序。如果在编写使用 root ID 运行的程序时未注重安全性,则此程序将引起潜在的安全问题。
除了 Sun 附带的 setuid 位设置为 root 的可执行程序之外,还应该禁止使用 setuid 程序。如果无法禁止使用 setuid 程序,则至少应该限制其使用。安全管理很少需要使用 setuid 程序。
有关更多信息,请参见防止可执行文件危及安全。有关过程,请参见防止程序受到安全风险(任务列表)。
ASET 安全软件包提供可用于控制和监视系统安全性的自动管理工具。ASET 提供了三种安全级别:低、中和高。可以指定一种 ASET 安全级别。级别越高,ASET 对文件的控制功能越强,从而可限制访问文件并提高系统的安全性。有关更多信息,请参见第 7 章,使用自动安全性增强工具(任务)。
虽然 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 Containers-资源管理和 Solaris Zones》中的第 I 部分, “资源管理”。
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、 mac 和 encrypt 命令来保护文件。有关更多信息,请参见第 13 章,Solaris 加密框架(概述)。
ACL(发音为 “ackkl”)可以对文件权限进行更多控制。如果传统的 UNIX 文件保护无法提供足够的保护,则可添加 ACL。传统的 UNIX 文件保护可为三种用户类提供读取、写入和执行权限:属主、组和其他用户。ACL 可提供更为精确的安全性。可以使用 ACL 定义以下文件权限:
属主文件权限
属主组的文件权限
不属于属主组的其他用户的文件权限
特定用户的文件权限
特定组的文件权限
先前每个类别的缺省权限
有关使用 ACL 的更多信息,请参见使用访问控制列表保护文件。
网络文件服务器可以控制可共享的文件,还可以控制有权访问文件的客户机,以及允许这些客户机使用的访问类型。通常,文件服务器可以为所有客户机或特定客户机授予读写权限或只读权限。通过 share 命令使资源可用时,便会指定访问控制。
文件服务器上的 /etc/dfs/dfstab 文件列出了此服务器为网络中的客户机提供的文件系统。有关共享文件系统的更多信息,请参见《系统管理指南:网络服务》中的“自动文件系统共享”。
通常,不允许超级用户对通过网络共享的文件系统进行 root 访问。NFS 系统通过将请求程序的用户更改为具有用户 ID 60001 的用户 nobody,可以防止以 root 身份对已挂载的文件系统进行访问。用户 nobody 的访问权限与为公众提供的那些访问权限相同。用户 nobody 具有的访问权限与没有凭证的用户所具有的访问权限相同。例如,如果公众只对某个文件具有执行权限,则用户 nobody 只能执行此文件。
NFS 服务器可以按主机授予超级用户对共享文件系统的权限。要授予这些权限,请使用 share 命令的 root=hostname 选项。应该谨慎使用此选项。有关 NFS 的安全选项的介绍,请参见《系统管理指南:网络服务》中的第 6 章 “访问网络文件系统(参考)”。
计算机常常是其他计算机配置的一部分。此配置称为网络。连接的计算机可通过网络交换信息。联网的计算机可以访问网络中其他计算机的数据和其他资源。计算机网络创建了一种强大且完善的计算环境。但是,网络同时也使计算机安全性变得更为复杂。
例如,在计算机网络中,独立的计算机都允许共享信息。未经授权的访问存在安全风险。由于许多用户都有权访问网络,因此更可能会出现未经授权的访问,尤其是由于用户错误进行的访问。口令使用不当也会导致未经授权的访问。
网络安全性通常基于限制或阻止来自远程系统的操作。下图介绍了可以对远程操作强制执行的安全限制。
验证是一种在特定用户访问远程系统时,限制这些用户的访问权限的方法。可以同时在系统级别和网络级别设置验证。授权是一种在授予用户访问远程系统的权限之后,限制此用户可执行的操作的方法。下表列出了可提供验证和授权的服务。
表 2–3 远程访问的验证和授权服务
服务 |
说明 |
更多信息 |
---|---|---|
IPsec |
IPsec 提供了基于主机和基于证书的验证以及网络通信流量加密。 | |
Kerberos |
Kerberos 使用加密功能对登录系统的用户进行验证和授权。 |
有关示例,请参见Kerberos 服务的工作方式。 |
LDAP 和 NIS+ |
LDAP 目录服务和 NIS+ 名称服务可以提供网络级别的验证和授权。 |
《系统管理指南:名称和目录服务(DNS、NIS 和 LDAP)》 和 《System Administration Guide: Naming and Directory Services (NIS+)》 |
远程登录命令 |
使用远程登录命令,用户可以通过网络登录到远程系统并使用其资源。rlogin、rcp 和 ftp 是一些远程登录命令。如果是“受信任主机”,则会自动执行验证。否则,系统会要求进行自我验证。 | |
SASL |
简单身份验证和安全层 (Simple Authentication and Security Layer, SASL) 是一种为网络协议提供验证和可选安全性服务的框架。可以使用插件来选择相应的验证协议。 | |
安全 RPC |
安全 RPC 通过对远程计算机发出请求的用户进行验证,可提高网络环境的安全性。可以使用 UNIX、DES 或 Kerberos 验证系统来实现安全 RPC。 | |
|
安全 RPC 还可用于在 NFS 环境中提供额外的安全性。具有安全 RPC 的 NFS 环境称为安全 NFS。安全 NFS 针对公钥使用 Diffie-Hellman 验证。 | |
Solaris 安全 Shell |
Solaris 安全 Shell 可以对不安全网络上的网络通信流量进行加密。Solaris 安全 Shell 通过单独使用口令、公钥或同时使用这两者来提供验证。Solaris 安全 Shell 针对公钥使用 RSA 和 DSA 验证。 |
安全 RPC 的可能替代项是 Solaris 特权端口机制。为特权端口指定的端口号小于 1024。客户机系统验证客户机的凭证之后,此客户机便会使用特权端口与服务器建立连接。然后,服务器通过检查连接的端口号来检验客户机凭证。
未运行 Solaris 软件的客户机可能无法使用特权端口进行通信。如果客户机无法通过此端口进行通信,则会显示类似以下内容的错误消息:
“Weak Authentication NFS request from unprivileged port” |
可以设置防火墙系统来防止外部对网络中的资源进行访问。防火墙系统是一台安全主机,可充当内部网络与外部网络之间的屏障。内部网络将所有其他网络均视为不可信对象。 应该考虑将此设置作为内部网络和任何与其进行通信的外部网络(如 Internet)之间的强制性设置。
防火墙可充当网关和屏障,并可充当在网络之间传递数据的网关,还可充当阻止与网络来回自由传递数据的屏障。防火墙要求内部网络中的用户登录到防火墙系统之后才能访问远程网络中的主机。同样,外部网络中的用户必须先登录到防火墙系统,然后才会被授予访问内部网络中主机的权限。
防火墙还可用于某些内部网络之间。例如,可以设置防火墙或安全网关计算机来限制包的传送。如果网关计算机不是包的源地址或目标地址,则网关可以禁止两个网络之间的包交换。防火墙还应设置为仅转发特定协议的包。例如,可以允许包传送邮件,但不允许传送 telnet 或 rlogin 命令。ASET 以高安全级别运行时,会禁用 Internet 协议 (Internet Protocol, IP) 包的转发。
此外,从内部网络发送的所有电子邮件均会首先发送到防火墙系统。然后,防火墙将邮件传送给外部网络中的主机。防火墙系统还会接收所有传入的电子邮件,并将邮件分发给内部网络中的主机。
防火墙可阻止未经授权的用户访问网络中的主机。应该严格维护对防火墙强制执行的安全性,但对网络中其他主机的安全性限制可以较为宽松。但是,突破防火墙的入侵者可以获取访问内部网络中所有其他主机的权限。
防火墙系统不应该包含任何受信任主机。受信任主机是指不要求用户提供口令即可从其中进行登录的主机。防火墙系统不应该共享其任何文件系统,也不应该挂载其他服务器的任何文件系统。
可以使用以下技术来通过防火墙加强系统的安全性:
通过 ASET 对防火墙系统强制执行高安全性,如第 7 章,使用自动安全性增强工具(任务)中所述。
通过 Solaris 安全工具包(非正式名称为 JASS 工具包)使用防火墙来加强 Solaris 系统的安全性。此工具包可以从 Sun 的 Web 站点 http://wwws.sun.com/security/jass 下载。
通过 IPsec 和 Solaris IP 过滤器提供防火墙保护。有关保护网络通信流量的更多信息,请参见《系统管理指南:IP 服务》中的第 IV 部分, “IP 安全性”。
大多数局域网可以通过称为包的块在计算机之间传输数据。通过称为包粉碎的过程,网络之外的未经授权用户可能会破坏或损坏数据。
包粉碎涉及在包到达其目标之前捕获这些包。然后,入侵者会向内容中加入任意数据,并将这些包发送回其原始路线。在局域网中,不可能粉碎包,因为包会同时到达所有系统(包括服务器)。但是,可以在网关上粉碎包,因此请确保网络中的所有网关都受到保护。
大多数危险的攻击都会影响数据的完整性。这类攻击包括更改包的内容或者模拟用户。涉及窃听的攻击不会破坏数据的完整性。窃听者会记录会话内容以便稍后重放,但不会模拟用户。尽管窃听攻击不会攻击数据的完整性,但是会影响保密性。可以对通过网络的数据进行加密来保护敏感信息的保密性。
要对不安全网络上的远程操作进行加密,请参见第 18 章,使用 Solaris 安全 Shell(任务)。
要对网络中的数据进行加密和验证,请参见第 20 章,Kerberos 服务介绍。
要对 IP 数据报进行加密,请参见《系统管理指南:IP 服务》中的第 19 章 “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 发送电子邮件与此响应组联系。
本章介绍用于控制可以访问 Solaris 系统的用户的过程。以下是本章中信息的列表:
有关系统安全的概述信息,请参见第 2 章,管理计算机安全性(概述)。
一台计算机的安全性取决于其最薄弱的登录点。以下任务列表说明了应监视和确保安全的若干方面:
任务 |
说明 |
参考 |
---|---|---|
监视、允许和拒绝用户登录 |
监视异常登录活动。临时禁止登录。管理拨号登录。 | |
提供强口令加密 |
指定用于加密用户口令的算法。安装其他算法。 | |
监视和限制超级用户活动 |
定期监视超级用户活动。禁止 root 用户远程登录。 | |
禁止访问硬件设置 |
禁止普通用户使用 PROM。 |
以下任务列表说明监视用户登录和禁用用户登录的过程。
任务 |
说明 |
参考 |
---|---|---|
显示用户的登录状态 |
列出有关用户登录帐户的详细信息,如全名和口令生命期信息。 | |
查找没有口令的用户 |
仅查找其帐户无需口令的那些用户。 | |
临时禁用登录 |
拒绝用户在系统关闭或例行维护时登录到计算机。 | |
保存失败的登录尝试 |
为五次登录尝试后仍不能提供正确口令的用户创建日志。 | |
保存所有失败的登录尝试 |
为失败的登录尝试创建日志。 | |
创建拨号口令 |
要求通过调制解调器或拨号端口远程登录的用户提供其他口令。 | |
临时禁用拨号登录 |
禁止用户通过调制解调器或端口远程拨入。 |
您可以限制远程登录和要求用户具有口令,也可以监视失败的访问尝试以及临时禁用登录。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
# logins -x -l username |
显示一组扩展的登录状态信息。
显示指定用户的登录状态。变量 username 是用户的登录名称。必须以逗号分隔的列表形式指定多个登录名称。
logins 命令使用相应的口令数据库来获取用户的登录状态。该数据库可以是本地 /etc/passwd 文件,也可以是名称服务的口令数据库。有关更多信息,请参见 logins(1M) 手册页。
在以下示例中,显示了用户 rimmer 的登录状态。
# logins -x -l rimmer rimmer 500 staff 10 Annalee J. Rimmer /export/home/rimmer /bin/sh PS 010103 10 7 -1 |
标识用户的登录名称。
标识用户 ID (user ID, UID)。
标识用户的主组。
标识组 ID (group ID, GID)。
标识注释。
标识用户的起始目录。
标识登录 shell。
指定口令生命期信息:
上次更改口令的日期
更改之间要求的天数
在该天数后必须更改
警告期
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
# logins -p |
在以下示例中,用户 pmorph 没有口令。
# logins -p pmorph 501 other 1 Polly Morph # |
在系统关闭或例行维护期间,可临时禁止用户登录。超级用户登录将不受影响。有关更多信息,请参见 nologin(4) 手册页。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
在文本编辑器中创建 /etc/nologin 文件。
# vi /etc/nologin |
添加有关系统可用性的消息。
关闭并保存该文件。
在此示例中,用户将收到系统不可用的通知。
# vi /etc/nologin (Add system message here) # cat /etc/nologin ***No logins permitted.*** ***The system will be unavailable until 12 noon.*** |
您也可以将系统引导至运行级 0(单用户模式)以禁止登录。有关将系统引导至单用户模式的信息,请参见《系统管理指南:基本管理》中的第 9 章 “关闭系统(任务)”。
此过程从终端窗口捕获失败的登录尝试。此过程不会从 CDE 或 GNOME 登录尝试中捕获失败的登录。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
在 /var/adm 目录中创建 loginlog 文件。
# touch /var/adm/loginlog |
在 loginlog 文件中,为 root 用户设置读写权限。
# chmod 600 /var/adm/loginlog |
在 loginlog 文件中,将组成员关系更改为 sys。
# chgrp sys /var/adm/loginlog |
检验日志是否正常工作。
例如,使用错误的口令五次登录系统。然后,显示 /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) 手册页。
此过程捕获 syslog 文件中所有失败的登录尝试。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
使用所需的 SYSLOG 和 SYSLOG_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=YES … SYSLOG_FAILED_LOGINS=0 # |
使用正确的权限创建文件以保存日志信息。
编辑 syslog.conf 文件以记录失败的口令尝试。
这些失败应发送到 authlog 文件。
检验日志是否正常工作。
例如,使用错误的口令以普通用户的身份登录系统。然后,以主管理员角色或超级用户身份显示 /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 # |
定期监视 /var/adm/authlog 文件。
按照上述过程进行操作,但在 /etc/default/login 文件中将 SYSLOG_FAILED_LOGINS 的值设置为 3。
在 /etc/default/login 文件中取消对 RETRIES 项的注释,然后将 RETRIES 的值设置为 3。所做编辑将立即生效。在一个会话中重试登录三次后,系统便会关闭连接。
首次建立拨号口令时,务必保持登录到至少一个端口。请在其他端口上测试该口令。如果注销以测试新口令,则可能无法重新登录。如果同时还登录到另一个端口,则可返回并修复相应错误。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
创建一个包含串行设备列表的 /etc/dialups 文件。
添加要使用拨号口令保护的所有端口。/etc/dialups 文件的内容应与以下信息类似:
/dev/term/a /dev/term/b /dev/term/c |
对于要求拥有拨号口令的登录程序,创建一个 /etc/d_passwd 文件,并在文件中添加这些程序。
添加用户可在登录时运行的 shell 程序,例如 uucico、sh、ksh 和 csh。/etc/d_passwd 文件的显示应与以下信息类似:
/usr/lib/uucp/uucico:encrypted-password: /usr/bin/csh:encrypted-password: /usr/bin/ksh:encrypted-password: /usr/bin/sh:encrypted-password: |
在此过程的后续部分,将为每个登录程序添加加密口令。
在这两个文件中,将拥有权设置为 root。
# chown root /etc/dialups /etc/d_passwd |
在这两个文件中,将组拥有权设置为 root。
# chgrp root /etc/dialups /etc/d_passwd |
在这两个文件中,为 root 设置读写权限。
# chmod 600 /etc/dialups /etc/d_passwd |
创建临时用户。
# useradd username |
为临时用户创建口令。
# passwd username New Password: <键入口令> Re-enter new Password: <重新键入口令> passwd: password successfully changed for username |
捕获加密口令。
# grep username /etc/shadow > username.temp |
编辑 username.temp 文件。
删除除加密口令以外的所有字段。第二个字段保存加密口令。
例如,在以下行中,加密口令为 U9gp9SyA/JlSk。
temp:U9gp9SyA/JlSk:7967:::::7988: |
删除临时用户。
# userdel username |
将加密口令从 username.temp 文件复制到 /etc/d_passwd 文件中。
可为每个登录 shell 创建不同口令。或者,对每个登录 shell 使用相同口令。
将该口令通知拨号用户。
应确保在通知用户的过程中口令不会被篡改。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
将下面的项作为单独的一行放入 /etc/d_passwd 文件:
/usr/bin/sh:*: |
以下任务列表说明管理口令算法的过程:
任务 |
参考 |
---|---|
提供强口令加密 | |
为名称服务提供强口令加密 | |
添加新的口令加密模块 |
缺省情况下,使用 crypt_unix 算法加密用户口令。通过更改缺省口令加密算法,可以使用更强大的加密算法,如 MD5 或 Blowfish。
在此过程中,BSD-Linux 版本的 MD5 算法是用户更改其口令时使用的缺省加密算法。此算法适合由运行 Solaris、BSD 和 Linux 版本的 UNIX 的计算机构成的混合网络。有关口令加密算法和算法标识符的列表,请参见表 2–1。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
键入标识符作为 /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) 手册页。
在此示例中,Blowfish 算法的标识符 2a 被指定为 policy.conf 文件中的 CRYPT_DEFAULT 变量的值:
CRYPT_ALGORITHMS_ALLOW=1,2a,md5 #CRYPT_ALGORITHMS_DEPRECATE=__unix__ CRYPT_DEFAULT=2a |
此配置与使用 Blowfish 算法的 BSD 系统兼容。
当 NIS 域中的用户更改其口令时,NIS 客户机会查看 /etc/security/policy.conf 文件中的本地算法配置。NIS 客户机将加密口令。
在 NIS 客户机的 /etc/security/policy.conf 文件中指定口令加密算法。
将修改过的 /etc/security/policy.conf 文件复制到 NIS 域中的每台客户机。
为尽可能减少混淆,将修改过的 /etc/security/policy.conf 文件复制到 NIS 根服务器和从服务器。
当 NIS+ 域中的用户更改其口令时,NIS+ 名称服务会查看 NIS+ 主服务器的 /etc/security/policy.conf 文件中的算法配置。运行 rpc.nispasswd 守护进程的 NIS+ 主服务器将创建加密口令。
在 NIS+ 主服务器的 /etc/security/policy.conf 文件中指定口令加密算法。
为尽可能减少混淆,将 NIS+ 主服务器的 /etc/security/policy.conf 文件复制到 NIS+ 域中的每台主机。
正确配置 LDAP 客户机后,LDAP 客户机便可以使用新的口令算法。LDAP 客户机的行为与 NIS 客户机的行为相同。
在 LDAP 客户机的 /etc/security/policy.conf 文件中指定口令加密算法。
将修改过的 policy.conf 文件复制到 LDAP 域中的每台客户机。
确保客户机的 /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(任务)”。
第三方口令加密算法通常在软件包中作为模块提供。运行 pkgadd 命令时,供应商的脚本应修改 /etc/security/crypt.conf 文件。然后,您可修改 /etc/security/policy.conf 文件以包含新模块及其标识符。
有关如何添加软件的详细说明,请参见《系统管理指南:基本管理》中的“添加或删除软件包 (pkgadd)”。
确认是否已添加新模块及模块标识符。
读取 /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 |
将新安装算法的标识符添加到 /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 文件。 | |
在控制台上显示超级用户活动 |
在超级用户尝试登录时监视其访问尝试。 |
另一种使用超级用户帐户的方法是设置基于角色的访问控制。基于角色的访问控制称为 RBAC。有关 RBAC 的概述信息,请参见基于角色的访问控制(概述)。要设置 RBAC,请参见第 9 章,使用基于角色的访问控制(任务)。
sulog 文件列出了 su 命令的每次使用情况,而不仅仅包括用于从用户切换到超级用户的 su 尝试。
# 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 |
此方法可立即检测访问本地系统的超级用户尝试。
查看 /etc/default/login 文件中的 CONSOLE 项。
CONSOLE=/dev/console |
缺省情况下,控制台设备设置为 /dev/console。使用此设置,root 可以登录到控制台。root 无法远程登录。
检验 root 是否可以远程登录。
从远程系统,尝试以超级用户身份登录。
mach2 % rlogin -l root mach1 Password: <键入 mach1 的超级用户口令> Not on system console Connection closed. |
监视成为超级用户的尝试。
缺省情况下,会使用 SYSLOG 实用程序在控制台上列显成为超级用户的尝试。
在此示例中,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。
以下任务列表说明如何使 PROM 免受不需要的访问:
任务 |
说明 |
参考 |
---|---|---|
禁止用户更改系统硬件设置 |
修改 PROM 设置需要提供口令。 | |
禁用中止序列 |
禁止用户访问 PROM。 |
可以通过要求在访问硬件设置时提供口令来保护物理计算机,也可以通过禁止用户使用中止序列离开窗口系统来保护计算机。
在 x86 系统上,保护 PROM 即是保护 BIOS。有关如何保护 BIOS,请参阅计算机手册。
成为超级用户或承担拥有设备安全配置文件、维护和修复配置文件或系统管理员配置文件的角色。
系统管理员配置文件包括维护和修复配置文件。要创建拥有系统管理员配置文件的角色并将该角色指定给用户,请参见配置 RBAC(任务列表)。
在终端窗口中,键入 PROM 安全模式。
# eeprom security-mode=command Changing PROM password: New password: <键入口令> Retype new password: <重新键入口令> |
选择值 command 或 full。有关更多详细信息,请参见 eeprom(1M) 手册页。
如果键入上述命令时未提示输入 PROM 口令,则表明系统已拥有 PROM 口令。
(可选的)要更改 PROM 口令,请键入以下命令:
# eeprom security-password= 按回车键 Changing PROM password: New password: <键入口令> Retype new password: <重新键入口令> |
新的 PROM 安全模式和口令将立即生效。但是,很可能在下次引导时才会对这些更改进行通知。
切勿忘记 PROM 口令。如果没有此口令,硬件将不可用。
某些服务器系统具有键开关。如果将键开关设置在安全位置,则该开关将覆盖软件键盘中止设置。因此,使用以下过程进行的任何更改都可能无法实现。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
将 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 |
更新键盘缺省值。
# kbd -i |
本章介绍了保护设备的逐步说明,并包含一个参考部分。以下是本章中的信息列表:
有关设备保护的概述信息,请参见控制对设备的访问。
以下任务列表介绍了管理设备访问的任务。
任务 |
参考 |
---|---|
管理设备策略 | |
管理设备分配 | |
使用设备分配 |
以下任务列表介绍了与设备策略相关的设备配置过程。
任务 |
说明 |
参考 |
---|---|---|
查看系统上设备的设备策略 |
列出设备及其设备策略。 | |
要求使用设备的权限 |
使用权限保护设备。 | |
删除设备的权限要求 |
删除或减少访问设备所需的权限。 | |
审计设备策略中的更改 |
在审计跟踪中记录设备策略的更改。 | |
访问 /dev/arp |
获取 Solaris IP MIB-II 信息。 |
设备策略会限制或防止对作为系统整体部分的设备进行访问。策略在内核中实施。
显示系统上所有设备的设备策略。
% getdevpolicy | more DEFAULT read_priv_set=none write_priv_set=none ip:* read_priv_set=net_rawaccess write_priv_set=net_rawaccess … |
此示例显示了三个设备的设备策略。
% 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 |
承担拥有设备安全权限配置文件的角色或成为超级用户。
主管理员角色拥有设备安全权限配置文件。还可以将设备安全权限配置文件指定给所创建的角色。有关如何创建角色并将其指定给用户的信息,请参见示例 9–3。
向设备中添加策略。
# update_drv -a -p policy device-driver |
指定 device-driver 的 policy。
device-driver 的设备策略。设备策略指定两组权限。一组用于读取设备,另一组用于写入设备。
设备驱动程序。
有关更多信息,请参见 update_drv(1M) 手册页。
以下示例向 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 |
以下示例从 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 |
缺省情况下,as 审计类包括 AUE_MODDEVPLCY 审计事件。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
预选包括 AUE_MODDEVPLCY 审计事件的审计类。
将 as 类添加到 audit_control 文件的 flags 行中。此文件的显示将与以下内容类似:
# audit_control file dir:/var/audit flags:lo,as minfree:20 naflags:lo |
有关详细说明,请参见如何修改 audit_control 文件。
检索 Solaris IP MIB-II 信息的应用程序应该打开 /dev/arp,而不是 /dev/ip。
确定 /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 不需要权限。
打开 /dev/arp 并推送 tcp 和 udp 模块。
此方法不需要权限,与打开 /dev/ip 并推送 arp、tcp 和 udp 模块等效。由于现在打开 /dev/ip 需要权限,因此首选使用 /dev/arp 方法。
以下任务列表介绍了启用和配置设备分配的过程。缺省情况下不会启用设备分配。启用设备分配之后,请参见分配设备(任务列表)。
任务 |
说明 |
参考 |
---|---|---|
使设备可分配 |
可以一次将一个设备分配给一个用户。 | |
授权用户分配设备 |
将设备分配授权指定给用户。 | |
查看系统上的可分配设备 |
列出可分配的设备及其状态。 | |
强制分配设备 |
将设备分配给有即时需要的用户 | |
强制解除设备分配 |
解除当前分配给某用户设备的分配 | |
更改设备的分配属性 |
更改分配设备的要求 | |
创建设备清理脚本 |
清除物理设备中的数据。 | |
禁用设备分配 |
删除所有设备中的分配限制。 | |
审计设备分配 |
在审计跟踪中记录设备分配 |
设备分配会限制或防止对外围设备进行访问。限制在用户分配时实施。缺省情况下,用户必须具有授权才能访问可分配设备。
如果已经运行 bsmconv 命令启用了审计,则已经在系统上启用了设备分配。有关更多信息,请参见 bsmconv(1M) 手册页。
承担拥有审计控制权限配置文件的角色或成为超级用户。
主管理员角色拥有审计控制权限配置文件。还可以将审计控制权限配置文件指定给所创建的角色。有关如何创建角色并将其指定给用户的信息,请参见示例 9–3。
# 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)。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
创建包含适当授权和命令的权限配置文件。
通常,可以创建包括 solaris.device.allocate 授权的权限配置文件。请按照如何创建或更改权限配置文件中的说明执行。授予权限配置文件适当属性,例如:
权限配置文件名称: Device Allocation
授予的授权: solaris.device.allocate
带有安全属性的命令:带有 sys_mount 权限的 mount 和带有 sys_mount 权限的 umount
创建权限配置文件的角色。
请按照如何使用 GUI 创建和指定角色中的说明执行。使用以下角色属性作为指南:
角色名: devicealloc
角色全名: Device Allocator
角色说明: Allocates and mounts allocated devices
权限配置文件: Device Allocation
此权限配置文件必须在包括于角色中的配置文件列表的顶部。
将此角色指定给允许分配设备的每个用户。
为用户讲授如何使用设备分配。
有关分配可移除介质的示例,请参见如何分配设备。
由于 Volume Management 守护进程 (vold) 未运行,因此不会自动挂载可移除介质。有关挂载已分配设备的示例,请参见如何挂载已分配的设备。
必须启用设备分配,此过程才会成功。有关如何启用设备分配的信息,请参见如何使设备可分配。
承担拥有设备安全权限配置文件的角色或成为超级用户。
主管理员角色拥有设备安全权限配置文件。还可以将设备安全权限配置文件指定给所创建的角色。有关如何创建角色并将其指定给用户的信息,请参见示例 9–3。
# 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 授权的角色。
强制分配应在某个用户忘记解除设备分配时使用,也可以在用户对设备有即时需要时使用。
此用户或角色必须具有 solaris.device.revoke 授权。
确定角色中是否具有适当授权。
$ auths solaris.device.allocate solaris.device.revoke |
将设备强制分配给需要此设备的用户。
此示例将磁带机强制分配给用户 jdoe。
$ allocate -U jdoe |
在进程终止或用户注销时,不会自动解除对用户的设备分配。用户忘记解除设备分配时,应使用强制解除分配。
此用户或角色必须具有 solaris.device.revoke 授权。
确定角色中是否具有适当授权。
$ auths solaris.device.allocate solaris.device.revoke |
强制解除设备分配。
此示例强制解除打印机分配。现在,其他用户可以分配此打印机。
$ deallocate -f /dev/lp/printer-1 |
承担拥有设备安全权限配置文件的角色或成为超级用户。
主管理员角色拥有设备安全权限配置文件。还可以将设备安全权限配置文件指定给所创建的角色。有关如何创建角色并将其指定给用户的信息,请参见示例 9–3。
指定是否需要授权,或者指定 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 授权才能使用此设备。
在以下示例中,系统上的任何用户都可以分配所有设备。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 … |
在以下示例中,不能使用音频设备。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 … |
在以下示例中,不能使用外围设备。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 … |
缺省情况下,设备分配命令位于 other 审计类中。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
预选 ot 类进行审计。
将 ot 类添加到 audit_control 文件的 flags 行中。此文件的显示与以下信息类似:
# audit_control file dir:/var/audit flags:lo,ot minfree:20 naflags:lo |
有关详细说明,请参见如何修改 audit_control 文件。
以下任务列表介绍了向用户说明如何分配设备的过程。
任务 |
说明 |
参考 |
---|---|---|
分配设备 |
使某用户可以用某设备,同时防止任何其他用户使用此设备。 | |
挂载已分配的设备 |
使用户可以查看需要挂载的设备,例如 CD-ROM 或软盘。 | |
解除设备分配 |
使其他用户可以使用可分配设备。 |
设备分配使设备每次只能被一个用户使用。必须挂载需要挂载点的设备。
必须启用设备分配,如如何使设备可分配中所述。如果需要授权,则用户必须具有此授权。
分配设备。
根据设备名称指定设备。
% allocate device-name |
检验是否已分配此设备。
运行相同命令。
% allocate device-name allocate. Device already allocated. |
在此示例中,用户 jdoe 分配麦克风 audio。
% whoami jdoe % allocate audio |
在此示例中,某用户分配打印机。该用户解除打印机分配或打印机被强制分配给其他用户之前,任何其他用户都不能打印到 printer-1。
% allocate /dev/lp/printer-1 |
有关强制解除分配的示例,请参见强制解除设备分配。
在此示例中,用户 jdoe 分配磁带机 st0。
% whoami jdoe % allocate st0 |
如果 allocate 命令不能分配设备,则会在控制台窗口显示一条错误消息。有关分配错误消息的列表,请参见 allocate(1) 手册页。
用户或角色已分配了此设备。要挂载设备,用户或角色必须具有挂载此设备所需的权限。有关如何提供所需权限的信息,请参见如何授权用户来分配设备。
承担可以分配和挂载设备的角色。
% su role-name Password: <键入 role-name 的口令> $ |
在角色起始目录中创建并保护挂载点。
只需在首次需要挂载点的时候执行此步骤。
$ mkdir mount-point ; chmod 700 mount-point |
列出可分配的设备。
$ list_devices -l List of allocatable devices |
分配设备。
根据设备名称指定设备。
$ allocate device-name |
挂载设备。
$ mount -o ro -F filesystem-type device-path mount-point |
其中,
指示将此设备挂载为只读。使用 -o rw 指示应该可以写入此设备。
指示设备的文件系统格式。通常,使用 HSFS 文件系统格式化 CD-ROM。而软盘通常使用 PCFS 文件系统进行格式化。
指示设备的路径。list_devices -l 命令的输出包括 device-path。
指示在步骤 2 中创建的挂载点。
在此示例中,用户承担可以分配和挂载软盘驱动器 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 |
在此示例中,用户承担可以分配和挂载 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。检查以下各项:
确保正在配置文件 shell 中执行 mount 命令。如果已经承担了某角色,则此角色具有一个配置文件 shell。如果您是被指定了带有 mount 命令的配置文件的用户,则必须创建一个配置文件 shell。命令 pfsh、pfksh 和 pfcsh 可创建配置文件 shell。
确保拥有指定的挂载点。您应该具有挂载点的读取、写入和执行权限。
如果仍然不能挂载已分配的设备,请与管理员联系。
解除分配使其他用户可以分配和使用此设备。
必须已经分配此设备。
在此示例中,用户 jdoe解除麦克风 audio 的分配。
% whoami jdoe % deallocate audio |
在此示例中,设备分配器角色解除 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 命令,可以清除指向磁盘、磁带、端口、音频设备和伪设备的不稳定 /dev 链接。还可以重新配置已命名驱动程序的设备。 | ||
显示与一个或多个设备关联的策略。任何用户都可以运行此命令。 | ||
将新设备驱动程序添加到正在运行的系统。包含将设备策略添加到此新设备的选项。通常,正在安装设备驱动程序时会在脚本中调用此命令。 | ||
更新现有设备驱动程序的属性。包含为此设备更新设备策略的选项。通常,正在安装设备驱动程序时会在脚本中调用此命令。 | ||
删除设备或设备驱动程序。 |
设备分配可以保护站点免受数据丢失、计算机病毒以及其他安全问题的破坏。与设备策略不同,设备分配是可选的。只有在 bsmconv 脚本运行之后才可分配设备。。设备分配使用授权限制对可分配设备的访问。
allocate、deallocate、 dminfo 和 list_devices 命令。有关更多信息,请参见设备分配命令。
各个可分配设备的设备清理脚本。
这些命令和脚本使用以下本地文件实现设备分配:
/etc/security/device_allocate 文件。有关更多信息,请参见 device_allocate(4) 手册页。
/etc/security/device_maps 文件。有关更多信息,请参见 device_maps(4) 手册页。
/etc/security/dev 目录中每个可分配设备的锁定文件。
与每个可分配设备关联的锁定文件的已更改属性。
Solaris OS 的将来发行版可能不支持 /etc/security/dev 目录。
与大写选项一起使用时,allocate、deallocate 和 list_devices 命令是管理命令。否则,这些命令是用户命令。下表列出了设备分配命令。
表 4–2 设备分配命令
缺省情况下,用户必须具有 solaris.device.allocate 授权才能保留可分配设备。有关如何创建包括 solaris.device.allocate 授权的权限配置文件的信息,请参见如何授权用户来分配设备。
管理员必须具有 solaris.device.revoke 授权才能更改任何设备的分配状态。例如,allocate 和 list_devices 命令的 -U 选项,以及 deallocate 命令的 -F 选项需要 solaris.device.revoke 授权。
有关更多信息,请参见要求授权的命令。
当 deallocate 命令解除分配失败,或 allocate 命令分配失败时,设备将被置于分配错误状态。可分配设备处于分配错误状态时,必须强制解除对此设备的分配。只有超级用户或者具有设备管理权限配置文件或设备安全权限配置文件的角色才能处理分配错误状态。
deallocate 命令和 -F 选项一起使用可强制解除分配。或者,可以使用 allocate -U 将设备指定给用户。设备分配后,便可查明出现的任何错误消息。更正设备的所有问题后,可强制解除其分配。
设置设备分配时会创建设备映射。启用审计服务后,bsmconv 命令会创建缺省 /etc/security/device_maps 文件。可以为站点自定义此初始 device_maps 文件。device_maps 文件包括与每个可分配设备关联的设备名称、设备类型和设备特定文件。
device_maps 文件定义每个设备的设备特定文件映射,这在许多情况下并不是直观的。使用此文件,程序可以查看设备特定文件和设备之间的映射关系。例如,可以使用 dminfo 命令,在设置可分配设备时检索要指定的设备名称、设备类型和设备特定文件。dminfo 命令使用 device_maps 文件来报告此信息。
device-name:device-type:device-list |
以下是 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 文件中的行可以用反斜杠 (\) 结束,以在下一行继续项。也可以包括注释。井号 (#) 注释前面未紧跟反斜杠的下一个新行之前的所有后续文本。所有字段中都允许前导空格和后缀空格。字段定义如下:
指定此设备的名称。有关当前设备名称的列表,请参见如何查看有关设备的分配信息。
指定通用设备类型。通用名称是设备类的名称,例如 st、fd 或 audio。device-type 字段在逻辑上将相关设备分组。
列出与物理设备关联的设备特定文件。device-list 必须包含所有允许访问特定设备的特定文件。如果此列表不完整,则恶意用户仍可以获取或修改专用信息。device-list 字段的有效项反映位于 /dev 目录中的设备文件。
启用审计服务后,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 文件中的行可以用反斜杠 (\) 结束,以在下一行继续项。也可以包括注释。井号 (#) 注释前面未紧跟反斜杠的下一个新行之前的所有后续文本。所有字段都允许前导空格和后缀空格。字段定义如下:
指定此设备的名称。有关当前设备名称的列表,请参见如何查看有关设备的分配信息。
指定通用设备类型。通用名称是设备类的名称,例如 st、fd 和 sr。device-type 字段在逻辑上将相关设备分组。使设备可分配后,可 device_maps 文件的 device-type 字段中检索设备名称。
Sun 保留两个标记为 reserved 的字段以供将来使用。
指定此设备是否可分配。此字段中的星号 (*) 指示此设备是不可分配的。授权字符串或空字段指示此设备是可分配的。例如,auths 字段中的字符串 solaris.device.allocate 指示需要 solaris.device.allocate 授权才能分配此设备。此文件中的 at 符号 (@) 指示任何用户都可以分配此设备。
提供为特殊处理(例如分配进程期间的清除和对象重用保护)而调用的脚本的路径名称。每当 deallocate 命令对此设备执行操作时,都会运行 device-exec 脚本。
例如,sr0 设备的以下项指示具有 solaris.device.allocate 授权的用户可以分配 CD-ROM 驱动器:
sr0;sr;reserved;reserved;solaris.device.allocate;/etc/security/lib/sr_clean |
可以决定接受缺省设备及其已定义特征。安装新设备后,可以修改这些项。任何需要在使用之前分配的设备都必须在该设备系统的 device_allocate 和 device_maps 文件中定义。当前,将盒式磁带机、软盘驱动器、CD-ROM 驱动器和音频芯片视为可分配的。这些设备类型具有设备清理脚本。
XylogicsTM 磁带机或归档磁带机还使用为 SCSI 设备提供的 st_clean 脚本。需要为其他设备(如调制解调器、终端、图形输入板和其他可分配设备)创建自己的设备清理脚本。脚本必须满足此类型设备的对象重用要求。
设备分配满足称为对象重用的部分要求。设备清理脚本说明安全要求,即在重用之前从物理设备中清除所有可用数据。清除数据后,其他用户才可分配此设备。缺省情况下,盒式磁带机、软盘驱动器、CD-ROM 驱动器和音频设备需要设备清理脚本。Solaris OS 提供了这些脚本。本节介绍设备清理脚本的功能。
st_clean 设备清理脚本支持三种磁带设备:
SCSI ¼ 英寸磁带
归档 ¼ 英寸磁带
开放式卷盘 ½ 英寸磁带
st_clean 脚本使用 mt 命令的 rewoffl 选项来清除此设备。有关更多信息,请参见 mt(1) 手册页。如果此脚本在系统引导期间运行,则会查询此设备以确定它是否联机。如果设备联机,则此脚本确定设备中是否有介质。内含介质的 ¼ 英寸磁带设备会被置于分配错误状态。分配错误状态强制管理员手动清除此设备。
系统正常操作期间,在交互模式下执行 deallocate 命令时,将提示用户删除此介质。从设备中删除此介质之后才会进行解除分配。
为软盘驱动器和 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 选项确定脚本的运行模式:
本章介绍如何在系统上创建文件清单以及如何使用此清单来检查系统的完整性。使用基本审计报告工具 (Basic Audit Reporting Tool, BART),您可以通过在一段时间内对系统执行文件层检查来全面地验证系统。
以下是本章中信息的列表:
BART 是一种完全在文件系统层运行的文件跟踪工具。使用 BART,可以迅速、轻松、可靠地收集有关安装在已部署的系统上的软件栈组件的信息。使用 BART,可以通过简化耗时的管理任务来显著降低管理系统网络的成本。
使用 BART,可以根据已知的基准确定系统上所进行的文件层更改。可以使用 BART 根据完全安装并配置的系统创建基准或控制清单。然后可将此基准与系统快照进行比较,将生成一个列出从系统安装以来所进行的文件层更改的报告。
bart 命令是标准 UNIX 命令。您可以将 bart 命令的输出重定向到文件以便进行后续处理。
BART 在设计上侧重于既有效又灵活的简单语法。使用此工具,可以生成给定系统在一段时间内的清单。然后,需要验证此系统的文件时,可以通过比较新旧清单来生成报告。使用 BART 的另一种方法是生成若干个相似系统的清单,然后进行系统间的比较。BART 与现有审计工具的主要区别在于 BART 在跟踪信息和报告信息方面都非常灵活。
BART 的其他优点和用法包括:
提供了一种为运行 Solaris 软件的系统在文件层编制目录的有效而简便的方法。
使用 BART,可以定义要监视的文件,还可以在必要时修改配置文件。借助这种灵活性,可以监视本地的自定义项,并可轻松、有效地重新配置软件。
确保系统运行可靠的软件。
允许监视一段时间内系统在文件层的变化,从而帮助找到损坏或异常的文件。
帮助对系统性能问题进行疑难解答。
BART 清单
BART 报告
BART Rules 文件
您可以使用 bart create 命令在特定时间拍摄系统的文件层快照。输出是名为清单的关于文件和文件属性的目录。此清单列出了有关系统上所有文件或特定文件的信息。它包含了有关文件属性的信息,其中可以包括一些唯一标识的信息,如 MD5 校验和。有关 MD5 校验和的更多信息,请参见 md5(3EXT) 手册页。清单可以进行存储,并可以在客户机和服务器系统间传送。
BART 不会跨越文件系统边界,但同一类型的文件系统除外。此约束使 bart create 命令的输出更容易预测。例如,在不带参数的情况下,bart create 命令编制根 (/) 目录下所有 UFS 文件系统的目录。但是,不会对 NFS 或 TMPFS 文件系统或已挂载的 CD-ROM 编制目录。创建清单时,请勿尝试审计网络中的文件系统。请注意,使用 BART 监视联网的文件系统会占用大量的资源而生成价值很小的清单。
有关 BART 清单的更多信息,请参见BART 清单文件格式。
此报告工具有三项输入:两份要比较的清单和一个可选 rules 文件,此 rules 文件由用户提供,用于指明要标记的差异。
可以使用 bart compare 命令比较两份清单,一份是控制清单,另一份是测试清单。准备这些清单使用的文件系统、选项和 rules 文件必须与使用 bart create 命令时相同。
bart compare 命令的输出是一份报告,其中按文件列出了两份清单间的差异。差异是指上述两份清单中所列出的某个特定文件的任何属性的变化。两份清单间文件项的添加或删除也被视为差异。
报告差异时使用两个控制级别:
在生成清单时
在生成报告时
这些控制级别是特意设置的,因为生成清单所需的开销比报告两份清单间差异所需的开销大。创建清单之后,即可通过使用不同的 rules 文件运行 bart compare 命令来从各个方面比较清单。
有关 BART 报告的更多信息,请参见BART 报告。
rules 文件是一个运行 bart 命令时可选的作为输入的文本文件。此文件使用包含和排除规则。rules 文件用于创建自定义清单和报告。使用 rules 文件,可以用简洁的语法表达要编制目录的文件集以及要监视的任何给定文件集的属性。在比较清单时,使用 rules 文件有助于标记清单间的差异。使用 rules 文件是一种收集有关系统上文件的特定信息的有效方法。
可以使用文本编辑器创建 rules 文件。通过 rules 文件,可以执行以下任务:
使用 bart create 命令创建列出有关系统上所有文件或特定文件的信息的清单。
使用 bart compare 命令生成监视文件系统的特定属性的报告。
您可以创建若干个用于不同用途的 rules 文件。但是,如果使用 rules 文件创建清单,则比较清单时必须使用同一个 rules 文件。如果比较清单时所用的 rules 文件与创建清单时所用的 rules 文件不同,则 bart compare 命令的输出会列出许多无效的差异。
rules 文件中也可能包含由于用户错误而导致的语法错误和其他不明确的信息。如果 rules 文件确实包含错误信息,则也会报告这些错误。
使用 rules 文件来监视系统上的特定文件和文件属性需要进行规划。创建 rules 文件之前,请首先确定系统上要监视的文件和文件属性。根据要完成的目标,可以使用 rules 文件来创建清单、比较清单或执行其他操作。
有关 BART rules 文件的更多信息,请参见BART Rules 文件格式和 bart_rules(4) 手册页。
您可以以普通用户、超级用户或承担主管理员角色的用户的身份来运行 bart 命令。 如果作为普通用户运行 bart 命令,则只能列出和监视有权访问的文件,如有关起始目录中文件的信息。在运行 bart 命令时成为超级用户的优势是您所创建的清单会包含有关要监视的隐藏文件和专用文件的信息。如果需要列出和监视有关具有限制性权限的文件(例如 /etc/passwd 或 /etc/shadow 文件)的信息,请以超级用户或承担等效角色的用户的身份来运行 bart 命令。有关使用基于角色的访问控制的更多信息,请参见配置 RBAC(任务列表)。
以超级用户的身份运行 bart 命令会使任何人都能读取输出。此输出可能包含专用文件名。如果您在运行 bart 命令时成为超级用户,请采取相应的措施保护输出。例如,使用可生成具有限制性权限的输出文件的选项。
本章中的过程和示例显示了由超级用户运行的 bart 命令。除非另有指定,否则以超级用户的身份运行 bart 命令为可选操作。
可以在 Solaris 软件的初始安装之后立即创建系统清单。此类清单可提供用于比较同一系统在一段时间内的更改的基准。或者,可以将此清单与不同系统的清单进行比较。例如,如果为网络中的每个系统拍摄快照,然后将每个测试清单与控制清单进行比较,则可以迅速确定需要执行哪些操作来实现测试系统与基准配置的同步。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
安装 Solaris 软件之后,创建一个控制清单并将输出重定向到文件。
# bart create options > control-manifest |
指定清单的根目录。所有由规则指定的路径都会被解释为此目录的相对路径。所有由清单报告的路径均为此目录的相对路径。
无论是从命令行执行此选项,还是从标准输入中读取此选项,它都会接受要列出的单个文件的列表。
此清单的 rules 文件的名称。请注意,– 在与 -r 选项一起使用时,会从标准输入读取 rules 文件。
禁用文件列表中所有常规文件的内容签名。此选项可用于改善性能。或者,可以在需要更改文件列表的内容时使用此选项,这与系统日志文件的情况类似。
检查清单内容。
保存清单以便将来使用。
为清单选择一个有意义的名称。例如,使用系统名称及此清单的创建日期。
如果运行不带任何选项的 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) 手册页。清单比较工具会忽略某些行。被忽略的行包括空白行、仅包含空格的行,以及以 # 开头的注释。
可以通过以下方法之一自定义清单:
通过指定子树
为系统上的单个子树(而不是大型目录的全部内容)创建清单是监视特定文件更改的有效方法。您可以创建系统上特定子树的基准清单,然后定期创建同一子树的测试清单。使用 bart compare 命令将控制清单与测试清单进行比较。使用此选项,可以有效地监视重要的文件系统以确定是否有任何文件受到入侵者的威胁。
通过指定文件名
由于创建列出整个系统的清单耗时更多,占用空间的更多,所需的开销更大,因此可在仅需要列出有关系统上一个或多个特定文件的信息时选择使用此 bart 命令选项。
通过使用 rules 文件
可以使用 rules 文件创建列出有关给定系统上特定文件和特定子树的信息的自定义清单,也可以使用 rules 文件来监视特定的文件属性。使用 rules 文件创建和比较清单使您能够灵活地为多个文件或子树指定多个属性。而使用命令行只能指定应用于所创建的每份清单或所生成的每个报告的所有文件的全局属性定义。
确定要列出和监视的文件。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
安装 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 |
检查清单内容。
保存清单以便将来使用。
此示例说明了如何创建仅包含有关 /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 . . . |
此示例说明了如何创建仅列出有关系统上 /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 |
此示例说明了如何通过使用 rules 文件仅列出 /etc 目录中的文件来创建清单。同一个 rules 文件还包括由 bart compare 命令用于监视 /etc/system 文件的 acl 属性更改的指令。
使用文本编辑器创建仅列出 /etc 目录中文件的 rules 文件。
# List information about all the files in the /etc directory. CHECK all /etc # Check only acl changes in the /etc/system file IGNORE all CHECK acl /etc/system |
有关创建 rules 文件的更多信息,请参见BART Rules 文件。
使用已创建的 rules 文件创建控制清单。
# bart create -r etc.rules-file > etc.system.control-manifest ! Version 1.0 ! Thursday, December 11, 2003 (21:51:32) # 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/system F 1883 100644 user::rw-,group::r--,mask:r--, other:r-- 3f81db61 0 3 |
在每次需要监视系统的更改时创建测试清单。使用相同的 bart 选项和同一个 rules 文件并按照与控制清单完全相同的方式来准备测试清单。
使用同一个 rules 文件比较清单。
当您要监视同一系统在一段时间内的文件层更改时,请使用此过程。此类清单可以帮助找到损坏或异常的文件,检测安全性破坏,或对系统的性能问题进行疑难解答。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
安装 Solaris 软件之后,创建系统上要监视的文件的控制清单。
# bart create -R /etc > control-manifest |
在每次需要监视系统更改时创建一个在准备方式上与控制清单完全相同的测试清单。
# bart create -R /etc > test-manifest |
将控制清单与测试清单进行比较。
# bart compare options control-manifest test-manifest > bart-report |
此比较的 rules 文件的名称。将 -r 选项和 – 一起使用意味着从标准输入中读取指令。
允许用户从命令行设置全局 IGNORE 指令。
生成用于进行程序分析的标准非本地化输出的程序模式。
控制系统的 bart create 命令输出。
测试系统的 bart create 命令输出。
检查 BART 报告中的异常情况。
此示例说明了如何监视两个时间点之间 /etc 目录中发生的更改。此类比较使您可以迅速确定系统上的重要文件是否受到威胁。
创建控制清单。
# bart create -R /etc > system1.control.121203 ! Version 1.0 ! Friday, December 12, 2003 (08:34:51) # 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 4096 40755 user::rwx,group::r-x,mask:r-x,other:r-x 3fd9dfb4 0 3 /.cpr_config F 2236 100644 user::rw-,group::r--,mask:r--,other:r-- 3fd9991f 0 0 67cfa2c830b4ce3e112f38c5e33c56a2 /.group.lock F 0 100600 user::rw-,group::---,mask:---,other:--- 3f81f14d 0 1 d41 d8cd98f00b204e9800998ecf8427e /.java D 512 40755 user::rwx,group::r-x,mask:r-x,other:r-x 3f81dcb5 0 2 /.java/.systemPrefs D 512 40755 user::rwx,group::r-x,mask:r-x, other:r-x 3f81dcb7 . . . |
在需要监视 /etc 目录的更改时创建测试清单。
# bart create -R /etc > system1.test.121503 Version 1.0 ! Monday, December 15, 2003 (08:35:28) # 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 4096 40755 user::rwx,group::r-x,mask:r-x,other:r-x 3fd9dfb4 0 3 /.cpr_config F 2236 100644 user::rw-,group::r--,mask:r--,other:r-- 3fd9991f 0 0 67cfa2c830b4ce3e112f38c5e33c56a2 /.group.lock F 0 100600 user::rw-,group::---,mask:---,other:--- 3f81f14d 0 1 d41d8cd98f00b204e9800998ecf8427e /.java D 512 40755 user::rwx,group::r-x,mask:r-x,other:r-x 3f81dcb5 0 2 /.java/.systemPrefs D 512 40755 user::rwx,group::r-x,mask:r-x, other:r-x 3f81dcb70 2 /.java/.systemPrefs/.system.lock F 0 100644 user::rw-,group::r-- ,mask:r--,other: r-- 3f81dcb5 0 2 d41d8cd98f00b204e9800998ecf8427e /.java/.systemPrefs/.systemRootModFile F 0 100644 user::rw-, group::r--,mask:r--, other:r-- 3f81dd0b 0 2 d41d8cd98f00b204e9800998ecf8427e . . . |
将控制清单与测试清单进行比较。
# bart compare system1.control.121203 system1.test.121503 /vfstab: mode control:100644 test:100777 acl control:user::rw-,group::r--,mask:r--,other:r-- test:user::rwx, group::rwx,mask:rwx,other:rwx |
上面的输出指示 vfstab 文件的权限自创建了控制清单以来已发生更改。此报告可以用于检查拥有权、日期、内容或任何其他文件属性是否已发生变化。具备此类信息有助于跟踪可能的文件篡改者和更改可能发生的时间。
您可以运行系统间比较,这样可以迅速确定在基准系统和其他系统之间是否存在任何文件层差异。例如,如果您已经在基准系统上安装了特定版本的 Solaris 软件,并且需要了解其他系统是否也安装了相同的软件包,则可以创建那些系统的清单,然后将测试清单与控制清单进行比较。此类比较会列出与控制系统比较的每个测试系统在文件内容方面的任何差异。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
安装 Solaris 软件之后,创建控制清单。
# bart create options > control-manifest |
保存控制清单。
在测试系统上,使用相同的 bart 选项创建清单,并将输出重定向到文件中。
# bart create options > test1-manifest |
为测试清单选择一个特殊而有意义的名称。
将测试清单一直保存在系统的中心位置,直至准备比较清单为止。
需要比较清单时,将控制清单复制到测试清单的位置。或者,将测试清单复制到控制系统。
例如:
# cp control-manifest /net/test-server/bart/manifests
如果测试系统不是已挂载 NFS 系统,则使用 FTP 或一些其他某个可靠方法将控制清单复制到测试系统。
将控制清单与测试清单进行比较并将输出重定向到文件。
# bart compare control-manifest test1-manifest > test1.report |
检查 BART 报告中的异常情况。
对于每个需要与控制清单比较的测试清单,重复执行步骤 4 至步骤 9。
对于每个测试系统使用相同的 bart 选项。
此示例介绍了如何通过比较控制清单与不同系统的测试清单来监视 /usr/bin 目录内容的更改。
创建控制清单。
# bart create -R /usr/bin > control-manifest.121203 !Version 1.0 ! Friday, December 12, 2003 (09:19:00) # 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 13312 40755 user::rwx,group::r-x,mask:r-x,other:r-x 3fd9e925 0 2 /.s F 14200 104711 user::rwx,group::--x,mask:--x,other:--x 3f8dbfd6 0 1 8ec7e52d8a35ba3b054a6394cbf71cf6 /ControlPanel L 28 120777 - 3f81dc71 0 1 jre/bin/ControlPanel /HtmlConverter L 25 120777 - 3f81dcdc 0 1 bin/HtmlConverter /acctcom F 28300 100555 user::r-x,group::r-x,mask:r-x,other:r-x 3f6b5750 0 2 d6e99b19c847ab4ec084d9088c7c7608 /activation-client F 9172 100755 user::rwx,group::r-x,mask:r-x, other:r-x 3f5cb907 0 1 b3836ad1a656324a6e1bd01edcba28f0 /adb F 9712 100555 user::r-x,group::r-x,mask:r-x,other:r-x 3f6b5736 0 2 5e026413175f65fb239ee628a8870eda /addbib F 11080 100555 user::r-x,group::r-x,mask:r-x,other:r-x 3f6b5803 0 2 a350836c36049febf185f78350f27510 . . . |
为需要与控制系统进行比较的系统创建测试清单。
# bart create -R /usr/bin > system2-manifest.121503 ! Version 1.0 ! Friday, December 15, 2003 (13:30:58) # 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 13312 40755 user::rwx,group::r-x,mask:r-x,other:r-x 3fd9ea9c 0 2 /.s F 14200 104711 user::rwx,group::--x,mask:--x,other:--x 3f8dbfd6 0 1 8ec7e52d8a35ba3b054a6394cbf71cf6 /ControlPanel L 28 120777 - 3f81dc71 0 1 jre/bin/ControlPanel /HtmlConverter L 25 120777 - 3f81dcdc 0 1 bin/HtmlConverter /acctcom F 28300 100555 user::r-x,group::r-x,mask:r-x,other: r-x 3f6b5750 0 2 d6e99b19c847ab4ec084d9088c7c7608 . . . |
需要比较清单时,将清单复制到同一位置。
# cp control-manifest /net/system2.central/bart/manifests |
将控制清单与测试清单进行比较。
# bart compare control-manifest system2.test > system2.report /su: gid control:3 test:1 /ypcat: mtime control:3fd72511 test:3fd9eb23 |
上面的输出指示了 /usr/bin 目录中 su 文件的组 ID 与控制系统中的组 ID 不同。此信息有助于确定测试系统上是否安装了不同版本的软件或是否有人篡改了文件。
此过程为可选过程,它介绍了如何通过从命令行指定文件属性来自定义 BART 报告。如果创建了列出有关系统上所有文件或特定文件的信息的基准清单,则可以在需要监视特定目录、子目录、一个或多个文件的更改的时运行 bart compare 命令,并指定不同的属性。您可以通过从命令行指定不同的文件属性来针对同一清单运行不同类型的比较。
确定需要监视的文件属性。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
安装 Solaris 软件之后,创建控制清单。
在需要监视更改时创建测试清单。
按照准备控制清单的方式准备测试清单。
比较清单。
例如:
# bart compare -i dirmtime,lnmtime,mtime control-manifest.121503 \ test-manifest.010504 > bart.report.010504 |
请注意,使用逗号分隔在命令行语法中指定的各个属性。
检查 BART 报告中的异常情况。
此过程也是可选过程,它介绍了如何通过使用 rules 文件作为 bart compare 命令的输入来自定义 BART 报告。通过使用 rules 文件,可以自定义 BART 报告,从而使您能够灵活地为多个文件或子树指定多个属性。可以使用不同的 rules 文件来针对同一清单运行不同的比较。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
确定需要监视的文件和文件属性。
使用文本编辑器创建具有相应指令的 rules 文件。
安装 Solaris 软件之后,使用所创建的 rules 文件创建一个控制清单。
# bart create -r rules-file > control-manifest |
创建在准备方式上与控制清单完全相同的测试清单。
# bart create -r rules-file > test-manifest |
使用同一个 rules 文件比较控制清单与测试清单。
# bart compare -r rules-file control-manifest test-manifest > bart.report |
检查 BART 报告中的异常情况。
以下 rules 文件同时包括 bart create 和 bart 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 |
使用已创建的 rules 文件创建控制清单。
# bart create -r bartrules.txt > usr_bin.control-manifest.121003 |
在需要监视 /usr/bin 目录的更改时创建测试清单。
# bart create -r bartrules.txt > usr_bin.test-manifest.121103 |
使用同一个 rules 文件比较清单。
# bart compare -r bartrules.txt usr_bin.control-manifest \ usr_bin.test-manifest |
检查 bart compare 命令的输出。
/usr/bin/gunzip: add /usr/bin/ypcat: delete |
在上面的输出中,bart compare 命令报告 /usr/bin 目录中的差异。此输出指示已删除了 /usr/bin/ypcat 文件,并添加了 /usr/bin/gunzip 文件。
本节包含以下参考信息:
每个清单文件项均是单独的一行,具体取决于文件类型。每个项都以 fname(即文件名)开头。为了避免分析文件名中嵌入的特殊字符所导致的问题,已对文件名进行了编码。有关更多信息,请参见BART Rules 文件格式。
后续字段表示以下文件属性:
文件类型,可能值为:
B 表示块设备节点
C 表示字符设备节点
D 表示目录
F 表示文件
L 表示符号链接
P 表示管道
S 表示套接字
以字节为单位的文件大小。
表示文件权限的八进制数。
文件的 ACL 属性。对于具有 ACL 属性的文件,它包含了 acltotext() 的输出。
此项的属主的数字用户 ID。
此项的属主的数字组 ID。
目录上次修改的时间,以秒为单位,从 1970 年 1 月 1 日 00:00:00 UTC(国际协调时间)开始计算。
链接上次修改的时间,以秒为单位,从 1970 年 1 月 1 日 00:00:00 UTC 开始计算。
文件上次修改的时间,以秒为单位,从 1970 年 1 月 1 日 00:00:00 UTC 开始计算。
文件校验和的值。此属性仅为常规文件指定。如果关闭上下文检查,或者无法计算校验和,则此字段的值为 –。
符号链接的目标。
设备节点值。此属性仅用于字符设备文件和块设备文件。
有关 BART 清单的更多信息,请参见 bart_manifest(4) 手册页。
bart 命令的输入文件为文本文件。这些文件由行组成,行中指定了要包括在清单中的文件和要包括在报告中的文件属性。同一个输入文件可同时在两项 BART 功能中使用。工具将忽略以 # 开头的行、空白行以及包含空格的行。
输入文件包含三种类型的指令:
子树指令,带有可选的模式匹配修饰符
CHECK 指令
IGNORE 指令
<Global CHECK/IGNORE Directives> <subtree1> [pattern1..] <IGNORE/CHECK Directives for subtree1> <subtree2> [pattern2..] subtree3> [pattern3..] subtree4> [pattern4..] <IGNORE/CHECK Directives for subtree2, subtree3, subtree4> |
所有指令均会按顺序进行读取,后面的指令可能会覆盖前面的指令。
每行都有一个子树指令。指令必须以绝对路径名开头,后面跟有零个或多个模式匹配语句。
bart 命令使用 CHECK 和 IGNORE 语句定义要跟踪或忽略的属性。每个属性都有一个关联的关键字。
acl
all
contents
dest
devnode
dirmtime
gid
lnmtime
mode
mtime
size
type
uid
all 关键字是指所有文件属性。
BART 所用的 rules 文件规范语言是用于表示非标准文件名的标准 UNIX 引用语法。嵌入的制表符、空格、换行符或特殊字符以八进制格式编码,以保证工具能够读取文件名。这种不一致的引用语法会阻止在命令管道中正确处理某些文件名,如包含嵌入的回车的文件名。使用 rules 规范语言可表达复杂的文件名过滤条件,这些条件如果仅使用 shell 语法会很难并且无法有效表达。
有关 BART rules 文件或 BART 所用的引用语法的更多信息,请参见 bart_rules(4) 手册页。
在缺省模式下,bart compare 命令会检查系统上安装的除已修改的目录时间标记 (dirmtime) 外所有文件,如以下示例所示:
CHECK all IGNORE dirmtime |
如果提供了 rules 文件,则全局指令 CHECK all 和 IGNORE dirmtime 会按照以上顺序自动前置到 rules 文件之前。
将返回以下退出值:
成功
处理文件时出现非致命错误,如权限问题
出现致命错误,如无效的命令行选项
详细输出为缺省输出,已本地化并出现在多行中。详细输出已经过国际化并具有可读性。如果使用 bart compare 命令对两份系统清单进行比较,则会生成一个文件差异列表。
例如:
filename attribute control:xxxx test:yyyy |
在控制清单和测试清单中各不相同的文件的名称。
在进行比较的清单中各不相同的文件属性的名称。xxxx 是控制清单的属性值,yyyy 是测试清单的属性值。如果同一个文件中的多个属性出现差异,则每个差异都将记录在单独的一行中。
下面是 bart compare 命令的缺省输出的示例。/etc/passwd 文件中出现属性差异。输出指明 size、mtime 和 contents 属性已发生变化。
/etc/passwd: size control:74 test:81 mtime control:3c165879 test:3c165979 contents control:daca28ae0de97afd7a6b91fde8d57afa test:84b2b32c4165887355317207b48a6ec7 |
如果在运行 bart compare 命令时使用 -p 选项,则会生成程序输出。此输出以适合程序操作的格式生成。程序输出可以由其他程序轻松分析并且旨在用作其他工具的输入。
例如:
filename attribute control-val test-val [attribute control-val test-val]* |
与缺省格式中的 filename 属性相同
每个文件在控制清单和测试清单中不同的文件属性的说明
有关 bart 命令支持的属性的列表,请参见Rules 文件属性。
有关 BART 的更多信息,请参见 bart(1M) 手册页。
本章介绍如何保护 Solaris 操作系统 (Solaris Operating System, Solaris OS) 中的文件,还将介绍如何防范其权限可能危及系统安全的文件。
以下是本章中信息的列表:
通过 UNIX 文件权限和 ACL 可保证文件安全。带 sticky 位的文件和可执行文件要求特殊的安全措施。
命令 |
说明 |
手册页 |
---|---|---|
列出目录中的文件及其有关信息。 | ||
更改文件的拥有权。 | ||
更改文件的组拥有权。 | ||
更改文件的权限。可以使用符号模式(使用字母和符号)或绝对模式(使用八进制数字)更改文件的权限。 |
传统 UNIX 文件权限可以为三类用户指定拥有权:
用户-文件或目录的属主,通常为创建该文件的用户。文件的属主可以决定谁拥有读取文件、写入文件(对文件进行更改)或执行文件(如果该文件为命令)的权限。
组-一组用户的成员。
其他用户-所有其他不是文件属主和组成员的用户。
文件属主通常可以指定或修改文件权限。此外,具有管理功能的用户或角色(如超级用户或主管理员角色)可以更改文件的拥有权。要覆盖系统策略,请参见示例 6–2。
下表列出并说明了可以为文件或目录的每类用户授予的权限。
表 6–2 文件和目录权限
符号 |
权限 |
对象 |
说明 |
---|---|---|---|
r |
读 |
文件 |
指定的用户可以打开和读取文件内容。 |
|
|
目录 |
指定的用户可以列出目录中的文件。 |
w |
写 |
文件 |
指定的用户可以修改文件的内容或删除该文件。 |
|
|
目录 |
指定的用户可以在目录中添加文件或链接。这些用户也可以删除目录中的文件或链接。 |
x |
执行 |
文件 |
指定的用户可以执行文件(如果该文件为程序或 shell 脚本)。这些用户也可以使用一个 exec(2) 系统调用来运行程序。 |
|
|
目录 |
指定的用户可以打开或执行目录中的文件。这些用户也可以使该目录以及该目录下的目录成为当前目录。 |
- |
拒绝 |
文件和目录 |
指定的用户无法读写或执行文件。 |
这些文件权限可应用于常规文件,也可应用于特殊文件(如设备、套接字和命名管道 (FIFO))。
通过对目录设置受限文件权限,可以保护该目录及其子目录中的文件。但是请注意,超级用户有权访问系统中的所有文件和目录。
可执行文件和公共目录可以使用三种特殊类型的权限:setuid、setgid 和 sticky 位。设置这些权限之后,运行可执行文件的任何用户都应采用该可执行文件属主(或组)的 ID。
设置特殊权限时必须非常小心,因为特殊权限会带来安全风险。例如,通过执行将用户 ID (user ID, UID) 设置为 0(root 的 UID)的程序,用户可以获取超级用户功能。此外,所有用户可以为其拥有的文件设置特殊权限,这会带来其他安全问题。
应对系统中未经授权使用 setuid 权限和 setgid 权限获取超级用户功能的情况进行监视。可疑权限为用户而不是 root 或 bin 授予管理程序的拥有权。要搜索并列出所有使用此特殊权限的文件,请参见如何使用特殊文件权限查找文件。
对可执行文件设置 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 权限与 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 权限获取超级用户功能的情况进行监视。可疑权限为非常规组而不是 root 或 bin 授予对此类程序的访问权限。要搜索并列出所有使用此权限的文件,请参见如何使用特殊文件权限查找文件。
sticky 位是保护目录中文件的权限位。如果对目录设置了 sticky 位,则只有文件属主、目录属主或特权用户才可以删除文件。root 用户和主管理员角色即是特权用户。sticky 位禁止用户从公共目录(如 /tmp)中删除其他用户的文件:
drwxrwxrwt 7 root sys 400 Sep 3 13:37 tmp |
在 TMPFS 文件系统中设置公共目录时,务必手动设置 sticky 位。有关说明,请参见示例 6–5。
创建文件或目录时,将使用一组缺省权限进行创建。系统缺省值为空。文本文件拥有 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 |
setuid 或 setgid 位打开 |
t |
permissions |
Sticky 位打开,对于其他用户,执行位打开 |
功能列中的名称 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 |
设置文件权限的 ACL 项的类型。例如,entry-type 可以是 user(文件属主)或 mask(ACL 掩码)。有关 ACL 项的列表,请参见表 6–7 和表 6–8。
用户名或用户 ID (user ID, UID)。
组名或组 ID (group ID, GID)。
表示 entry-type 中设置的权限。perms 可以由符号字符 rwx 或八进制数字表示。这些数字与用于 chmod 命令的数字相同。
在以下示例中,ACL 项为用户 stacey 设置读写权限。
user:stacey:rw- |
仅 UFS 文件系统支持 UFS 文件系统属性,例如 ACL。因此,如果将具有 ACL 项的文件恢复或复制到 /tmp 目录(通常挂载为 TMPFS 文件系统)中,则这些 ACL 项将丢失。使用 /var/tmp 目录临时存储 UFS 文件。
下表列出了对文件设置 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。 |
除表 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(1) 手册页。
显示 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 权限保护文件。 | |
使用 ACL 保护文件 |
添加 ACL,以便在比 UNIX 权限更周密的级别上保护文件。 | |
防止系统受到来自文件的安全风险 |
查找具有可疑拥有权的可执行文件。禁用可能会破坏系统的文件。 |
以下任务列表说明列出文件权限、更改文件权限,以及使用特殊文件权限保护文件的过程。
任务 |
参考 |
---|---|
显示文件信息 | |
更改文件拥有权 | |
更改文件权限 |
使用 ls 命令显示有关目录中所有文件的信息。
在以下示例中,显示了 /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 . . . |
每一行按以下顺序显示了有关文件的信息:
文件的类型-例如,d。有关文件类型的列表,请参见文件和目录的拥有权。
权限-例如,r-xr-xr-x。有关说明,请参见文件和目录的拥有权。
硬链接数-例如,2。
文件的属主-例如,root。
文件的组-例如,bin。
文件的大小(以字节为单位)-例如,7696。
创建文件的日期或上次更改文件的日期-例如,Aug 18 15:20。
文件名-例如,mountall。
文件属主、主管理员角色或超级用户可以更改任何文件的拥有权。
显示文件的权限。
% ls -l example-file -rw-r--r-- 1 janedoe staff 112640 May 24 10:49 example-file |
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
更改文件的属主。
# chown stacey example-file |
检验文件的属主是否已更改。
# ls -l example-file -rw-r--r-- 1 stacey staff 112640 May 26 08:50 example-file |
安全注意事项-您应该有合理理由通过将 rstchown 变量设置为零来覆盖系统安全策略。访问系统的任何用户都可以更改系统中任何文件的拥有权。
在此示例中,在 /etc/system 文件中将 rstchown 变量的值设置为零。通过此设置,文件属主可以使用 chown 命令将文件的拥有权更改为另一用户。通过此设置,文件属主还可以使用 chgrp 命令将文件的组拥有权设置为非其所在的组。重新引导系统后,更改将生效。
set rstchown = 0 |
有关更多信息,请参见 chown(1) 和 chgrp(1) 手册页。
此外,请注意,已挂载 NFS 的文件系统对更改拥有权和组有更多限制。有关限制对已挂载 NFS 的系统的访问的更多信息,请参见《系统管理指南:网络服务》中的第 6 章 “访问网络文件系统(参考)”。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
$ chgrp scifi example-file |
有关设置组的信息,请参见《系统管理指南:基本管理》中的第 4 章 “管理用户帐户和组(概述)”。
检验文件的组拥有权是否已更改。
$ ls -l example-file -rw-r--r-- 1 stacey scifi 112640 June 20 08:55 example-file |
另请参见示例 6–2。
如果您不是文件或目录的属主,请成为超级用户或承担等效角色。
只有当前属主或超级用户可以使用 chmod 命令更改文件或目录的文件权限。
在符号模式下更改权限。
% chmod who operator permissions filename |
指定要更改其权限的用户。
指定要执行的操作。
指定要更改的权限。有关有效的符号列表,请参见表 6–5。
指定文件或目录。
检验文件的权限是否已更改。
% ls -l filename |
在以下示例中,将解除其他用户的读取权限。
% chmod o-r example-file1 |
在以下示例中,将为用户、组和其他用户添加读和执行权限。
$ chmod a+rx example-file2 |
在以下示例中,将为组指定读写和执行权限。
$ chmod g=rwx example-file3 |
如果您不是文件或目录的属主,请成为超级用户或承担等效角色。
只有当前属主或超级用户可以使用 chmod 命令更改文件或目录的文件权限。
在绝对模式下更改权限。
% chmod nnn filename |
按照该顺序指定将表示文件属主、文件组和其他用户的权限的八进制值。有关有效八进制值的列表,请参见表 6–4。
指定文件或目录。
使用 chmod 命令更改具有 ACL 项的文件的文件组权限时,文件组权限和 ACL 掩码都将更改为新权限。请注意,新 ACL 掩码权限可以更改在文件中具有 ACL 项的其他用户和组的权限。使用 getfacl 命令以确保为所有 ACL 项都设置了适当的权限。有关更多信息,请参见 getfacl(1) 手册页。
检验文件的权限是否已更改。
% ls -l filename |
在以下示例中,将公共目录的权限从 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 |
如果您不是文件或目录的属主,请成为超级用户或承担等效角色。
只有当前属主或具有超级用户功能的用户可以使用 chmod 命令更改文件或目录的特殊权限。
% chmod nnnn filename |
指定用于更改文件或目录的权限的八进制值。最左侧的八进制值设置文件的特殊权限。有关特殊权限的有效八进制值的列表,请参见表 6–6。
指定文件或目录。
使用 chmod 命令更改具有 ACL 项的文件的文件组权限时,文件组权限和 ACL 掩码都将更改为新权限。请注意,新 ACL 掩码权限可以更改在文件中具有 ACL 项的其他用户和组的权限。使用 getfacl 命令以确保为所有 ACL 项都设置了适当的权限。有关更多信息,请参见 getfacl(1) 手册页。
检验文件的权限是否已更改。
% ls -l filename |
在以下示例中,将对 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 |
% ls -l filename |
其中,filename 指定文件或目录。
在输出中,模式字段右侧的加号 (+) 表示该文件具有 ACL。
除非已添加了用于扩展 UNIX 文件权限的 ACL 项,否则会将文件视为具有“琐碎” ACL,并且不会显示加号 (+)。
在以下示例中,ch1.sgm 文件具有 ACL。ACL 由模式字段右侧的加号 (+) 表示。
% ls -l ch1.sgm -rwxr-----+ 1 stacey techpubs 167 Nov 11 11:13 ch1.sgm |
% setfacl -s user::perms,group::perms,other:perms,mask:perms,acl-entry-list filename ... |
设置文件的 ACL。如果文件已具有 ACL,则会替换该 ACL。此选项要求至少有 user::、group:: 和 other:: 项。
指定文件属主权限。
指定组属主权限。
为文件属主或组成员之外的用户指定权限。
指定 ACL 掩码的权限。掩码表示允许用户(属主除外)和组拥有的最大权限。
指定文件或目录中要为特定用户和组设置的一个或多个 ACL 项的列表。也可以设置目录的缺省 ACL 项。表 6–7 和表 6–8 显示了有效的 ACL 项。
指定要对其设置 ACL 的一个或多个文件或目录。多个 filename 由空格分隔。
如果该文件已存在 ACL,则 -s 选项将使用新的 ACL 替换整个 ACL。
有关更多信息,请参见 setfacl(1) 手册页。
% getfacl filename |
有关更多信息,请参见如何检查文件是否具有 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:--- |
通过重定向 getfacl 输出,将文件的 ACL 复制到另一个文件。
% getfacl filename1 | setfacl -f - filename2 |
指定将从其中复制 ACL 的文件。
指定要对其设置所复制的 ACL 的文件。
在以下示例中,会将 ch2.sgm 中的 ACL 复制到 ch3.sgm。
% getfacl ch2.sgm | setfacl -f - ch3.sgm |
在以下示例中,将用户 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 |
删除文件的 ACL 项。
% setfacl -d acl-entry-list filename ... |
删除指定的 ACL 项。
指定文件或目录中要删除的 ACL 项(未指定权限)的列表。只能删除特定用户和组的 ACL 项和缺省 ACL 项。表 6–7 和表 6–8 显示了有效的 ACL 项。
指定一个或多个文件或目录,由空格分隔。
或者,可以使用 setfacl -s 命令删除文件的所有 ACL 项,并使用所指定的新 ACL 项替换它们。
检验是否已删除文件的 ACL 项。
% getfacl filename |
在以下示例中,将从 ch4.sgm 文件中删除用户 anusha。
% setfacl -d user:anusha ch4.sgm |
% getfacl [-a | -d] filename ... |
显示指定文件或目录的文件名、文件属主、文件组和 ACL 项。
显示指定目录的文件名、文件属主、文件组和缺省 ACL 项(如果存在)。
指定一个或多个文件或目录,由空格分隔。
如果在命令行中指定多个文件名,则会在每两个 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:--- |
% 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 用户拥有的文件。 | |
防止可执行栈溢出 |
防止程序利用可执行栈。 | |
防止记录可执行栈消息 |
关闭记录可执行栈消息 |
应对系统中未经授权在程序中使用 setuid 和 setgid 权限的情况进行监视。使用 setuid 和 setgid 权限,普通用户可以获取超级用户功能。可疑可执行文件为用户而不是 root 或 bin 授予拥有权。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
使用 find 命令查找拥有 setuid 权限的文件
# find directory -user root -perm -4000 -exec ls -ldb {} \; >/tmp/filename |
检查以指定的 directory(可以是 root (/)、sys、 bin 或 mail)开头的所有挂载路径。
仅显示由 root 拥有的文件。
仅显示权限被设置为 4000 的文件。
以 ls -ldb 格式显示 find 命令的输出。
包含 find 命令的结果的文件。
在 /tmp/filename 中显示结果。
# more /tmp/filename |
有关 setuid 权限的背景信息,请参见setuid 权限。
以下示例的输出显示,名为 rar 的用户创建了一份 /usr/bin/sh 的个人副本,并将权限设置为 root 的 setuid。因此,/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 |
有关可执行栈的安全风险的说明,请参见防止可执行文件危及安全。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
set noexec_user_stack=1 |
重新引导系统。
# init 6 |
在此示例中,将禁止记录可执行栈消息,然后重新引导系统。
# cat /etc/system set noexec_user_stack=1 set noexec_user_stack_log=0 # init 6 |
本章介绍了如何使用自动安全性增强工具 (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 系列的一部分。
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,您需要对系统管理和系统组件有大致的了解。如果您是初级管理员,可以参阅其他 Solaris 系统管理文档。您可以参阅相关的手册页来学习 ASET 管理。
taskstat 实用程序用于标识已完成的任务,以及仍在运行的任务。每项完成的任务都会生成一个报告文件。有关 taskstat 实用程序的完整说明,请参阅 taskstat(1M)。
此任务会将系统文件的权限设置为指定的安全级别。此任务在安装系统时运行。如果您稍后决定更改先前建立的级别,请再次运行此任务。在低安全级别,权限会设置为适合于开放式信息共享环境的值。在中安全级别,会加强对权限的控制,以便为大多数环境提供足够高的安全性。在高安全级别,会控制权限以严格限制访问。
此任务对系统文件权限或参数设置所做的任何修改都会报告在 tune.rpt 文件中。有关 ASET 在设置权限时参考的文件的示例,请参见,请参见调优文件示例。
此任务会检查系统文件,并将每个文件与主文件中相应文件的说明进行比较。主文件是 ASET 首次运行此任务时创建的。主文件包含 checklist 针对指定安全级别执行的系统文件设置。
针对每种安全级别,将定义要检查其文件的目录的列表。可以使用缺省列表,也可以修改列表,以便针对每个级别指定不同的目录。
对于每个文件,会检查以下条件:
属主和组
权限位
大小以及校验和
链接数目
上次修改时间
ASET 发现的任何差异都会报告在 cklist.rpt 文件中。此文件包含将系统文件大小、权限及校验和的值与主文件进行比较的结果。
此任务会检查用户帐户和组的一致性和完整性。此任务使用 passwd 和 group 文件中的定义。此任务检查本地口令文件、NIS 口令文件或 NIS+ 口令文件,并报告 NIS+ 的口令文件问题,但不会进行更正。此任务将检查以下违规:
重复的名称或 ID
格式不正确的项
缺少口令的帐户
无效的登录目录
nobody 帐户
空的组口令
NIS 服务器或 NIS+ 服务器上的 /etc/passwd 文件中的加号 (+)
在执行此任务的过程中,ASET 会检查各种系统表,其中大多数系统表位于 /etc 目录中。这些文件包括:
/etc/default/login
/etc/hosts.equiv
/etc/inetd.conf
/etc/aliases
/var/adm/utmpx
/.rhosts
/etc/vfstab
/etc/dfs/dfstab
/etc/ftpd/ftpusers
ASET 会对这些文件执行各种检查和修改,并在 sysconf.rpt 文件中报告问题。
此任务会检查为超级用户和其他用户设置 PATH 和 UMASK 环境变量的方式,并检查 /.profile、/.login 和 /.cshrc 文件。
此任务会检查 eeprom 安全参数的值,以确保此参数设置在合适的安全级别。 可以将 eeprom 安全参数设置为 none、command 或 full。
ASET 不会更改此设置,但会在 eeprom.rpt 文件中报告其建议。
此任务确保系统可以安全地用作网络中继。此任务通过将专用系统设置为防火墙,保护内部网络不受外部公共网络的干扰,防火墙系统对此进行了说明。防火墙系统可分隔两个网络。在这种情况下,每个网络都作为不可信对象访问另一个网络。防火墙设置任务将禁止 Internet 协议 (Internet Protocol, IP) 包的转发。防火墙还会对外部网络隐藏路由信息。
防火墙任务可以在所有安全级别运行,但是仅在最高级别执行操作。如果要在高安全级别运行ASET,但发现系统不需要防火墙保护,则可以取消防火墙任务。可以通过编辑 asetenv 文件删除此任务。
所做的任何更改都会报告在 firewall.rpt 文件中。
无论 ASET 以交互方式运行还是在后台运行,它都会生成执行日志。缺省情况下,ASET 会生成标准输出形式的日志文件。执行日志可确认 ASET 是否在指定时间运行,并且还包含所有执行错误消息。aset -n 命令指示将日志通过电子邮件发送到指定的用户。有关 ASET 选项的完整列表,请参见 aset(1M) 手册页。
ASET running at security level low Machine=example; Current time = 0325_08:00 aset: Using /usr/aset as working directory Executing task list... firewall env sysconfig usrgrp tune cklist eeprom All tasks executed. Some background tasks may still be running. Run /usr/aset/util/taskstat to check their status: $/usr/aset/util/taskstat aset_dir Where aset_dir is ASET's operating directory, currently=/usr/aset When the tasks complete, the reports can be found in: /usr/aset/reports/latest/*.rpt You can view them by: more /usr/aset/reports/latest/*.rpt |
执行日志首先显示运行 ASET 的系统和时间。然后,执行日志会列出启动任务时的每项任务。
ASET 将针对这些任务中的每一项调用后台进程,这在ASET 任务列表中进行了说明。启动任务时,执行日志中会列出此任务。列出此任务并不意味着任务已完成。要检查后台任务的状态,请使用 taskstat 命令。
由 ASET 任务生成的所有报告文件都存储在 /usr/aset/reports 目录下的子目录中。本节介绍 /usr/aset/reports 目录的结构,并提供管理报告文件的指南。
ASET 将报告文件放在子目录中,这些子目录的名称可反映报告生成时间和日期。通过此约定,可以按顺序跟踪记录,这些记录用于在系统状态随 ASET 执行的不同而变化的过程中记载系统状态。可以监视和比较这些报告以确定系统安全的可靠性。
下图显示了 reports 目录结构的示例。
此示例说明了两个报告子目录。
0124_01:00
0125_01:00
子目录的名称指明了报告的生成日期和时间。每个报告子目录名称都具有以下格式:
monthdate_hour:minute |
month、date、hour 和 minute 都是两位数字。例如,0125_01:00 表示 1 月 25 日凌晨 1 点。
这两个报告子目录都包含执行一次 ASET 所生成的报告集合。
latest 目录是始终指向包含最新报告的子目录的符号链接。因此,要查看 ASET 生成的最新报告,可以转至 /usr/aset/reports/latest 目录。此目录中包含 ASET 在最近一次执行期间所执行的每项任务的报告文件。
每个报告文件都以生成此报告的任务命名。下表列出了各项任务及其报告。
表 7–1 ASET 任务和生成的报告
任务 |
报告 |
---|---|
系统文件权限调优 (tune) |
tune.rpt |
系统文件检查 (cklist) |
cklist.rpt |
用户和组检查 (usrgrp) |
usrgrp.rpt |
系统配置文件检查 (sysconf) |
sysconf.rpt |
环境变量检查 (env) |
env.rpt |
eeprom 检查 (eeprom) |
eeprom.rpt |
防火墙设置 (firewall) |
firewall.rpt |
每个报告文件中,消息括在开始标题行和结束标题行中。有时,任务会提前结束。例如,意外删除或损坏 ASET 的组件时,任务便会提前结束。在这类情况下,报告文件通常会在结尾附近包含一条消息,指明提前终止的原因。
*** Begin User and Group Checking *** Checking /etc/passwd ... Warning! Password file, line 10, no passwd :sync::1:1::/:/bin/sync ..end user check; starting group check ... Checking /etc/group... *** End User And group Checking *** |
初次运行或重新配置 ASET 之后,应该严密地检查报告文件。重新配置包括修改 asetenv 文件或 masters 子目录中的主文件,或者更改运行 ASET 的安全级别。
报告会记录在重新配置 ASET 时引起的所有错误。通过严密地查看报告,可以在出现问题时做出反应并解决问题。
在对报告文件监视一段时间(其间没有进行配置更改或系统更新)之后,您可能会发现报告的内容开始趋于稳定。如果报告包含的意外信息很少,可使用 diff 实用程序来比较这些报告。
ASET 的主文件 tune.high、tune.low 、tune.med 和 uid_aliases 位于 /usr/aset/masters 目录中。ASET 使用这些主文件来定义安全级别。有关更多详细信息,请参见 asetmasters(4) 手册页。
tune.low、tune.med 和 tune.high 主文件用于定义可用的 ASET 安全级别。这些文件可指定系统文件在每个级别的属性,用于比较和参考。
uid_aliases 文件包含共享同一用户 ID (user ID, UID) 的多个用户帐户的列表。通常,由于这种做法降低了可说明性,因此 ASET 会针对此类多个用户帐户发出警告。您可以通过在 uid_aliases 文件中列出例外情况来允许此规则存在例外。如果 uid_aliases 文件中指定了具有重复 UID 的项,则 ASET 不会在 passwd 文件中报告这些项。
请避免使多个用户帐户共享同一 UID。您应该考虑使用其他方法来实现目标。例如,如果要让多个用户共享一个权限集,则可以创建一个组帐户。您还可以创建角色。仅当其他方法都无法实现目标时,才应使用共享 UID 这一方法。
可以使用 UID_ALIASES 环境变量来指定备用的别名文件。缺省文件为 /usr/aset/masters/uid_aliases。
系统文件检查所使用的主文件在首次执行 ASET 时生成,也可在更改安全级别之后运行 ASET 时生成。
CKLISTPATH_LOW
CKLISTPATH_MED
CKLISTPATH_HIGH
环境文件 asetenv 包含影响 ASET 任务的环境变量的列表。可以更改其中一些变量来修改 ASET 操作。有关 asetenv 文件的详细信息,请参见 asetenv(4)。
本节介绍了如何配置 ASET,还介绍了 ASET 的运行环境。
ASET 所需的管理和配置操作最少。在大多数情况下,可以使用缺省值运行 ASET。但是,也可以微调某些影响 ASET 操作和行为的参数,以便最大程度发挥此工具的优点。更改缺省值之前,应了解 ASET 如何运行以及它如何影响系统组件。
ASET 依靠四个配置文件来控制其任务的行为:
/usr/aset/asetenv
/usr/aset/masters/tune.low
/usr/aset/masters/tune.med
/usr/aset/masters/tune.high
用户可配置的环境变量部分
内部环境变量部分
您可以更改用户可配置的参数部分。但是,内部环境变量部分中的设置仅供内部使用,不应修改这些设置。
您可以编辑用户可配置部分中的各项以执行以下操作:
选择要运行的任务
指定系统文件检查任务的目录
安排 ASET 执行
指定 UID 别名文件
将检查扩展到 NIS+ 表
ASET 执行的每项任务都会监视系统安全的特定方面。在大多数系统环境中,必须执行所有任务以便在各方面都可保证安全性。但是,您可能会决定删除一项或多项任务。
例如,防火墙任务可以在所有安全级别下运行,但是仅在高安全级别下执行操作。您可能希望在高安全级别运行 ASET,但是不需要防火墙保护。
可以将 ASET 设置为在没有防火墙功能的情况下在高安全级别运行。为此,可编辑 asetenv 文件中的环境变量的 TASKS 列表。缺省情况下,TASKS 列表包含所有的 ASET 任务。要删除某项任务,请从此文件中删除与此任务相关的环境变量。在这种情况下,可从列表中删除 firewall 环境变量。下次运行 ASET 时,便不会执行已排除的任务。
以下示例显示了包含所有 ASET 任务的 TASKS 列表。
TASKS=”env sysconfig usrgrp tune cklist eeprom firewall” |
系统文件检查会检查选定系统目录中的文件属性。可以使用以下环境变量来定义要检查的目录。
CKLISTPATH_LOW 变量定义要在低安全级别检查的目录。CKLISTPATH_MED 和 CKLISTPATH_HIGH 环境变量可分别在中安全级别和高安全级别实现类似的功能。
环境变量在较低安全级别定义的目录列表应该是在下一个较高级别定义的目录列表的子集。例如,为 CKLISTPATH_LOW 指定的所有目录应该包括在 CKLISTPATH_MED 中。同样,为 CKLISTPATH_MED 指定的所有目录应该包括在 CKLISTPATH_HIGH 中。
针对这些目录执行的检查并不是递归的。ASET 仅检查在环境变量中显式列出的那些目录,而不检查其子目录。
可以编辑这些环境变量定义,以添加或删除需要 ASET 检查的目录。请注意,这些核对表仅适用于通常不会每日更改的系统文件。例如,用户的起始目录通常动态地频繁更新,因此不适合选择用作核对表的目录。
您可以交互地启动 ASET,也可以使用 -p 选项来请求 ASET 任务在预定时间运行。您可以定期在系统需求较少时运行 ASET。例如,ASET 可参阅 PERIODIC_SCHEDULE 来确定执行 ASET 任务的频率以及运行这些任务的时间。有关设置 ASET 使其定期运行的详细说明,请参见如何定期运行 ASET。
PERIODIC_SCHEDULE 的格式遵循 crontab 项的格式。有关完整信息,请参见 crontab(1)。
UID_ALIASES 变量可指定用于列出共享 UID 的别名文件。缺省文件为 /usr/aset/masters/uid_aliases。
YPCHECK 环境变量可指定 ASET 是否也应该检查系统配置文件表。YPCHECK 为布尔变量。 只能将 YPCHECK 指定为 true 或 false。缺省值为 false,它将禁用 NIS+ 表检查。
要了解此环境变量如何运行,请考虑其对 passwd 文件的影响。设置为 false 时,ASET 会检查本地 passwd 文件。如果设置 true,此任务还将检查系统域的 NIS+ passwd 表。
尽管 ASET 会自动修复本地文件,但是 ASET 仅报告 NIS+ 表中的潜在问题,而不会更改这些表。
ASET 使用三个主调优文件 tune.low、tune.med 和 tune.high 来放松或加强对关键系统文件的访问。这些主文件位于 /usr/aset/masters 目录中。可以修改这些文件以适合您的环境。有关示例,请参见调优文件示例。
tune.low 文件可将权限设置为适合于缺省系统设置的值。tune.med 文件可进一步限制这些权限。tune.med 文件还包括 tune.low 中没有的项。tune.high 文件可更进一步限制这些权限。
可以通过添加或删除文件项来修改调优文件中的设置。无法有效地将权限设置为比当前设置限制少的值。除非将系统安全降至更低的级别,否则 ASET 任务不会放松权限。
首次执行 ASET 时,ASET 会保存并归档初始系统文件。aset.restore 实用程序可重新恢复这些文件。如果当前安排 ASET 定期执行,则此实用程序还会取消对 ASET 的安排。aset.restore 命令位于 ASET 操作目录 /usr/aset 中。
运行 aset.restore 命令时,对系统文件所做的更改会丢失。
应在以下情况下使用 aset.restore 命令:
要删除 ASET 更改并恢复初始系统。
如果先前已将 aset 命令添加到根目录的 crontab,则要永久取消激活 ASET 时,可以从 cron 调度中删除 ASET。有关如何使用 cron 删除自动执行的任务的说明,请参见如何停止定期运行 ASET。
试用 ASET 一段时间后,希望恢复初始系统状态。
某些主要系统功能没有正常运行,并且您怀疑问题是由 ASET 引起时。
一般情况下,ASET 在单机模式下使用,即使在网络所包含的系统中也是如此。作为独立系统的系统管理员,您要负责系统的安全。因此,您将负责运行和管理 ASET 以保护系统。
您还可以在 NFS 分布式环境中使用 ASET。作为网络管理员,您要负责为所有客户机安装、运行和管理各种管理任务。为了便于在多个客户机系统中进行 ASET 管理,可以对全局应用于所有客户机的配置进行更改。通过全局应用更改,无需登录到每个系统即可重复配置更改。
决定如何在联网系统中设置 ASET 时,应该考虑希望谁来控制安全性。您可能希望用户控制其各自系统的部分安全性,还可能希望集中负责安全控制。
要设置多个网络配置时可能会出现这种情况。例如,您可能要为那些指定为低安全级别的客户机设置一种配置,为中级别的客户机设置一种配置,为高级别的客户机设置另一种配置。
如果需要为每种安全级别创建单独的 ASET 网络配置,可以在服务器上创建三种 ASET 配置,为每种级别创建一种配置。可以将每种配置导出到具有相应安全级别的客户机中。对于所有三种配置都相同的某些 ASET 组件可使用链接来共享。
您不仅可以在服务器上集中 ASET 组件,还可以在服务器上设置中央目录以收集所有的 ASET 报告。具有或不具有超级用户权限的客户机均可访问此服务器。有关设置收集机制的说明,请参见如何在服务器上收集 ASET 报告。
通过在服务器上设置报告收集,可以从一个位置查看所有客户机的报告。无论客户机是否具有超级用户权限,都可以使用此方法。或者,如果要用户监视自己的 ASET 报告,可以将报告目录保留在本地系统上。
指定 ASET 工作目录
指定安全级别
指定定期安排
指定要运行的 ASET 任务
指定别名文件
确定是否将检查扩展到 NIS 映射和 NIS+ 表
低安全级别的目录列表
中安全级别的目录列表
高安全级别的目录列表
以下各节中列出的环境变量位于 /usr/aset/asetenv 文件中。ASETDIR 和 ASETSECLEVEL 变量为可选变量。这些变量只能使用 /usr/aset/aset 命令通过 shell 来设置。其他环境变量可以通过编辑此文件来设置。
从 C shell 中,键入:
% setenv ASETDIR pathname |
从 Bourne shell 或 Korn shell 中,键入:
$ ASETDIR=pathname $ export ASETDIR |
将 pathname 设置为 ASET 工作目录的全路径名。
ASETSECLEVEL 变量指定执行 ASET 任务的安全级别。
从 C shell 中,键入:
% setenv ASETSECLEVEL level |
从 Bourne shell 或 Korn shell 中,键入:
$ ASETSECLEVEL=level $ export ASETSECLEVEL |
在这些命令中,可以将 level 设置为以下各项之一:
低安全级别
中安全级别
高安全级别
PERIODIC_SCHEDULE 的值与 crontab 文件遵循相同的格式。将变量值指定为用双引号引起的五个字段的字符串,其中各个字段用一个空格分隔:
"minutes hours day-of-month month day-of-week" |
以(整小时数之后经过的)分钟数 (0-59) 和小时数 (0-23) 指定开始时间。
指定应该运行 ASET 的月日期,值的范围为 1-31。
指定应该运行 ASET 的月份,值的范围为 1-12。
指定应该运行 ASET 的周日期,值的范围为 0-6。星期天为 0 日。
为 ASET 创建定期安排时,可应用以下规则:
可以为任何字段指定值的列表,各个值用逗号分隔。
可以将值指定为数字,也可以将值指定为一个范围。范围是由连字符连接的一对数字。范围表明了 ASET 任务应该在此范围所包括的所有时间执行。
如果使用 PERIODIC_SCHEDULE 变量的缺省项,则 ASET 每天在午夜 12:00 执行:
PERIODIC_SCHEDULE=”0 0 * * *” |
TASKS 变量用于列出 ASET 所执行的任务。缺省设置为列出所有七项任务:
TASKS=”env sysconfig usrgrp tune cklist eeprom firewall” |
UID_ALIASES 变量用于指定别名文件。如果存在,则 ASET 会参阅此文件以获取允许的多个别名的列表。别名格式为 UID_ALIASES=pathname,其中 pathname 为别名文件的全路径名。
缺省设置如下:
UID_ALIASES=${ASETDIR}/masters/uid_aliases |
YPCHECK 变量用于将检查系统表的任务扩展到包括 NIS 或 NIS+ 表。YPCHECK 变量为布尔变量,可以设置为 true 或 false。
缺省设置为 false,表示将检查限定在本地系统表:
YPCHECK=false |
三个核对表路径变量用于列出系统文件检查任务要检查的目录。缺省情况下,将设置以下变量定义。这些定义说明了不同级别变量之间的关系:
CKLISTPATH_LOW=${ASETDIR}/tasks:${ASETDIR}/util:${ASETDIR}/masters:/etc CKLISTPATH_MED=${CKLISTPATH_LOW}:/usr/bin:/usr/ucb CKLISTPATH_HIGH=${CKLISTPATH_MED}:/usr/lib:/sbin:/usr/sbin:/usr/ucblib |
核对表路径环境变量的值类似于 shell 路径变量的值。与 shell 路径变量相同,核对表路径环境变量也是目录名称的列表。这些目录名称用冒号分隔。您可以使用等号 (=) 将变量名称与其值相连。
本节介绍一些 ASET 文件的示例,包括调优文件和别名文件。
ASET 可维护三个调优文件。调优文件中的每项都占用一行。每项中的字段按以下顺序排列:
pathname mode owner group type |
文件的全路径名
用于表示权限设置的五位数
文件的属主
文件的组属主
文件的类型
可在路径名中使用常规的 shell 通配符(例如星号 (*) 和问号 (?)),以便引用多个路径。有关更多信息,请参见 sh(1)。
mode 表示限制最少的值。如果当前设置已经比指定值的限制多,则 ASET 不会放松权限设置。例如,如果指定的值为 00777,则权限保持不变,因为 00777 始终比当前设置的限制少。
此过程说明 ASET 如何处理模式设置。如果降低安全级别或删除 ASET,则此过程有所不同。从先前执行时的级别降低安全级别时,或是要将系统文件恢复到首次执行 ASET 之前的状态时,ASET 可识别正在执行的操作并降低保护级别。
必须使用 owner 和 group 的名称,而不是使用数字 ID。
可以使用问号 (?) 来代替 owner、group 和 type,以防止 ASET 更改这些参数的现有值。
type 可以是 symlink、目录或文件。symlink 是符号链接。
较高安全级别的调优文件可将文件权限重置为至少与较低级别的文件权限具有相同限制。另外,在较高的安全级别,还会向列表中添加其他文件。
一个文件可以与多个调优文件项相匹配。例如,etc/passwd 与 etc/pass* 和 /etc/* 项相匹配。
如果两个项具有不同权限,则文件权限将设置为限制性最高的值。在以下示例中, /etc/passwd 文件的权限设置为 00755,这是 00755 和 00770 中限制性较高的值。
/etc/pass* 00755 ? ? file /etc/* 00770 ? ? file |
如果两个项指定的 owner 或 group 不同,则后一项优先级更高。在以下示例中,/usr/sbin/chroot 的属主设置为 root。
/usr/sbin/chroot 00555 bin bin file /usr/sbin/chroot 00555 root bin file |
每项都具有如下格式:
uid=alias1 =alias2=alias3=...
共享的 UID。
共享一个 UID 的用户帐户。
例如,以下项列出了 UID 0。sysadm 和 root 帐户共享此 UID:
0=root=sysadm
任务 |
说明 |
参考 |
---|---|---|
从命令行运行 ASET |
以指定的 ASET 级别保护系统。查看执行日志可了解更改。 | |
按固定间隔以批处理模式运行 ASET |
设置 cron(时钟守护进程)作业以确保 ASET 保护系统。 | |
停止以批处理模式运行 ASET |
删除 ASET cron 作业。 | |
将 ASET 报告存储在服务器上 |
收集来自客户机的 ASET 报告以便集中进行监视。 |
要设置 ASET 中的变量,请参见ASET 环境变量。要配置 ASET,请参见配置 ASET。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见配置 RBAC(任务列表)。
使用 aset 命令交互运行 ASET。
# /usr/aset/aset -l level -d pathname |
指定安全级别。有效值为 low、medium 或 high。缺省设置为 low。有关安全级别的详细信息,请参见ASET 安全级别。
指定 ASET 的工作目录。缺省设置为 /usr/aset。
查看屏幕上显示的 ASET 执行日志,验证 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 |
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见配置 RBAC(任务列表)。
如有必要,设置希望 ASET 定期运行的时间。
应该在系统需求较少时运行 ASET。/usr/aset/asetenv 文件中的 PERIODIC_SCHEDULE 环境变量用于设置 ASET 的定期运行时间。缺省情况下,时间设置为每天午夜。
如果希望设置其他时间,请编辑 /usr/aset/asetenv 文件中的 PERIODIC_SCHEDULE 变量。有关设置 PERIODIC_SCHEDULE 变量的详细信息,请参见PERIODIC_SCHEDULE 环境变量。
# /usr/aset/aset -p |
-p 选项可在 crontab 文件中插入一行,使 ASET 在 /usr/aset/asetenv 文件中的 PERIODIC_SCHEDULE 环境变量确定的时间开始运行。
显示 crontab 项以检验安排 ASET 运行的时间。
# crontab -l root |
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
编辑 crontab 文件。
# crontab -e root |
删除 ASET 项。
保存更改并退出。
显示 crontab 项,检验 ASET 项是否已删除。
# crontab -l root |
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
在服务器上设置目录:
转到 /usr/aset 目录。
mars# cd /usr/aset |
创建 rptdir 目录。
mars# mkdir rptdir |
转到 rptdir 目录并创建 client_rpt 目录。
此步骤可为客户机创建 client_rpt 子目录。对于每台需要收集报告的客户机,请重复此步骤。
mars# cd rptdir mars# mkdir client_rpt |
在以下示例中,创建了目录 all_reports 以及子目录 pluto_rpt 和 neptune_rpt。
mars# cd /usr/aset mars# mkdir all_reports mars# cd all_reports mars# mkdir pluto_rpt mars# mkdir neptune_rpt |
将 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 |
使 dfstab 文件中的资源可供客户机使用。
# shareall |
在每台客户机上,在挂载点 /usr/aset/masters/reports 上挂载服务器中的客户机子目录。
# mount server:/usr/aset/client_rpt /usr/aset/masters/reports |
编辑 /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 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.
原因:安全级别未定义或者定义错误。仅有值 low、med 或 high 可以接受。
解决方法:使用 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 项。