本章介绍用于控制可以访问 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 |