本部分讨论可以在非联网系统上或两个系统之间配置的验证服务。要配置经过验证的用户和系统的网络,请参见第 6 部分, Kerberos 服务。
本章介绍有关如何使用安全 RPC 通过 NFS 挂载来验证主机和用户的信息。以下是本章中的主题列表:
安全 RPC(Remote Procedure Call,远程过程调用)使用验证机制保护远程过程。Diffie-Hellman 验证机制可验证发出服务请求的主机和用户。此验证机制使用数据加密标准 (Data Encryption Standard, DES) 加密。使用安全 RPC 的应用程序包括 NFS 和名称服务(NIS 和 NIS+)。
NFS 可使多台主机通过网络共享文件。在 NFS 服务中,一台服务器可为多台客户机保存数据和资源。这些客户机具有访问服务器与客户机共享的文件系统的权限。登录到客户机系统的用户可以通过从服务器挂载文件系统来访问文件系统。对于客户机系统上的用户,就好像这些文件是客户机的本地文件。NFS 的一种最常见的用途是允许将系统安装在办公室中,同时将所有用户文件存储在中心位置。NFS 服务的某些功能(例如 mount 命令的 -nosuid 选项)可用于禁止未经授权的用户打开设备和文件系统。
NFS 服务使用安全 RPC 来验证通过网络发出请求的用户。此过程称为安全 NFS。Diffie-Hellman 验证机制 AUTH_DH 使用 DES 加密来确保授权访问。 AUTH_DH 机制也称为 AUTH_DES。 详细信息,请参见以下内容:
要设置和管理安全 NFS,请参见《系统管理指南:网络服务》中的“管理安全 NFS 系统”。
要设置 NIS+ 表以及在 cred 表中输入名称,请参见《System Administration Guide: Naming and Directory Services (NIS+)》。
有关涉及 RPC 验证的事务的概述,请参见Diffie-Hellman 验证的实现。
数据加密标准 (Data Encryption Standard, DES) 加密功能使用 56 位密钥来加密数据。如果两个凭证用户或主体知道同一 DES 密钥,则他们可以通过使用此密钥加密和解密文本来进行秘密通信。DES 是一种相对迅速的加密机制。DES 芯片可使加密更迅速。但是,如果不存在此芯片,则将替换软件实现。
仅使用 DES 密钥的风险是入侵者可以收集足够的使用相同密钥加密的加密文本消息,从而能够获取密钥并对这些消息进行解密。因此,安全系统(例如安全 NFS)需要经常更改密钥。
Kerberos 是 MIT(麻省理工学院)开发的验证系统。Kerberos 中的某些加密基于 DES。Kerberos V4 支持不再作为安全 RPC 的一部分提供。但是,此发行版中包括使用 RPCSEC_GSS 的 Kerberos V5 客户端和服务器端实现。有关更多信息,请参见第 20 章,Kerberos 服务介绍。
入侵者很难破解用于验证用户的 Diffie-Hellman (DH) 方法。客户机和服务器都有自己的私钥,它们将此私钥与公钥一起使用以设计公用密钥。私钥也称为密钥。客户机和服务器使用公用密钥来相互通信。公用密钥使用公认的加密功能(例如 DES)进行加密。
验证基于发送系统使用公用密钥加密当前时间的能力。然后,接收系统可以进行解密,并根据其当前时间进行检查。客户机和服务器上的时间必须同步。有关更多信息,请参见《系统管理指南:网络服务》中的“管理网络时间协议(任务)”。
公钥和私钥存储在 NIS 或 NIS+ 数据库中。NIS 将密钥存储在 publickey 映射中。NIS+ 将密钥存储在 cred 表中。这些文件包含所有潜在用户的公钥和私钥。
系统管理员负责设置 NIS 映射或 NIS+ 表,以及为每个用户生成公钥和私钥。将使用用户口令以加密格式存储私钥。此过程使得私钥只对此用户公开。
本节介绍客户机-服务器会话中使用 Diffie-Hellman 验证 (AUTH_DH) 的系列事务。
执行事务之前,管理员会运行 newkey 或 nisaddcred 命令来生成公钥和密钥。每个用户都拥有唯一的公钥和密钥。公钥存储在公共数据库中。密钥以加密格式存储在同一数据库中。chkey 命令可更改密钥对。
通常,登录口令与安全 RPC 口令相同。在这种情况下,不需要 keylogin 命令。但是,如果口令不同,则用户必须登录,然后运行 keylogin 命令。
keylogin 命令提示用户键入安全 RPC 口令。此命令然后使用口令对密钥进行解密。随后,keylogin 命令将解密的密钥传递到 keyserver 程序。keyserver 是一种在每台计算机上都有本地实例的 RPC 服务。keyserver 会保存解密的密钥,并等待用户使用服务器启动安全 RPC 事务。
如果登录口令与 RPC 口令相同,则登录进程会将密钥传递到 keyserver。如果要求不同的口令,则用户必须始终运行 keylogin 命令。如果 keylogin 命令包括在用户的环境配置文件(例如 ~/.login、~/.cshrc 或 ~/.profile 文件)中,则用户登录时便会自动运行 keylogin 命令。
keyserver 随机生成一个对话密钥。
内核使用此对话密钥以及其他材料对客户机的时间标记进行加密。
keyserver 在公钥数据库中查找服务器的公钥。有关更多信息,请参见 publickey(4) 手册页。
keyserver 使用客户机的密钥以及服务器的公钥来创建一个公用密钥。
keyserver 使用此公用密钥对此对话密钥进行加密。
然后,会将包含加密的时间标记和对话密钥的传输内容发送到服务器。此传输内容包括凭证和检验器。此凭证包含三个组件:
客户机的网络名称
使用公用密钥加密的对话密钥
使用对话密钥加密的“窗口”
此窗口显示客户机允许服务器时钟与客户机时间标记之间存在的时间差异。如果服务器时钟与时间标记之间的差异大于此窗口显示的值,则服务器会拒绝客户机的请求。正常情况下,不会出现这种拒绝,因为客户机在启动 RPC 会话之前会先与服务器进行同步。
加密的时间标记
按 1 递减的指定窗口的已加密检验器
如果某人要模拟用户,则会需要窗口检验器。模拟者可以编写一个程序,从而只需插入随机位,而无需填写凭证和检验器的已加密字段。服务器将对话密钥解密为某一随机密钥。然后,服务器使用此密钥尝试对窗口和时间标记进行解密。结果是随机数字。但是,经过几千次尝试之后,随机窗口/时间标记对可能会通过验证系统。窗口检验器可降低假凭证通过验证的可能性。
服务器从客户机接收传输内容时,将发生以下情况:
服务器的本地 keyserver 在公钥数据库中查找客户机的公钥。
keyserver 使用客户机的公钥以及服务器的密钥来推导公用密钥。此公用密钥与客户机计算所得的公用密钥相同。只有服务器和客户机才能计算公用密钥,因为此计算过程需要知道其中一个密钥。
内核使用公用密钥对此对话密钥进行解密。
内核调用 keyserver 以使用解密的对话密钥对客户机的时间标记进行解密。
服务器对客户机的时间标记进行解密之后,将在凭证表中存储四个信息项:
客户机的计算机名称
对话密钥
窗口
客户机的时间标记
服务器存储前三项供将来使用,存储客户机的时间标记以防止重放。服务器只接受时间上晚于最新时间标记的时间标记。因此,可保证拒绝任何重放的事务。
调用方的名称将隐含在这些事务中,此调用方必须通过某种方式进行验证。keyserver 不能使用 DES 验证来验证调用方,因为 keyserver 使用 DES 时会导致死锁。为了避免死锁,keyserver 将通过用户 ID (user ID, UID) 来存储密钥,并且只将请求授予本地 root 进程。
服务器在其凭证高速缓存中记录的索引 ID
减 1 的客户机时间标记(由对话密钥加密)
从客户机的时间标记中减 1 的原因是确保此时间标记已过时。过时的时间标记不能再用作客户机检验器。
客户机将接收检验器并验证服务器。客户机知道只有服务器才能发送检验器,因为只有服务器知道客户机发送的时间标记。
对于第一个事务之后的每一个事务,客户机都在其下一个事务中将索引 ID 返回到服务器。客户机还发送另一个加密的时间标记。服务器会将使用对话密钥加密的减 1 的客户机时间标记发送回来。
以下任务列表说明为 NIS、NIS+ 和 NFS 配置安全 RPC 的过程。
任务 |
说明 |
参考 |
---|---|---|
1. 启动 keyserver。 |
确保可以创建密钥以对用户进行验证。 | |
2. 在 NIS+ 主机上设置凭证。 |
确保主机上的 root 用户可以在 NIS+ 环境中进行验证。 | |
3. 为 NIS+ 用户提供密钥。 |
使用户可以在 NIS+ 环境中进行验证。 | |
4. 在 NIS 主机上设置凭证。 |
确保主机上的 root 用户可以在 NIS 环境中进行验证。 | |
5. 为 NIS 用户提供密钥。 |
使用户可以在 NIS 环境中进行验证。 | |
6. 通过验证共享 NFS 文件。 |
使 NFS 服务器可以使用验证来安全地保护共享的文件系统。 |
通过要求对已挂载 NFS 文件系统的使用进行验证,可以增强网络的安全性。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
# svcs \*keyserv\* STATE STIME FMRI disabled Dec_14 svc:/network/rpc/keyserv |
# svcadm enable network/rpc/keyserv |
应该针对 NIS+ 域中的每个主机执行此过程。以 root 身份运行 keylogin 命令之后,服务器便会具有 mech_dh 的 GSS-API 接收器凭证,而客户机具有 GSS-API 启动器凭证。
有关 NIS+ 安全性的详细说明,请参见《System Administration Guide: Naming and Directory Services (NIS+)》。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
在名称服务中启用 publickey 表。
将以下行添加到 /etc/nsswitch.conf 文件中:
publickey: nisplus |
初始化 NIS+ 客户机。
# nisinit -cH hostname |
其中,hostname 是其表中包含客户机系统项的受信任 NIS+ 服务器的名称。
键入以下命令:
# nisaddcred local # nisaddcred des |
使用 keylogin 命令检验此设置。
# keylogin Password: |
以下示例使用主机 pluto 将 earth 设置为 NIS+ 客户机。您可以忽略警告。系统将接受 keylogin 命令,检验 earth 是否已正确设置为安全 NIS+ 客户机。
# nisinit -cH pluto NIS Server/Client setup utility. This system is in the example.com. directory. Setting up NIS+ client ... All done. # nisaddcred local # nisaddcred des DES principal name : unix.earth@example.com Adding new key for unix.earth@example.com (earth.example.com.) Network password:<键入口令> Warning, password differs from login password. Retype password: <重新键入口令> # keylogin Password: <键入口令> # |
应该针对 NIS+ 域中的每个用户执行此过程。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
键入以下命令:
# nisaddcred -p unix.UID@domain-name -P username.domain-name. des |
请注意,在这种情况下,username.domain-name 必须以点 (.) 结束。
通过以客户身份登录并键入 keylogin 命令来检验此设置。
在以下示例中,将为用户 jdoe 提供 Diffie-Hellman 验证密钥。
# nisaddcred -p unix.1234@example.com -P jdoe.example.com. des DES principal name : unix.1234@example.com Adding new key for unix.1234@example.com (jdoe.example.com.) Password: <键入口令> Retype password:<重新键入口令> # rlogin rootmaster -l jdoe % keylogin Password: <键入口令> % |
应该针对 NIS 域中的每个主机执行此过程。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
在名称服务中启用 publickey 映射。
将以下行添加到 /etc/nsswitch.conf 文件中:
publickey: nis |
# newkey -h hostname |
其中,hostname 是客户机的名称。
在以下示例中,会将 earth 设置为安全 NIS 客户机。
# newkey -h earth Adding new key for unix.earth@example.com New Password: <键入口令> Retype password:<重新键入口令> Please wait for the database to get updated... Your new key has been successfully stored away. # |
应该针对 NIS 域中的每个用户执行此过程。
只有系统管理员在登录到 NIS 主服务器时才能为用户生成新密钥。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
为用户创建新密钥。
# newkey -u username |
其中,username 是用户的名称。系统将提示键入口令。您可以键入通用口令。将使用此通用口令以加密格式存储私钥。
此命令允许用户使用只有其自己知道的口令重新加密其私钥。
可以使用 chkey 命令为用户创建新密钥对。
在此示例中,超级用户将设置密钥。
# newkey -u jdoe Adding new key for unix.12345@example.com New Password: <键入口令> Retype password:<重新键入口令> Please wait for the database to get updated... Your new key has been successfully stored away. # |
% chkey -p Updating nis publickey database. Reencrypting key for unix.12345@example.com Please enter the Secure-RPC password for jdoe:<键入口令> Please enter the login password for jdoe: <键入口令> Sending key change request to centralexample... |
此过程通过要求访问验证来保护 NFS 服务器上的共享文件系统。
必须在网络中启用 Diffie-Hellman 公钥验证。要在网络中启用验证,请执行以下操作之一:
成为超级用户或承担拥有系统管理配置文件的角色。
系统管理员角色拥有系统管理配置文件。要创建该角色并将其指定给用户,请参见配置 RBAC(任务列表)。
在 NFS 服务器上,通过 Diffie-Hellman 验证共享文件系统。
# share -F nfs -o sec=dh /filesystem |
其中,filesystem 是要共享的文件系统。
-o sec=dh 选项意味着现在需要通过 AUTH_DH 验证来访问文件系统。
在 NFS 客户机上,通过 Diffie-Hellman 验证挂载文件系统。
# mount -F nfs -o sec=dh server:filesystem mount-point |
共享 filesystem 的系统的名称
共享的文件系统的名称,例如 opt
挂载点的名称,例如 /opt
-o sec=dh 选项通过 AUTH_DH 验证挂载文件系统。
本章介绍可插拔验证模块 (Pluggable Authentication Module, PAM) 框架。PAM 提供了一种向 Solaris 操作系统 (Solaris Operating System, Solaris OS) 中“插入”验证服务的方法。PAM 会在访问系统时为多项验证服务提供支持。
使用可插拔验证模块 (Pluggable Authentication Module, PAM) 框架,可以“插入”新的验证服务,而无需更改系统登录服务,例如 login、ftp 和 telnet。还可以使用 PAM 将 UNIX 登录与其他安全机制(如 Kerberos)进行集成。也可以使用此框架来“插入”帐户、凭证、会话以及口令管理的机制。
使用 PAM 框架,可以为用户验证配置系统登录服务(如 ftp、login、telnet 或 rsh)。PAM 提供的一些益处如下所示:
灵活的配置策略
按应用程序的验证策略
选择缺省验证机制的功能
在高安全性系统中要求提供多个口令的功能
易于最终用户使用
如果对于不同的验证服务口令都相同,则无需重新键入口令
可以提示用户输入多个验证服务的口令,而无需用户键入多个命令
可以将可选选项传送到用户验证服务
可以实现特定于站点的安全策略,而无需更改系统登录服务
PAM 软件由一个库、各种服务模块以及一个配置文件组成。其中还包括可利用这些 PAM 接口的 Solaris 命令或守护进程。
下图说明了系统登录应用程序、PAM 库、pam.conf 文件和 PAM 服务模块之间的关系。
系统登录应用程序(如 ftp、telnet 和 login)使用 PAM 库来调用配置策略。配置策略在 pam.conf 文件中定义。pam.conf 文件定义要使用的模块,以及每个应用程序使用这些模块的顺序。模块中的结果基于模块响应和已配置的控制标志。这些结果通过库传送回应用程序。
PAM 框架提供了一种使用堆叠借助多项服务来验证用户的方法。根据配置,系统可以提示用户输入每种验证方法的口令。验证服务的使用顺序通过 PAM 配置文件确定。
PAM 库可提供框架以装入相应模块和管理堆叠过程。PAM 库提供了一种可在其中插入所有模块的通用结构。有关更多信息,请参见 pam_sm(3PAM) 手册页。
Solaris 10 发行版对可插拔验证模块 (Pluggable Authentication Module, PAM) 框架做了以下更改:
现在,pam_authtok_check 模块允许使用 /etc/default/passwd 文件中的新可调参数执行严格的口令检查。这些新参数定义以下各项:
用逗号分隔的字典文件列表,这些字典文件用于检查口令中的常用字典字
新口令与旧口令之间所需的最小差别
新口令中必须用到的字母字符或非字母字符的最少个数
新口令中必须用到的大写字母或小写字母的最少个数
允许的连续重复字符的个数
pam_unix_auth 模块可针对本地用户实现帐户锁定。帐户锁定通过 /etc/security/policy.conf 中的 LOCK_AFTER_RETRIES 参数以及 /etc/user_attr 中的 lock_after-retries 密钥启用。有关更多信息,请参见 policy.conf(4) 和 user_attr(4) 手册页。
定义了一个新的 binding 控制标志。此控制标志在 pam.conf(4) 手册页和PAM 控制标志中进行了介绍。
pam_unix 模块已删除,并替换为一组等效或功能更强的服务模块。Solaris 9 发行版已引入其中的许多模块。替换模块列表如下:
pam_authtok_check
pam_authtok_get
pam_authtok_store
pam_dhkeys
pam_passwd_auth
pam_unix_account
pam_unix_auth
pam_unix_cred
pam_unix_session
pam_unix_auth 模块的功能已分解为两个模块。现在,pam_unix_auth 模块可以检验用户的口令是否正确。新的 pam_unix_cred 模块可提供建立用户凭证信息的功能。
对 pam_krb5 模块进行扩充是为了使用 PAM 框架来管理 Kerberos 凭证高速缓存。
添加了新的 pam_deny 模块。此模块可用于拒绝对服务的访问。缺省情况下,不使用 pam_deny 模块。有关更多信息,请参见 pam_deny(5) 手册页。
本节介绍使 PAM 框架使用特定安全策略所需执行的一些任务。应注意与 PAM 配置文件关联的某些安全问题。有关安全问题的信息,请参见规划 PAM 实现。
任务 |
说明 |
参考 |
---|---|---|
规划 PAM 安装。 |
开始软件配置过程之前,考虑配置问题并做出相关决定。 | |
添加新的 PAM 模块。 |
有时,必须写入并安装特定于站点的模块,以满足通用软件不包括的要求。此过程说明如何安装这些新的 PAM 模块。 | |
阻止访问 ~/.rhosts。 |
通过阻止访问 ~/.rhosts 来进一步提高安全性。 | |
启动错误日志。 |
通过 syslog 启动 PAM 错误消息日志。 |
所提供的 pam.conf 配置文件可实现标准的 Solaris 安全策略。此策略应适用于许多情况。如果需要实现其他安全策略,则应考虑以下问题:
确定需求,特别是应选择的 PAM 服务模块。
标识需要特殊配置选项的服务。使用 other(如果适用)。
决定运行模块的顺序。
选择每个模块的控制标志。有关所有控制标志的更多信息,请参见PAM 控制标志。
选择每个模块必需的所有选项。每个模块的手册页应列出所有的特殊选项。
以下是更改 PAM 配置文件之前要考虑的一些建议:
对每种模块类型使用 other 项,以便 /etc/pam.conf 中不必包括每个应用程序。
确保考虑 binding、sufficient 和 optional 控制标志所涉及的安全问题。
查看与模块关联的手册页。这些手册页有助于您了解每个模块的工作方式、可用的选项,以及堆叠模块之间的交互。
如果 PAM 配置文件配置错误或者被损坏,则可能没有用户能登录。由于 sulogin 命令不使用 PAM,因此,需要超级用户口令才能将计算机引导至单用户模式并修复问题。
更改 /etc/pam.conf 文件之后,在您仍具有系统访问权限的情况下,尽可能多地检查此文件以更正问题。对更改可能影响到的所有命令进行测试。例如,向 telnet 服务中添加新模块。在此示例中,将使用 telnet 命令并检验所做更改是否使服务按预期方式运行。
此过程说明如何添加新的 PAM 模块。可以创建新模块以提供特定于站点的安全策略或支持第三方应用程序。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见配置 RBAC(任务列表)。
确定应使用的控制标志和其他选项。
有关模块的信息,请参阅PAM 模块。
确保设置了拥有权和权限,以便模块文件由 root 拥有,并且权限为 555。
编辑 PAM 配置文件 /etc/pam.conf,并将此模块添加到相应的服务中。
检验是否正确添加了模块。
必须在重新引导系统之前进行测试,以防此配置文件配置错误。在重新引导系统之前,使用直接服务(例如 rlogin 或 telnet )登录,并运行 su 命令。此服务可能是引导系统时仅产生一次的守护进程。因此,必须先重新引导系统,然后才能检验是否已添加模块。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见配置 RBAC(任务列表)。
从 PAM 配置文件中删除所有包括 rhosts_auth.so.1 的行。
此步骤用于防止在 rlogin 会话期间读取 ~/.rhosts 文件。因此,此步骤可防止从远程系统对本地系统进行未经验证的访问。无论 ~/.rhosts 或 /etc/hosts.equiv 文件是否存在或包含什么内容,所有 rlogin 访问都需要口令。
禁用 rsh 服务。
要防止对 ~/.rhosts 文件进行其他未经验证的访问,请记住要禁用 rsh 服务。
# svcadm disable network/shell |
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见配置 RBAC(任务列表)。
为所需的日志级别配置 /etc/syslog.conf 文件。
有关日志级别的更多信息,请参见 syslog.conf(4)。
刷新 syslog 守护进程的配置信息。
# svcadm refresh system/system-log |
PAM 配置文件 pam.conf 确定要使用的验证服务模块,以及这些模块的使用顺序。可以修改此文件来为每个系统登录应用程序选择验证模块。
PAM 配置文件所包含项的语法如下:
service-name module-type control-flag module-path module-options |
系统登录服务的名称,例如 ftp 、login、telnet。
服务的模块类型。有关更多信息,请参见PAM 模块类型。
确定模块的延续行为或失败行为。
指定实现安全策略的库对象的路径。
指定传送到服务模块的选项。
通过以 #(井号)开始行,可以向 pam.conf 文件中添加注释。可以使用空格或制表符来分隔字段。
如果在 PAM 配置文件的项中发现错误,则会生成 syslog 错误消息。如果此错误是请求服务的项,则此服务可能会返回一个错误。
每项服务的特定服务名称应该在该服务的手册页中进行介绍。例如,sshd(1M) 手册页列出 sshd 命令的所有 PAM 服务名称。
您需要了解 PAM 模块类型,因为这些类型定义模块的接口。以下是 PAM 模块的类型:
帐户模块,检查口令生命期、帐户到期日期和访问限制。通过验证模块对用户身份进行验证之后,帐户模块会确定是否应授予该用户对系统的访问权限。
验证模块,为用户提供验证。此类模块还允许设置、刷新或销毁凭证。
口令模块,允许对用户口令进行更改。
会话模块,管理登录会话的打开与关闭。这些模块还可以记录活动,或在会话结束后进行清除。
使用 PAM 服务模块的请求返回以下三种状态之一:
成功-满足安全策略
失败-未满足安全策略
忽略-此请求未参与策略请求
栈中的每个模块都可以确定请求的成功或失败。要确定模块的延续行为或失败行为,必须为 PAM 配置文件中的每个项选择一个控制标志。
延续行为定义是否检查后面的所有模块。根据特定模块的响应,可以决定跳过所有其他模块。
失败行为定义如何记录或报告错误消息。失败信息既可以是可选信息,也可以是必需信息。必需的失败信息会导致此请求失败,即使其他模块成功也是如此。可选的失败信息不会始终导致此请求失败。
binding-使用此控制标志,如果模块响应成功,并且先前带有 required 标志的模块都没有失败,则 PAM 会跳过其余模块并返回成功信息。如果返回失败信息,则 PAM 会记录必需的失败信息,然后继续处理栈。
除模块响应成功情况下不再检查任何其他模块以外,binding 控制标志类似于 required 控制标志。无论其他模块如何响应,使用此标志的模块中的失败信息会阻止请求成功。如果先前的必需模块都响应成功,则使用此标志的模块中的成功信息会使请求成功。
required-使用此控制标志,如果模块响应成功,则 PAM 会记录必需的成功信息并继续检查后面的所有模块。如果此模块响应失败,并且此失败信息是第一个必需的失败信息,则 PAM 会保存错误消息并继续检查栈。如果此失败信息不是第一个失败信息,则 PAM 只会继续检查栈。此标志允许处理整个序列,从而不会泄露可帮助攻击者进行攻击的信息。攻击者可找出的所有信息就是请求失败。
如果某特定模块必须响应成功才能使请求成功,则应使用 required 控制标志。无论其他模块如何响应,使用此标志的模块中的失败信息会阻止请求成功。使用此标志的模块中的成功信息并不表示请求成功。栈中带有 required、requisite 或 binding 控制标志的其他模块必须都响应成功,请求才会成功。
requisite-使用此控制标志,如果模块响应成功,则 PAM 会记录必需的成功信息并继续检查后面的所有模块。如果此模块响应失败,则 PAM 会记录必需的失败信息,返回第一个必需失败信息的错误消息,然后跳过任何其他检查。
除模块响应失败情况下不再检查任何其他模块以外,requisite 控制标志类似于 required 控制标志。无论其他模块如何响应,使用此标志的模块中的失败信息会阻止请求成功。使用此标志的模块中的成功信息并不表示请求成功。栈中带有 required、requisite 或 binding 控制标志的其他模块必须都响应成功,请求才会成功。
optional-使用此控制标志,如果模块响应成功,则 PAM 会记录可选的成功信息并继续检查栈。如果此模块响应失败,则 PAM 会记录可选的失败信息并继续检查栈。
当栈中的成功验证足以对用户进行验证时,应使用 optional 控制标志。仅当此特定服务无需成功执行时才应使用此标志。请求的成功或失败由必需的失败信息或成功信息确定。
如果用户需要具有与特定服务关联的权限才能完成其工作,则不应将模块标记为 optional。
sufficient-使用此控制标志,如果模块响应成功,并且先前带有 required 标志的模块都没有失败,则 PAM 会跳过其余模块并返回成功信息。如果此模块响应失败,则 PAM 会记录可选的失败信息并继续检查栈。
除模块响应成功情况下不再检查任何其他模块以外,sufficient 控制标志类似于 optional 控制标志。如果先前的 required 模块都响应成功,则使用此标志的模块中的成功信息会使请求成功。如果其他模块都响应失败,则使用此标志的模块中的失败信息会导致请求失败。
有关这些控制标志的更多信息,请参见下一节,其中介绍了通用 /etc/pam.conf 文件。
每个 PAM 模块都可实现一种特定的功能。设置 PAM 验证时,需要指定模块和模块类型,后者定义模块执行的操作。一个模块可以实现多个模块类型,例如 auth、account、session 或 password。
每个模块的路径由已安装的 Solaris 发行版中提供的指令集确定。对于 32 位模块,模块路径为 /usr/lib/security。对于 64 位模块,路径为 /usr/lib/security/ $ISA。有关更多信息,请参见 isalist(5) 手册页。
Solaris PAM 模块的完整列表位于 /usr/lib/security/$ISA 中。每个模块都有关联的手册页,其中介绍了应用的模块类型以及所有的特殊选项。
出于安全原因,这些模块文件必须由 root 拥有,并且禁止使用 group 或 other 权限写入。如果文件并非由 root 拥有,则 PAM 不会装入模块。
login auth requisite pam_authtok_get.so.1 login auth required pam_dhkeys.so.1 login auth required pam_unix_cred.so.1 login auth required pam_unix_auth.so.1 login auth required pam_dial_auth.so.1 |
运行 login 命令时,必须针对 pam_authtok_get、pam_dhkeys、pam_auth_cred、pam_auth_unix 和 pam_dial_auth 模块成功执行验证。pam_authtok_get 项中的 requisite 标志表示,如果此模块响应失败,则不再检查任何其他模块。但是,如果此模块响应成功,则会继续检查其余模块。如果针对所有模块的验证都失败,则验证请求也会失败。
rlogin auth sufficient pam_rhosts_auth.so.1 rlogin auth requisite pam_authtok_get.so.1 rlogin auth required pam_dhkeys.so.1 rlogin auth required pam_unix_cred.so.1 rlogin auth required pam_unix_auth.so.1 |
对于 rlogin 命令,sufficient 控制标志表示通过 pam_rhosts_auth 模块进行的验证足以使验证请求成功。无需执行任何其他检查。如果通过 pam_rhosts_auth 进行的验证失败,则通过 pam_authtok_get、pam_dhkeys、pam_auth_cred 和 pam_unix_auth 模块进行的验证必须成功。虽然其他模块中的失败信息会阻止成功验证,但是 pam_rhosts_auth 模块中的失败信息不会。此外,与 login 中的项相同,pam_authtok_get 项中的 requisite 控制标志表示如果此模块响应失败,则验证请求失败,并且不再检查任何其他模块。
other session required pam_unix_session.so.1 |
使用 other 服务名称,可以为 pam.conf 文件中未包括的任何其他命令设置缺省服务。other 服务名称简化了文件管理,因为只需一个项就可涵盖使用同一模块的许多服务。此外,other 服务名称用作“全面管理功能”时,可以确保每个访问都由一个模块来表示。
module-path 的项是“相对于根目录的”。如果为 module-path 指定的文件名未以斜杠 (/) 开始,则文件名前面为路径 /usr/lib/security/$ISA。必须对位于其他目录中的模块使用全路径名。可以在每个模块的手册页中找到 module-options 的值。
本章介绍有关简单身份验证和安全层 (Simple Authentication and Security Layer, SASL) 的信息。
简单身份验证和安全层 (Simple Authentication and Security Layer, SASL) 是一种为网络协议提供验证和可选安全性服务的框架。应用程序将调用 SASL 库 /usr/lib/libsasl.so,此库提供应用程序与各种 SASL 机制之间的胶合层。验证过程及提供可选安全性服务时会使用 SASL 机制。Solaris 10 发行版提供的 SASL 版本由经过少量更改的 Cyrus SASL 派生而来。
SASL 提供以下服务:
装入任何插件
确定应用程序必需的安全选项以帮助选择安全机制
列出应用程序可使用的插件
为特定验证的尝试从可用机制列表中选择最佳机制
在应用程序和所选机制之间路由验证数据
将有关 SASL 协商的信息提供给应用程序
本节提供有关 Solaris 10 发行版的 SASL 实现的信息。
SASL 插件提供对安全机制、用户标准化和辅助属性检索的支持。 缺省情况下,动态装入的 32 位插件安装在 /usr/lib/sasl 中,64 位插件安装在 /usr/lib/sasl/ $ISA 中。Solaris 10 发行版中提供了以下安全机制插件:
CRAM-MD5,仅支持验证,不支持授权。
DIGEST-MD5,支持验证、完整性、保密性和授权。
GSSAPI,支持验证、完整性、保密性和授权。GSSAPI 安全机制要求有效的 Kerberos 基础结构。
PLAIN,支持验证和授权。
此外,EXTERNAL 安全机制插件和 INTERNAL 用户标准化插件内置在 libsasl.so.1 中。 EXTERNAL 机制支持验证和授权。如果外部安全源提供该机制,则该机制支持完整性和保密性。如果用户名需要,INTERNAL 插件将添加领域名称。
目前,Solaris 10 发行版不提供任何 auxprop 插件。 要使 CRAM-MD5 和 DIGEST-MD5 机制插件在服务器端能完全运行,用户必须提供 auxprop 插件以检索明文口令。 PLAIN 插件还需要其他的支持,以对口令进行验证。支持口令验证的有:对服务器应用程序的回调、auxprop 插件、saslauthd 或 pwcheck。Solaris 发行版中未提供 salauthd 和 pwcheck 守护进程。要获取更好的互操作性,可使用 mech_list SASL 选项将服务器应用程序限制为可完全运行的那些机制。
缺省情况下,客户机验证名称被设置为 getenv("LOGNAME")。客户机或插件可以重置此变量。
使用可在 /etc/sasl/app.conf 文件中设置的选项,可以在服务器端修改 libsasl 和插件的行为。变量 app 是服务器定义的应用程序名称。服务器 app 的文档应指定该应用程序名称。
Solaris 10 发行版支持以下选项:
用户成功进行纯文本验证后自动将其转换到其他机制。
列出要使用的辅助属性插件的名称。
选择要使用的 canon_user 插件。
列出允许服务器应用程序使用的机制。
列出用于验证口令的机制。目前,auxprop 是唯一允许的值。
设置缓存验证信息以便进行快速重新验证的时间(以分钟为单位)。此选项由 DIGEST-MD5 插件使用。将此选项设置为 0 将禁用重新验证。
Solaris 10 发行版不支持以下选项:
列出可用机制。不使用该选项是因为它会更改动态装入插件的行为。
定义用于与 saslauthd 守护进程通信的 saslauthd 门的位置。Solaris 10 发行版中不包括 saslauthd 守护进程。因此,也不包括此选项。
定义 GSSAPI 插件使用的 keytab 文件的位置。可使用 KRB5_KTNAME 环境变量代替此选项来设置缺省 keytab 位置。
Cyrus SASL 中不包括以下选项。但是,Solaris 10 发行版中添加了这些选项:
创建 GSS 客户机安全性上下文时获取客户机凭证而不是使用缺省凭证。缺省情况下,将使用缺省客户机 Kerberos 身份。
为服务器设置需要的日志级别。
使用 Solaris 安全 Shell,用户可以通过不安全的网络安全地访问远程主机。该 shell 提供了用于远程登录和远程文件传输的命令。本章包含以下主题:
有关参考信息,请参见第 19 章,Solaris 安全 Shell(参考)。
在 Solaris 安全 Shell 中,提供了使用口令、公钥,或同时使用二者的验证。所有网络通信都将被加密。因此,Solaris 安全 Shell 可防止可能的入侵者读取被拦截的通信。Solaris 安全 Shell 还可防止入侵者欺骗系统。
Solaris 安全 Shell 还可用作即时 virtual private network, VPN(虚拟专用网络)。VPN 可以转发 X 窗口系统通信,或通过加密的网络链路连接本地计算机和远程计算机之间的各个端口号。
使用 Solaris 安全 Shell,可以执行以下操作:
通过不安全的网络安全地登录到其他主机。
在两台主机之间安全地复制文件。
在远程主机上安全地运行命令。
Solaris 安全 Shell 支持两种版本的安全 Shell 协议。版本 1 是协议的原始版本。版本 2 更安全,该版本修正了版本 1 的一些基本安全设计缺陷。版本 1 仅提供用于协助用户迁移到版本 2。强烈建议用户不要使用版本 1。
在下文中,v1 用于表示版本 1,v2 用于表示版本 2。
Solaris 安全 Shell 提供公钥和口令方法来验证与远程主机的连接。公钥验证是一种比口令验证更强大的验证机制,因为私钥从不通过网络传送。
请按以下顺序尝试这些验证方法。如果配置不满足验证方法的要求,请尝试下一种方法。
GSS-API-使用 mech_krb5 (Kerberos V) 和 mech_dh (AUTH_DH) 等 GSS-API 机制的凭证来验证客户机和服务器。有关 GSS-API 的更多信息,请参见《Solaris 开发者安全性指南》中的“GSS-API 介绍”。
基于主机的验证-使用主机密钥和 rhosts 文件。使用客户机的 RSA 和 DSA 公共/专用主机密钥验证客户机。使用 rhosts 文件向用户授权使用客户机。
公钥验证-验证用户的 RSA 和 DSA 公钥/私钥。
口令验证-使用 PAM 验证用户。 v2 中的键盘验证方法允许 PAM 的任意提示。有关更多信息,请参见 sshd(1M) 手册页中的 SECURITY 部分。
下表显示了验证正在尝试登录到远程主机的用户的要求。该用户位于本地主机(客户机)上。远程主机(服务器)正在运行 sshd 守护进程。下表显示了 Solaris 安全 Shell 验证方法、兼容的协议版本和主机要求。
表 18–1 Solaris 安全 Shell 的验证方法
验证方法(协议版本) |
本地主机(客户机)要求 |
远程主机(服务器)要求 |
---|---|---|
GSS 机制的启动器凭证。 |
GSS 机制的接收器凭证。有关更多信息,请参见获取 Solaris 安全 Shell 中的 GSS 凭证。 |
|
用户帐户 /etc/ssh/ssh_host_rsa_key 或 /etc/ssh/ssh_host_dsa_key 中的本地主机私钥 /etc/ssh/ssh_config 中的 HostbasedAuthentication yes |
用户帐户 /etc/ssh/known_hosts 或 ~/.ssh/known_hosts 中的本地主机公钥 /etc/ssh/sshd_config 中的 HostbasedAuthentication yes /etc/ssh/sshd_config 中的 IgnoreRhosts no /etc/shosts.equiv、/etc/hosts.equiv、~/.rhosts 或 ~/.shosts 中的本地主机项 |
|
用户帐户 ~/.ssh/id_rsa 或 ~/.ssh/id_dsa 中的私钥 ~/.ssh/id_rsa.pub 或 ~/.ssh/id_dsa.pub 中的用户公钥 |
用户帐户 ~/.ssh/authorized_keys 中的用户公钥 |
|
RSA 公钥 (v1) |
用户帐户 ~/.ssh/identity 中的私钥 ~/.ssh/identity.pub 中的用户公钥 |
用户帐户 ~/.ssh/authorized_keys 中的用户公钥 |
用户帐户 |
用户帐户 支持 PAM,包括触发口令生命期后的任意提示和口令更改。 |
|
用户帐户 |
用户帐户 支持 PAM。 |
|
仅 .rhosts (v1) |
用户帐户 |
用户帐户 /etc/ssh/sshd_config 中的 IgnoreRhosts no /etc/shosts.equiv、/etc/hosts.equiv、~/.shosts 或 ~/.rhosts 中的本地主机项 |
仅在服务器上使用 RSA (v1) 的 .rhosts |
用户帐户 /etc/ssh/ssh_host_rsa1_key 中的本地主机公钥 |
用户帐户 /etc/ssh/ssh_known_hosts 或 ~/.ssh/known_hosts 中的本地主机公钥 /etc/ssh/sshd_config 中的 IgnoreRhosts no /etc/shosts.equiv、/etc/hosts.equiv、~/.shosts 或 ~/.rhosts 中的本地主机项 |
有关 Solaris 系统中的安全 Shell 的全面介绍,请参见由 Jason Reid 编著的《Secure Shell in the Enterprise》,2003 年 6 月出版,ISBN 为 0-13-142900-0。该书是 Sun Microsystems Press 出版的 Sun BluePrints 丛书的一部分。
有关联机信息,请导航至 Sun 的 BigAdmin System Administration Portal 网站 http://www.sun.com/bigadmin。单击 docs.sun.com,然后在 Other documentation sites 下单击 Sun BluePrints。然后依次单击 Archives by Subject 和 Security。该文档集包括以下文章:
《Role Based Access Control and Secure Shell – A Closer Look At Two Solaris Operating Environment Security Features》
《Integrating the Secure Shell Software》
《Configuring the Secure Shell Software》
从 Solaris 9 发行版开始,Solaris 安全 Shell 中引入了以下变化:
Solaris 安全 Shell 基于 OpenSSH 3.5p1。Solaris 实现还包括截至 OpenSSH 3.8p1 的各版本的功能和错误修复。
在 /etc/ssh/sshd_config 文件中,X11Forwarding 的缺省值为 yes。
以下是已引入的关键字:
GSSAPIAuthentication
GSSAPIKeyExchange
GSSAPIDelegateCredentials
GSSAPIStoreDelegatedCredentials
KbdInteractiveAuthentication
通过 GSSAPI 关键字,Solaris 安全 Shell 可以使用 GSS 凭证进行验证。KbdInteractiveAuthentication 关键字支持 PAM 中的任意提示和口令更改。有关这些关键字及其缺省值的完整列表,请参见Solaris 安全 Shell 中的关键字。
ARCFOUR 和 AES128-CTR 密码现在可用。ARCFOUR 也称为 RC4。AES 密码是计数器模式下的 AES。
sshd 守护进程使用 /etc/default/login 和 login 命令中的变量。/etc/default/login 变量可以由 sshd_config 文件中的值覆盖。有关更多信息,请参见Solaris 安全 Shell 和登录环境变量和 sshd_config(4) 手册页。
以下任务列表介绍了用于配置 Solaris 安全 Shell 和使用 Solaris 安全 Shell 的任务列表。
任务 |
说明 |
参考 |
---|---|---|
配置 Solaris 安全 Shell |
指导管理员为用户配置 Solaris 安全 Shell。 | |
使用 Solaris 安全 Shell |
指导用户使用 Solaris 安全 Shell。 |
以下任务列表介绍了配置 Solaris 安全 Shell 的过程。
任务 |
说明 |
参考 |
---|---|---|
配置基于主机的验证 |
在客户机和服务器上配置基于主机的验证。 | |
将主机配置为使用 v1 和 v2 |
为使用 v1 和 v2 协议的主机创建公钥文件。 | |
配置端口转发 |
允许用户使用端口转发。 |
缺省情况下,Solaris 安全 Shell 中未启用基于主机的验证,并且不允许同时使用两种协议。更改这些缺省设置需要管理干预。另外,要端口转发正常工作,也需要管理干预。
以下过程将设置一个公钥系统,其中客户机的公钥用于服务器上的验证。用户还必须创建公钥/私钥对。
在此过程中,术语客户机和本地主机是指用户键入 ssh 命令的计算机。术语服务器和远程主机是指客户机要尝试访问的计算机。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
在客户机上,启用基于主机的验证。
在客户机配置文件 /etc/ssh/ssh_config 中,键入以下项:
HostbasedAuthentication yes |
在服务器上,启用基于主机的验证。
在服务器配置文件 /etc/ssh/sshd_config 中,键入相同的项:
HostbasedAuthentication yes |
在服务器上,配置文件以允许将客户机识别为受信任主机。
有关更多信息,请参见 sshd(1M) 手册页中的 FILES 部分。
在服务器上,确保 sshd 守护进程可以访问受信任主机的列表。
在 /etc/ssh/sshd_config 文件中,将 IgnoreRhosts 设置为 no。
# sshd_config IgnoreRhosts no |
确保站点上的 Solaris 安全 Shell 用户在两台主机上都拥有帐户。
执行以下操作之一,以将客户机的公钥放到服务器上。
修改服务器上的 sshd_config 文件,然后指示用户将客户机的公共主机密钥添加到其 ~/.ssh/known_hosts 文件中。
# sshd_config IgnoreUserKnownHosts no |
有关用户说明,请参见如何生成用于 Solaris 安全 Shell 的公钥/私钥对。
将客户机的公钥复制到服务器。
主机密钥存储在 /etc/ssh 目录中。这些密钥通常由 sshd 守护进程在首次引导时生成。
在以下示例中,每台主机同时配置为服务器和客户机。任一主机上的用户都可以启动与另一台主机的 ssh 连接。以下配置可使每台主机同时成为服务器和客户机:
在每台主机上,Solaris 安全 Shell 配置文件都包含以下项:
# /etc/ssh/ssh_config HostBasedAuthentication yes # # /etc/ssh/sshd_config HostBasedAuthentication yes IgnoreRhosts no |
在每台主机上,shosts.equiv 文件都包含对应于另一台主机的项:
# /etc/hosts.equiv on machine2 machine1 |
# /etc/hosts.equiv on machine1 machine2 |
每台主机的公钥位于另一台主机的 /etc/ssh/ssh_known_hosts 文件中:
# /etc/ssh/ssh_known_hosts on machine2 … machine1 |
# /etc/ssh/ssh_known_hosts on machine1 … machine2 |
用户在两台主机上都拥有帐户:
# /etc/passwd on machine1 jdoe:x:3111:10:J Doe:/home/jdoe:/bin/sh |
# /etc/passwd on machine2 jdoe:x:3111:10:J Doe:/home/jdoe:/bin/sh |
此过程在一台主机与运行 v1 和 v2 的多台主机交互操作时非常有用。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
将主机配置为同时使用两种 Solaris 安全 Shell 协议。
编辑 /etc/ssh/sshd_config 文件。
# Protocol 2 Protocol 2,1 |
为用于 v1 的主机密钥提供一个独立文件。
向 /etc/ssh/sshd_config 文件中添加 HostKey 项。
HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_rsa1_key |
生成用于 v1 的主机密钥。
# ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_rsa1_key -N '' |
表示用于 v1 的 RSA 算法。
表示保存主机密钥的文件。
表示无需口令短语。
重新启动 sshd 守护进程。
# svcadm restart network/ssh:default |
您也可以重新引导系统。
使用端口转发可以将本地端口转发到远程主机。实际上,分配了一个套接字用于侦听本地端的端口。同样,也可以在远程端指定端口。
Solaris 安全 Shell 端口转发必须使用 TCP 连接。Solaris 安全 Shell 不支持使用 UDP 连接进行端口转发。
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
将远程 Solaris 安全 Shell 服务器配置为允许端口转发。
在 /etc/ssh/sshd_config 文件中,将 AllowTcpForwarding 的值更改为 yes。
# Port forwarding AllowTcpForwarding yes |
remoteHost# svcadm restart network/ssh:default |
有关管理持久性服务的信息,请参见《系统管理指南:基本管理》中的第 14 章 “管理服务(概述)” 和 svcadm(1M) 手册页。
检验是否可以使用端口转发。
remoteHost# /usr/bin/pgrep -lf sshd 1296 ssh -L 2001:remoteHost:23 remoteHost |
以下任务列表介绍了用户使用 Solaris 安全 Shell 的过程。
任务 |
说明 |
参考 |
---|---|---|
创建公钥/私钥对。 |
针对要求公钥验证的站点启用对 Solaris 安全 Shell 的访问。 | |
更改口令短语 |
更改用于验证私钥的短语。 | |
使用 Solaris 安全 Shell 登录 |
远程登录时提供加密的 Solaris 安全 Shell 通信。此过程与使用 rsh 命令类似。 | |
登录到 Solaris 安全 Shell 而不会出现提示要求输入口令。 |
允许使用可向 Solaris 安全 Shell 提供口令的代理进行登录。 | |
在 Solaris 安全 Shell 中使用端口转发 |
指定要在基于 TCP 的 Solaris 安全 Shell 连接中使用的本地端口或远程端口。 | |
使用 Solaris 安全 Shell 复制文件 |
在主机之间安全地复制文件。 | |
安全地从防火墙内的主机连接到防火墙外的主机。 |
使用与 HTTP 或 SOCKS5 兼容的 Solaris 安全 Shell 命令连接由防火墙隔离的主机。 |
Solaris 安全 Shell 可提供本地 shell 和远程 shell 之间的安全访问。有关更多信息,请参见 ssh_config(4) 和 ssh(1) 手册页。
如果用户的站点要实现基于主机的验证或用户公钥验证,则必须生成公钥/私钥对。有关其他选项,请参见 ssh-keygen(1) 手册页。
通过系统管理员确认是否配置了基于主机的验证。
启动密钥生成程序。
myLocalHost% ssh-keygen -t rsa Generating public/private rsa key pair. … |
其中,-t 是算法类型,可以是 rsa、dsa 或 rsa1 之一。
指定将保存密钥的文件的路径。
缺省情况下,文件名 id_rsa(表示 RSA v2 密钥)显示在括号中。可通过按回车键选择此文件。或者,可以键入替换的文件名。
Enter file in which to save the key (/home/jdoe/.ssh/id_rsa):<按回车键> |
通过将字符串 .pub 附加到私钥文件的名称后,可以自动创建公钥的文件名。
键入使用密钥的口令短语。
此口令短语用于加密私钥。强烈建议不要使用空项。请注意,键入口令短语时,它们不会显示。
Enter passphrase (empty for no passphrase): <键入口令短语> |
重新键入口令短语以进行确认。
Enter same passphrase again: <键入口令短语> Your identification has been saved in /home/jdoe/.ssh/id_rsa. Your public key has been saved in /home/jdoe/.ssh/id_rsa.pub. The key fingerprint is: 0e:fb:3d:57:71:73:bf:58:b8:eb:f3:a3:aa:df:e0:d1 jdoe@myLocalHost |
检查结果。
检查密钥文件的路径是否正确。
% ls ~/.ssh id_rsa id_rsa.pub |
此时,已创建公钥/私钥对。
选择适当的选项:
如果管理员已配置了基于主机的验证,则可能需要将本地主机的公钥复制到远程主机。
现在即可登录到远程主机。有关详细信息,请参见如何使用 Solaris 安全 Shell 登录到远程主机。
如果站点使用公钥来进行用户验证,请在远程主机上装载 authorized_keys 文件。
(可选的)减少口令短语的提示。
有关过程,请参见如何减少 Solaris 安全 Shell 中的口令提示。有关更多信息,请参见 ssh-agent(1) 和 ssh-add(1) 手册页。
在以下示例中,用户可以访问运行 Solaris 安全 Shell v1 协议的主机。要通过 v1 主机进行验证,用户应创建 v1 密钥,然后将公钥部分复制到远程主机。
myLocalHost% ssh-keygen -t rsa1 -f /home/jdoe/.ssh/identity Generating public/private rsa key pair. … Enter passphrase (empty for no passphrase): <键入口令短语> Enter same passphrase again: <键入口令短语> Your identification has been saved in /home/jdoe/.ssh/identity. Your public key has been saved in /home/jdoe/.ssh/identity.pub. The key fingerprint is: … myLocalHost% ls ~/.ssh id_rsa id_rsa.pub identity identity.pub myLocalHost% cat $HOME/.ssh/identity.pub | ssh myRemoteHost \ 'cat >> .ssh/authorized_keys && echo "Key copied"' |
以下过程不会更改私钥。此过程将更改私钥的验证机制,即口令短语。有关更多信息,请参见 ssh-keygen(1) 手册页。
更改口令短语。
键入带有 -p 选项的 ssh-keygen 命令,并回答提示问题。
myLocalHost% ssh-keygen -p Enter file which contains the private key (/home/jdoe/.ssh/id_rsa):<按回车键> Enter passphrase (empty for no passphrase): <键入口令短语> Enter same passphrase again: <键入口令短语> |
其中,-p 用于请求更改私钥文件的口令短语。
启动 Solaris 安全 Shell 会话。
键入 ssh 命令,并指定远程主机的名称。
myLocalHost% ssh myRemoteHost |
此时会出现提示,询问远程主机的真实性:
The authenticity of host 'myRemoteHost' can't be established. RSA key fingerprint in md5 is: 04:9f:bd:fc:3d:3e:d2:e7:49:fd:6e:18:4f:9c:26 Are you sure you want to continue connecting(yes/no)? |
初始连接到远程主机时,出现此提示为正常情况。
如果出现提示,请检验远程主机密钥的真实性。
所发送的命令将会加密。所接收的任何响应都会加密。
关闭 Solaris 安全 Shell 连接。
完成后,键入 exit 或者使用常规方法退出 shell。
myRemoteHost% exit myRemoteHost% logout Connection to myRemoteHost closed myLocalHost% |
如果不想键入口令短语和口令来使用 Solaris 安全 Shell,则可以使用代理守护进程。请在会话开始时启动守护进程。然后,使用 ssh-add 命令将私钥存储到代理守护进程中。如果您在不同的主机上拥有不同的帐户,请添加需要用于会话的密钥。
可以根据需要手动启动代理守护进程,如以下过程中所述。或者,可以将代理守护进程设置为在每个会话开始时自动运行,如如何将 ssh-agent 命令设置为自动运行中所述。
启动代理守护进程。
myLocalHost% ssh-agent |
检验是否已启动代理守护进程。
myLocalHost% eval `ssh-agent` Agent pid 9892 |
将私钥添加到代理守护进程。
键入 ssh-add 命令。
myLocalHost% ssh-add Enter passphrase for /home/jdoe/.ssh/id_rsa: <键入口令短语> Identity added: /home/jdoe/.ssh/id_rsa(/home/jdoe/.ssh/id_rsa) myLocalHost% |
启动 Solaris 安全 Shell 会话。
myLocalHost% ssh myRemoteHost |
此时不会提示您输入口令短语。
在本示例中,jdoe 将向代理守护进程添加两个密钥。-l 选项用于列出守护进程中存储的所有密钥。在会话结束时,-D 选项用于删除代理守护进程中的所有密钥。
myLocalHost% ssh-agent myLocalHost% ssh-add Enter passphrase for /home/jdoe/.ssh/id_rsa: <键入口令短语> Identity added: /home/jdoe/.ssh/id_rsa(/home/jdoe/.ssh/id_rsa) myLocalHost% ssh-add /home/jdoe/.ssh/id_dsa Enter passphrase for /home/jdoe/.ssh/id_dsa: <键入口令短语> Identity added: /home/jdoe/.ssh/id_dsa(/home/jdoe/.ssh/id_dsa) myLocalHost% ssh-add -l md5 1024 0e:fb:3d:53:71:77:bf:57:b8:eb:f7:a7:aa:df:e0:d1 /home/jdoe/.ssh/id_rsa(RSA) md5 1024 c1:d3:21:5e:40:60:c5:73:d8:87:09:3a:fa:5f:32:53 /home/jdoe/.ssh/id_dsa(DSA) 用户管理 Solaris 安全 Shell 事务 |
myLocalHost% ssh-add -D Identity removed: /home/jdoe/.ssh/id_rsa(/home/jdoe/.ssh/id_rsa.pub) /home/jdoe/.ssh/id_dsa(DSA) |
只要通过自动启动代理守护进程 ssh-agent 来使用 Solaris 安全 Shell,即可避免提供口令短语和口令。可以通过 .dtprofile 脚本启动代理守护进程。要将口令短语和口令添加到代理守护进程,请参见示例 18–3。
在用户启动脚本中自动启动代理守护进程。
将以下行添加到 $HOME/.dtprofile 脚本的末尾:
if [ "$SSH_AUTH_SOCK" = "" -a -x /usr/bin/ssh-agent ]; then eval `/usr/bin/ssh-agent` fi |
退出 CDE 会话时,终止代理守护进程。
将以下行添加到 $HOME/.dt/sessions/sessionexit 脚本中:
if [ "$SSH_AGENT_PID" != "" -a -x /usr/bin/ssh-agent ]; then /usr/bin/ssh-agent -k fi |
此项可确保终止 CDE 会话后,任何用户都无法使用 Solaris 安全 Shell 代理。
可以指定将本地端口转发到远程主机。实际上,分配了一个套接字用于侦听本地端的端口。从此端口到远程主机的连接基于安全通道。例如,可以指定端口 143 以使用 IMAP4 远程获取电子邮件。同样,也可以在远程端指定端口。
使用端口转发之前,管理员必须先在远程 Solaris 安全 Shell 服务器上启用端口转发。有关详细信息,请参见如何在 Solaris 安全 Shell 中配置端口转发。
以下示例说明如何使用本地端口转发来安全地接收来自远程服务器的邮件。
myLocalHost% ssh -L 9143:myRemoteHost:143 myRemoteHost |
此命令可将连接从 myLocalHost 上的端口 9143 转发到端口 143。端口 143 是 myRemoteHost 上的 IMAP v2 服务器端口。用户启动邮件应用程序时,需要指定本地端口号,如以下对话框中所示。
请勿将对话框中的 localhost 与 myLocalHost 混淆。myLocalHost 是假设的主机名,而 localhost 则是用于标识本地系统的关键字。
本示例说明企业环境中的用户如何将连接从外部网络中的主机转发到公司防火墙内的主机。
myLocalHost% ssh -R 9022:myLocalHost:22 myOutsideHost |
此命令可将连接从 myOutsideHost 上的端口 9022 转发到本地主机上的端口 22(sshd 服务器)。
myOutsideHost% ssh -p 9022 localhost myLocalHost% |
以下过程说明如何使用 scp 命令在主机之间复制加密的文件。您可以在一台本地主机和一台远程主机之间,或者两台远程主机之间复制加密的文件。该命令的运行与 rcp 命令类似,不同的是 scp 命令会提示进行验证。有关更多信息,请参见 scp(1) 手册页。
也可以使用 sftp(一种形式更安全的 ftp 命令)。有关更多信息,请参见 sftp(1) 手册页。
启动安全的复制程序。
指定源文件、远程目标上的用户名和目标目录。
myLocalHost% scp myfile.1 jdoe@myRemoteHost:~ |
出现提示时,提供口令短语。
Enter passphrase for key '/home/jdoe/.ssh/id_rsa': <键入口令短语> myfile.1 25% |******* | 640 KB 0:20 ETA myfile.1 |
键入口令短语后,将会显示进度计量器。请参见以上输出中的第二行。进度计量器显示以下内容:
文件名
已传输的文件百分比
表示已传输的文件百分比的一系列星号
已传输的数据量
完整文件的估计到达时间 (estimated time of arrival, ETA),即剩余时间。
可以使用 Solaris 安全 Shell 建立从防火墙内的主机到防火墙外的主机的连接。通过在配置文件中指定 ssh 的代理命令或者在命令行中将该代理命令指定为选项,可以完成此任务。有关的命令行选项,请参见示例 18–6。
通常,可以通过配置文件自定义 ssh 交互。
可以在 ~/.ssh/config 中自定义独立的个人文件。
或者,可以使用管理配置文件 /etc/ssh/ssh_config 中的设置。
可以使用两种类型的代理命令自定义这些文件。一个是用于 HTTP 连接的代理命令。另一个是用于 SOCKS5 连接的代理命令。有关更多信息,请参见 ssh_config(4) 手册页。
在配置文件中指定代理命令和主机。
使用以下语法添加所需数量的行:
[Host outside-host] ProxyCommand proxy-command [-h proxy-server] \ [-p proxy-port] outside-host|%h outside-port|%p |
在命令行中指定远程主机名时,将代理命令规范限制为实例。如果对 outside-host 使用通配符,则可将代理命令规范应用于一组主机。
指定代理命令。该命令可以是以下之一:
/usr/lib/ssh/ssh-http-proxy-connect,用于 HTTP 连接
/usr/lib/ssh/ssh-socks5-proxy-connect,用于SOCKS5 连接
这些选项分别指定代理服务器和代理端口。如果存在,则代理将覆盖指定代理服务器和代理端口的任何环境变量,如 HTTPPROXY、HTTPPROXYPORT、SOCKS5_PORT、SOCKS5_SERVER 和 http_proxy。http_proxy 变量指定 URL。如果不使用这些选项,则必须设置相关的环境变量。有关更多信息,请参见 ssh-socks5-proxy-connect(1) 和 ssh-http-proxy-connect(1) 手册页。
指定要连接到的特定主机。请在命令行中使用 %h 替换参数来指定主机。
指定要连接到的特定端口。请在命令行中使用 %p 替换参数来指定端口。通过指定 %h 和 %p 而不使用 Host outside-host 选项,只要调用 ssh 命令即可将应用代理命令到主机参数。
运行 Solaris 安全 Shell,从而指定外部主机。
例如,键入以下命令:
myLocalHost% ssh myOutsideHost |
此命令可在个人配置文件中查找 myOutsideHost 的代理命令规范。如果找不到规范,则该命令将在系统范围的配置文件 /etc/ssh/ssh_config 中查找。该代理命令将替换 ssh 命令。
如何设置到防火墙外部主机的缺省连接说明如何在配置文件中指定代理命令。在本示例中,在 ssh 命令行中指定代理命令。
% ssh -o'Proxycommand=/usr/lib/ssh/ssh-http-proxy-connect \ -h myProxyServer -p 8080 myOutsideHost 22' myOutsideHost |
ssh 命令的 -o 选项提供了指定代理命令的命令行方法。此示例命令可执行以下操作:
将 ssh 替换为 HTTP 代理命令
使用端口 8080 并将 myProxyServer 用作代理服务器
连接到 myOutsideHost 上的端口 22
本章介绍 Solaris 安全 Shell 中的配置选项。以下是本章中参考信息的列表:
有关配置 Solaris 安全 Shell 的过程,请参见第 18 章,使用 Solaris 安全 Shell(任务)。
Solaris 安全 Shell 守护进程 (sshd) 通常在引导时(启动网络服务时)启动。该守护进程侦听来自客户机的连接。Solaris 安全 Shell 会话在用户运行 ssh、scp 或 sftp 命令时开始。系统将为每个传入连接派生一个新的 sshd 守护进程。派生的守护进程处理密钥交换、加密、验证、命令执行以及与客户机的数据交换。这些会话的特征由客户端配置文件和服务器端配置文件确定。命令行参数可以覆盖配置文件中的设置。
客户机和服务器必须相互进行认证。验证成功后,用户可以远程执行命令和在主机之间复制数据。
sshd 守护进程的服务器端行为由 /etc/ssh/sshd_config 文件中的关键字设置控制。例如,sshd_config 文件控制访问服务器时可采用哪些类型的验证。启动 sshd 守护进程时,命令行选项也可控制服务器端行为。
客户端的行为由 Solaris 安全 Shell 关键字控制,其优先级顺序如下:
命令行选项
用户的配置文件 ~/.ssh/config
系统范围的配置文件 /etc/ssh/ssh_config
例如,用户可以通过在命令行中指定 -c 3des 来覆盖在系统范围内配置的 Cipher 的设置值 blowfish。
Solaris 安全 Shell 协议(v1 和 v2)均支持客户机用户/主机验证和服务器主机验证。这两种协议都涉及会话加密密钥(用于保护 Solaris 安全 Shell 会话)的交换。每种协议提供了用于验证和密钥交换的各种方法。一些方法是可选的。Solaris 安全 Shell 支持许多客户机验证机制,如表 18–1 中所示。通常使用已知的主机公钥对服务器进行验证。
对于 v1 协议,Solaris 安全 Shell 支持使用口令进行用户验证。该协议也支持用户公钥,以及使用受信任的主机公钥进行验证。服务器验证使用主机公钥完成。对于 v1 协议,所有公钥都是 RSA 密钥。会话密钥交换涉及对定期重新生成的暂时服务器密钥的使用。
对于 v2 协议,Solaris 安全 Shell 支持用户验证和一般交互验证,这通常涉及到口令。该协议也支持使用用户公钥和受信任的主机公钥进行验证。这些密钥可以是 RSA 或 DSA。会话密钥交换由在服务器验证步骤中签名的 Diffie-Hellman 暂时密钥交换组成。此外,Solaris 安全 Shell 可以使用 GSS 凭证进行验证。
要在 Solaris 安全 Shell 中使用 GSS-API 进行验证,服务器必须具有 GSS-API 接收器凭证,客户机必须具有 GSS-API 启动器凭证。支持 mech_dh 和 mech_krb5。
对于 mech_dh,如果 root 已运行 keylogin 命令,则服务器具有 GSS-API 接收器凭证。
对于 mech_krb5,如果 /etc/krb5/krb5.keytab 中包含与该服务器对应的主机主体的有效项,则服务器具有 GSS-API 接收器凭证。
如果执行了以下某项操作,则客户机具有 mech_dh 的启动器凭证:
已运行 keylogin 命令。
pam.conf 文件中使用了 pam_dhkeys 模块。
如果执行了以下某项操作,则客户机具有 mech_krb5 的启动器凭证:
已运行 kinit 命令。
pam.conf 文件中使用了 pam_krb5 模块。
有关 mech_dh 在安全 RPC 中的使用,请参见第 15 章,使用验证服务(任务)。有关如何使用 mech_krb5,请参见第 20 章,Kerberos 服务介绍。有关机制的更多信息,请参见 mech(4) 和 mech_spnego(5) 手册页。
完成验证后,用户通常可通过请求 shell 或执行命令来使用 Solaris 安全 Shell。通过 ssh 命令选项可发出请求。请求可能包括分配伪 tty、转发 X11 连接或 TCP/IP 连接,或通过安全连接启用 ssh-agent 验证程序。用户会话的基本组成部分如下:
用户请求 shell 或请求执行命令,以开始会话模式。
在此模式下,数据通过客户端的终端进行发送或接收。在服务器端,数据通过 shell 或命令进行发送。
数据传送完成后,用户程序将终止。
除已存在的连接外,所有 X11 转发和 TCP/IP 转发均停止。现有 X11 连接和 TCP/IP 连接仍然处于打开状态。
服务器向客户机发送退出状态消息。关闭所有连接后(如仍处于打开状态的转发端口),客户机将关闭到服务器的连接。然后,客户机退出。
Solaris 安全 Shell 会话的特征由配置文件控制。命令行中的选项可在一定程度上覆盖配置文件。
大多数情况下,Solaris 安全 Shell 会话的客户端特征由系统范围的配置文件 /etc/ssh/ssh_config 管理。用户配置文件 ~/.ssh/config 可覆盖 ssh_config 文件中的设置。此外,用户可在命令行中覆盖这两个配置文件。
服务器的 /etc/ssh/sshd_config 文件中的设置确定服务器允许哪些客户机请求。有关服务器配置设置的列表,请参见 Solaris 安全 Shell 中的关键字。有关详细信息,请参见 sshd_config(4) 手册页。
Solaris 安全 Shell 中的关键字中列出了客户机配置文件中的关键字;如果关键字具有缺省值,则会给出该值。ssh(1)、scp(1)、sftp(1) 和 ssh_config(4) 手册页中详细介绍了这些关键字。有关以字母顺序排列的关键字列表及其等效命令行覆盖,请参见表 19–8。
Solaris 安全 Shell 会话的服务器端特征由 /etc/ssh/sshd_config 文件管理。Solaris 安全 Shell 中的关键字中列出了服务器配置文件中的关键字;如果关键字具有缺省值,则会给出该值。有关这些关键字的完整说明,请参见 sshd_config(4) 手册页。
下表列出了关键字及其缺省值(如果存在)。这些关键字按字母顺序排列。客户机上的关键字位于 ssh_config 文件中。应用于服务器的关键字位于 sshd_config 文件中。一些关键字在两个文件中均有设置。如果关键字仅应用于一种协议版本,则列出了该版本。
表 19–1 Solaris 安全 Shell 配置文件中的关键字(A 到 Escape)
关键字 |
缺省值 |
位置 |
协议 |
---|---|---|---|
无缺省值。 |
服务器 | ||
no |
服务器 | ||
无缺省值。 |
服务器 | ||
~/.ssh/authorized_keys |
服务器 | ||
/etc/issue |
服务器 | ||
no |
客户机 | ||
无缺省值。 |
客户机 | ||
yes |
客户机 | ||
客户机 |
v1 |
||
两者 |
v2 |
||
无缺省值。 |
客户机 | ||
0 |
服务器 |
v2 |
|
3 |
服务器 |
v2 |
|
yes |
两者 | ||
无缺省值。 |
客户机 | ||
1 |
客户机 | ||
无缺省值。 |
服务器 | ||
无缺省值。 |
服务器 | ||
无缺省值。 |
客户机 | ||
~ |
客户机 |
表 19–2 Solaris 安全 Shell 配置文件中的关键字(Fall 到 Local)
关键字 |
缺省值 |
位置 |
协议 |
---|---|---|---|
no |
客户机 | ||
no |
客户机 | ||
no |
客户机 | ||
no |
两者 | ||
/etc/ssh/ssh_known_hosts |
客户机 | ||
yes |
两者 |
v2 |
|
no |
客户机 |
v2 |
|
yes |
两者 |
v2 |
|
no |
客户机 |
v2 |
|
*有关更多信息,请参见 Solaris 安全 Shell 中的主机特定参数。 |
客户机 | ||
no |
两者 |
v2 |
|
no |
服务器 |
v2 |
|
/etc/ssh/ssh_host_key |
服务器 |
v1 |
|
HostKey |
/etc/ssh/host_rsa_key, /etc/ssh/host_dsa_key |
服务器 |
v2 |
ssh-rsa, ssh-dss |
客户机 |
v2 |
|
无缺省值。 |
客户机 |
v2 |
|
~/.ssh/identity |
客户机 |
v1 |
|
IdentityFile |
~/.ssh/id_dsa, ~/.ssh/id_rsa |
客户机 |
v2 |
yes |
服务器 | ||
yes |
服务器 | ||
yes |
两者 | ||
yes |
两者 | ||
3600(秒) |
服务器 | ||
无缺省值。 |
服务器 | ||
无缺省值。 |
客户机 |
表 19–3 Solaris 安全 Shell 配置文件中的关键字(Login 到 R)
关键字 |
缺省值 |
位置 |
协议 |
---|---|---|---|
600(秒) |
服务器 | ||
info |
两者 | ||
yes |
服务器 | ||
两者 |
v2 |
||
6 |
服务器 | ||
无缺省值。 |
服务器 | ||
10:30:60 |
服务器 | ||
no |
客户机 | ||
3 |
客户机 | ||
yes |
服务器 |
v2 |
|
yes |
两者 | ||
no |
服务器 | ||
no |
服务器 | ||
no |
服务器 | ||
gssapi-keyex, gssapi-with-mic, hostbased, publickey, keyboard-interactive, password |
客户机 |
v2 |
|
22 |
两者 | ||
no |
服务器 | ||
2 |
两者 | ||
无缺省值。 |
客户机 | ||
yes |
两者 |
v2 |
|
无缺省值。 |
客户机 | ||
no |
两者 |
v1 |
|
no |
两者 |
v1 |
|
no |
两者 |
v1 |
表 19–4 Solaris 安全 Shell 配置文件中的关键字(S 到 X)
关键字 |
缺省值 |
位置 |
协议 |
---|---|---|---|
768 |
服务器 | ||
ask |
客户机 | ||
yes |
服务器 | ||
sftp /usr/lib/ssh/sftp-server |
服务器 | ||
auth |
服务器 | ||
no,已过时并被忽略。 |
服务器 | ||
无缺省值。 |
客户机 | ||
~/.ssh/known_hosts |
客户机 | ||
no |
服务器 | ||
yes |
服务器 | ||
10 |
服务器 | ||
yes |
服务器 | ||
无缺省值。 |
两者 |
如果不同的本地主机具有不同 Solaris 安全 Shell 特征很有用,则管理员可以在 /etc/ssh/ssh_config 文件中定义单独的参数组,以根据主机或正则表达式进行应用。通过按 Host 关键字对文件中的项进行分组,可完成此任务。如果不使用 Host 关键字,则客户机配置文件中的项将应用于任一用户正在使用的本地主机。
如果 sshd_config 文件中未设置以下 Solaris 安全 Shell 关键字,则这些关键字将从 /etc/default/login 文件的等效项中获取各自的值:
/etc/default/login 中的项 |
sshd_config 中的关键字和值 |
---|---|
PermitRootLogin=without-password |
|
#CONSOLE=* |
PermitRootLogin=yes |
PermitEmptyPasswords=no |
|
PASSREQ=NO |
PermitEmptyPasswords=yes |
#PASSREQ |
PermitEmptyPasswords=no |
LoginGraceTime=secs |
|
#TIMEOUT |
LoginGraceTime=300 |
仅应用于 password 和 keyboard-interactive 验证方法。 |
通过 login 命令设置以下变量后,sshd 守护进程将使用这些值。未设置这些变量时,守护进程将使用缺省值。
控制 SHELL 环境变量的设置。缺省值是 ALTSHELL=YES,此时 sshd 守护进程使用用户 shell 的值。ALTSHELL=NO 时,不设置 SHELL 值。
有关更多信息,请参见 login(1) 和 sshd(1M) 手册页。
需要与其他主机安全通信的每台主机都必须将服务器的公钥存储在本地主机的 /etc/ssh/ssh_known_hosts 文件中。虽然脚本可用于更新 /etc/ssh/ssh_known_hosts 文件,但是强烈建议不要这样做,因为脚本会打开严重的安全漏洞。
/etc/ssh/ssh_known_hosts 文件应只按如下安全机制分发:
通过安全连接,如 Solaris 安全 Shell、IPsec 或已知和受信任计算机的基于 Kerberos 的 ftp
在系统安装时
要避免入侵者通过向 known_hosts 文件插入伪造公钥而获得访问权限的可能性,应使用 JumpStartTM 服务器作为 ssh_known_hosts 文件的已知和受信任源。ssh_known_hosts 文件可在安装过程中分发。然后,可将使用 scp 命令的脚本用于引入最新版本。由于每台主机都已具有 JumpStart 服务器的公钥,因此此方法是安全的。
Solaris 安全 Shell 依赖于核心 Solaris 软件包和以下软件包:
SUNWgss-包含通用安全服务 (Generic Security Service, GSS) 软件
SUNWtcpd-包含 TCP 包装
SUNWopenssl-libraries-包含 OpenSSL 库
SUNWzlib-包含 zip 压缩库
以下软件包安装 Solaris 安全 Shell:
SUNWsshr-包含根 (/) 目录的客户机文件和实用程序
SUNWsshdr-包含根 (/) 目录的服务器文件和实用程序
SUNWsshcu-包含 /usr 目录的公用源文件
SUNWsshdu-包含 /usr 目录的服务器文件
SUNWsshu-包含 /usr 目录的客户机文件和实用程序
安装后重新引导时,sshd 守护进程将运行。该守护进程在系统中创建主机密钥。运行 sshd 守护进程的 Solaris 系统是 Solaris 安全 Shell 服务器。
下表显示了重要的 Solaris 安全 Shell 文件和建议的文件权限。
表 19–5 Solaris 安全 Shell 文件
文件名 |
说明 |
建议的权限和属主 |
---|---|---|
包含 sshd(Solaris 安全 Shell 守护进程)的配置数据。 |
-rw-r--r-- root |
|
包含主机私钥 (v1)。 |
-rw-r--r-- root |
|
包含主机私钥 (v2)。 |
-rw-r--r-- root |
|
包含主机公钥,如 /etc/ssh/ssh_host_rsa_key.pub。用于将主机密钥复制到本地 known_hosts 文件中。 |
-rw-r--r-- root |
|
包含 Solaris 安全 Shell 守护进程 sshd 的进程 ID。如果正在运行多个守护进程,则文件包含最后启动的守护进程。 |
-rw-r--r-- root |
|
存储允许登录到用户帐户的用户公钥。 |
-rw-rw-r-- username |
|
包含客户机可安全与其通信的所有主机的主机公钥。此文件由管理员填写。 |
-rw-r--r-- root |
|
包含客户机可安全与其通信的所有主机的主机公钥。该文件将会自动维护。只要用户与未知主机连接,就会向该文件中添加远程主机密钥。 |
-rw-r--r-- username |
|
未设置对应的 sshd_config 参数时,将为 sshd 守护进程提供缺省值。 |
-r--r--r-- root |
|
如果此文件存在,则 sshd 守护进程只允许 root 登录。此文件的内容将向尝试登录的用户显示。 |
-rw-r--r-- root |
|
包含指定用户无需口令即可登录主机的主机-用户名称对。rlogind 和 rshd 守护进程也使用此文件。 |
-rw-r--r-- username |
|
包含指定用户无需口令即可登录主机的主机-用户名称对。其他实用程序不使用此文件。有关更多信息,请参见 sshd(1M) 手册页中的 FILES 部分。 |
-rw-r--r-- username |
|
包含 .rhosts 验证中使用的主机。rlogind 和 rshd 守护进程也使用此文件。 |
-rw-r--r-- root |
|
包含基于主机的验证中使用的主机。其他实用程序不使用此文件。 |
-rw-r--r-- root |
|
包含登录时的初始赋值。缺省情况下,不会读取此文件。要读取此文件,必须将 sshd_config 文件中的 PermitUserEnvironment 关键字设置为 yes。 |
-rw------- username |
|
包含启动用户 shell 前运行的初始化例程。有关初始化例程的样例,请参见 sshd 手册页。 |
-rw------- username |
|
包含管理员指定的主机特定的初始化例程。 |
-rw-r--r-- root |
|
配置客户机系统上的系统设置。 |
-rw-r--r-- root |
|
配置用户设置。覆盖系统设置。 |
-rw------- username |
下表列出了可被关键字或命令选项覆盖的 Solaris 安全 Shell 文件。
表 19–6 覆盖 Solaris 安全 Shell 文件的位置
文件名 |
关键字覆盖 |
命令行覆盖 |
---|---|---|
|
ssh -F config-file scp -F config-file |
|
|
ssh -F config-file |
|
/etc/ssh/host_dsa_key |
HostKey |
|
IdentityFile |
ssh -i id-file scp -i id-file |
|
AuthorizedKeysFile |
|
|
GlobalKnownHostsFile |
|
|
UserKnownHostsFile IgnoreUserKnownHosts |
|
下表汇总了主要的 Solaris 安全 Shell 命令。
表 19–7 Solaris 安全 Shell 中的命令
下表列出了覆盖 Solaris 安全 Shell 关键字的命令选项。这些关键字在 ssh_config 和 sshd_config 文件中指定。
表 19–8 Solaris 安全 Shell 关键字的命令行等效关键字
关键字 |
ssh 命令行覆盖 |
scp 命令行覆盖 |
---|---|---|
BatchMode |
|
scp -B |
BindAddress |
ssh -b bind-addr |
scp -a bind-addr |
Cipher |
ssh -c cipher |
scp -c cipher |
Ciphers |
ssh -c cipher-spec |
scp -c cipher-spec |
Compression |
ssh -C |
scp -C |
DynamicForward |
ssh -D SOCKS4-port |
|
EscapeChar |
ssh -e escape-char |
|
ForwardAgent |
ssh -A(启用) ssh -a(禁用) |
|
ForwardX11 |
ssh -X(启用) ssh -x(禁用) |
|
GatewayPorts |
ssh -g |
|
IPv4 |
ssh -4 |
scp -4 |
IPv6 |
ssh -6 |
scp -6 |
LocalForward |
ssh -L localport:remotehost:remoteport |
|
MACS |
ssh -m mac-spec |
|
Port |
ssh -p port |
scp -P port |
Protocol |
ssh -1(仅用于 v1) ssh -2(仅用于 v2) |
|
RemoteForward |
ssh -R remoteport:localhost:localport |
|