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

第 5 部分 验证服务和安全通信

本部分讨论可以在非联网系统上或两个系统之间配置的验证服务。要配置经过验证的用户和系统的网络,请参见第 6 部分, Kerberos 服务

第 15 章 使用验证服务(任务)

本章介绍有关如何使用安全 RPC 通过 NFS 挂载来验证主机和用户的信息。以下是本章中的主题列表:

安全 RPC 概述

安全 RPC(Remote Procedure Call,远程过程调用)使用验证机制保护远程过程。Diffie-Hellman 验证机制可验证发出服务请求的主机和用户。此验证机制使用数据加密标准 (Data Encryption Standard, DES) 加密。使用安全 RPC 的应用程序包括 NFS 和名称服务(NIS 和 NIS+)。

NFS 服务和安全 RPC

NFS 可使多台主机通过网络共享文件。在 NFS 服务中,一台服务器可为多台客户机保存数据和资源。这些客户机具有访问服务器与客户机共享的文件系统的权限。登录到客户机系统的用户可以通过从服务器挂载文件系统来访问文件系统。对于客户机系统上的用户,就好像这些文件是客户机的本地文件。NFS 的一种最常见的用途是允许将系统安装在办公室中,同时将所有用户文件存储在中心位置。NFS 服务的某些功能(例如 mount 命令的 -nosuid 选项)可用于禁止未经授权的用户打开设备和文件系统。

NFS 服务使用安全 RPC 来验证通过网络发出请求的用户。此过程称为安全 NFS。Diffie-Hellman 验证机制 AUTH_DH 使用 DES 加密来确保授权访问。 AUTH_DH 机制也称为 AUTH_DES。 详细信息,请参见以下内容:

使用安全 NFS 的 DES 加密

数据加密标准 (Data Encryption Standard, DES) 加密功能使用 56 位密钥来加密数据。如果两个凭证用户或主体知道同一 DES 密钥,则他们可以通过使用此密钥加密和解密文本来进行秘密通信。DES 是一种相对迅速的加密机制。DES 芯片可使加密更迅速。但是,如果不存在此芯片,则将替换软件实现。

仅使用 DES 密钥的风险是入侵者可以收集足够的使用相同密钥加密的加密文本消息,从而能够获取密钥并对这些消息进行解密。因此,安全系统(例如安全 NFS)需要经常更改密钥。

Kerberos 验证

Kerberos 是 MIT(麻省理工学院)开发的验证系统。Kerberos 中的某些加密基于 DES。Kerberos V4 支持不再作为安全 RPC 的一部分提供。但是,此发行版中包括使用 RPCSEC_GSS 的 Kerberos V5 客户端和服务器端实现。有关更多信息,请参见第 20 章,Kerberos 服务介绍

Diffie-Hellman 验证

入侵者很难破解用于验证用户的 Diffie-Hellman (DH) 方法。客户机和服务器都有自己的私钥,它们将此私钥与公钥一起使用以设计公用密钥。私钥也称为密钥。客户机和服务器使用公用密钥来相互通信。公用密钥使用公认的加密功能(例如 DES)进行加密。

验证基于发送系统使用公用密钥加密当前时间的能力。然后,接收系统可以进行解密,并根据其当前时间进行检查。客户机和服务器上的时间必须同步。有关更多信息,请参见《系统管理指南:网络服务》中的“管理网络时间协议(任务)”

公钥和私钥存储在 NIS 或 NIS+ 数据库中。NIS 将密钥存储在 publickey 映射中。NIS+ 将密钥存储在 cred 表中。这些文件包含所有潜在用户的公钥和私钥。

系统管理员负责设置 NIS 映射或 NIS+ 表,以及为每个用户生成公钥和私钥。将使用用户口令以加密格式存储私钥。此过程使得私钥只对此用户公开。

Diffie-Hellman 验证的实现

本节介绍客户机-服务器会话中使用 Diffie-Hellman 验证 (AUTH_DH) 的系列事务。

生成公钥和密钥

执行事务之前,管理员会运行 newkeynisaddcred 命令来生成公钥和密钥。每个用户都拥有唯一的公钥和密钥。公钥存储在公共数据库中。密钥以加密格式存储在同一数据库中。chkey 命令可更改密钥对。

运行 keylogin 命令

通常,登录口令与安全 RPC 口令相同。在这种情况下,不需要 keylogin 命令。但是,如果口令不同,则用户必须登录,然后运行 keylogin 命令。

keylogin 命令提示用户键入安全 RPC 口令。此命令然后使用口令对密钥进行解密。随后,keylogin 命令将解密的密钥传递到 keyserver 程序。keyserver 是一种在每台计算机上都有本地实例的 RPC 服务。keyserver 会保存解密的密钥,并等待用户使用服务器启动安全 RPC 事务。

如果登录口令与 RPC 口令相同,则登录进程会将密钥传递到 keyserver。如果要求不同的口令,则用户必须始终运行 keylogin 命令。如果 keylogin 命令包括在用户的环境配置文件(例如 ~/.login~/.cshrc ~/.profile 文件)中,则用户登录时便会自动运行 keylogin 命令。

生成对话密钥

用户使用服务器启动事务时,将发生以下情况:

  1. keyserver 随机生成一个对话密钥。

  2. 内核使用此对话密钥以及其他材料对客户机的时间标记进行加密。

  3. keyserver 在公钥数据库中查找服务器的公钥。有关更多信息,请参见 publickey(4) 手册页。

  4. keyserver 使用客户机的密钥以及服务器的公钥来创建一个公用密钥。

  5. keyserver 使用此公用密钥对此对话密钥进行加密。

初始联系服务器

然后,会将包含加密的时间标记和对话密钥的传输内容发送到服务器。此传输内容包括凭证和检验器。此凭证包含三个组件:

此窗口显示客户机允许服务器时钟与客户机时间标记之间存在的时间差异。如果服务器时钟与时间标记之间的差异大于此窗口显示的值,则服务器会拒绝客户机的请求。正常情况下,不会出现这种拒绝,因为客户机在启动 RPC 会话之前会先与服务器进行同步。

客户机的检验器包含以下内容:

如果某人要模拟用户,则会需要窗口检验器。模拟者可以编写一个程序,从而只需插入随机位,而无需填写凭证和检验器的已加密字段。服务器将对话密钥解密为某一随机密钥。然后,服务器使用此密钥尝试对窗口和时间标记进行解密。结果是随机数字。但是,经过几千次尝试之后,随机窗口/时间标记对可能会通过验证系统。窗口检验器可降低假凭证通过验证的可能性。

解密对话密钥

服务器从客户机接收传输内容时,将发生以下情况:

  1. 服务器的本地 keyserver 在公钥数据库中查找客户机的公钥。

  2. keyserver 使用客户机的公钥以及服务器的密钥来推导公用密钥。此公用密钥与客户机计算所得的公用密钥相同。只有服务器和客户机才能计算公用密钥,因为此计算过程需要知道其中一个密钥。

  3. 内核使用公用密钥对此对话密钥进行解密。

  4. 内核调用 keyserver 以使用解密的对话密钥对客户机的时间标记进行解密。

在服务器上存储信息

服务器对客户机的时间标记进行解密之后,将在凭证表中存储四个信息项:

服务器存储前三项供将来使用,存储客户机的时间标记以防止重放。服务器只接受时间上晚于最新时间标记的时间标记。因此,可保证拒绝任何重放的事务。


注 –

调用方的名称将隐含在这些事务中,此调用方必须通过某种方式进行验证。keyserver 不能使用 DES 验证来验证调用方,因为 keyserver 使用 DES 时会导致死锁。为了避免死锁,keyserver 将通过用户 ID (user ID, UID) 来存储密钥,并且只将请求授予本地 root 进程。


将检验器返回到客户机

服务器将检验器返回到客户机,其中包括以下内容:

从客户机的时间标记中减 1 的原因是确保此时间标记已过时。过时的时间标记不能再用作客户机检验器。

验证服务器

客户机将接收检验器并验证服务器。客户机知道只有服务器才能发送检验器,因为只有服务器知道客户机发送的时间标记。

处理事务

对于第一个事务之后的每一个事务,客户机都在其下一个事务中将索引 ID 返回到服务器。客户机还发送另一个加密的时间标记。服务器会将使用对话密钥加密的减 1 的客户机时间标记发送回来。

管理安全 RPC(任务列表)

以下任务列表说明为 NIS、NIS+ 和 NFS 配置安全 RPC 的过程。

任务 

说明 

参考 

1. 启动 keyserver。 

确保可以创建密钥以对用户进行验证。 

如何重新启动安全 RPC Keyserver

2. 在 NIS+ 主机上设置凭证。 

确保主机上的 root 用户可以在 NIS+ 环境中进行验证。

如何为 NIS+ 主机设置 Diffie-Hellman 密钥

3. 为 NIS+ 用户提供密钥。 

使用户可以在 NIS+ 环境中进行验证。 

如何为 NIS+ 用户设置 Diffie-Hellman 密钥

4. 在 NIS 主机上设置凭证。 

确保主机上的 root 用户可以在 NIS 环境中进行验证。

如何为 NIS 主机设置 Diffie-Hellman 密钥

5. 为 NIS 用户提供密钥。 

使用户可以在 NIS 环境中进行验证。 

如何为 NIS 用户设置 Diffie-Hellman 密钥

6. 通过验证共享 NFS 文件。 

使 NFS 服务器可以使用验证来安全地保护共享的文件系统。 

如何通过 Diffie-Hellman 验证共享 NFS 文件

使用安全 RPC 管理验证

通过要求对已挂载 NFS 文件系统的使用进行验证,可以增强网络的安全性。

Procedure如何重新启动安全 RPC Keyserver

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

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

  2. 检验 keyserv 守护进程是否正在运行。


    # svcs \*keyserv\*
    
    STATE    STIME   FMRI
    
    disabled Dec_14  svc:/network/rpc/keyserv
  3. 如果 keyserver 服务未联机,则启用此服务。


    # svcadm enable network/rpc/keyserv
    

Procedure如何为 NIS+ 主机设置 Diffie-Hellman 密钥

应该针对 NIS+ 域中的每个主机执行此过程。以 root 身份运行 keylogin 命令之后,服务器便会具有 mech_dh 的 GSS-API 接收器凭证,而客户机具有 GSS-API 启动器凭证。

有关 NIS+ 安全性的详细说明,请参见《System Administration Guide: Naming and Directory Services (NIS+)》

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

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

  2. 在名称服务中启用 publickey 表。

    将以下行添加到 /etc/nsswitch.conf 文件中:


    publickey: nisplus
  3. 初始化 NIS+ 客户机。


    # nisinit -cH hostname
    

    其中,hostname 是其表中包含客户机系统项的受信任 NIS+ 服务器的名称。

  4. 将客户机添加到 cred 表中。

    键入以下命令:


    # nisaddcred local
    
    # nisaddcred des
    
  5. 使用 keylogin 命令检验此设置。

    如果系统提示键入口令,则表示此过程已经成功。


    # keylogin
    
    Password:

示例 15–1 在 NIS+ 客户机上为 root 设置新密钥

以下示例使用主机 plutoearth 设置为 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:        <键入口令>

#

Procedure如何为 NIS+ 用户设置 Diffie-Hellman 密钥

应该针对 NIS+ 域中的每个用户执行此过程。

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

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

  2. 在根主服务器上将用户添加到 cred 表中。

    键入以下命令:


    # nisaddcred -p unix.UID@domain-name -P username.domain-name. des
    

    请注意,在这种情况下,username.domain-name 必须以点 (.) 结束。

  3. 通过以客户身份登录并键入 keylogin 命令来检验此设置。


示例 15–2 为 NIS+ 用户设置新密钥

在以下示例中,将为用户 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:       <键入口令>

%

Procedure如何为 NIS 主机设置 Diffie-Hellman 密钥

应该针对 NIS 域中的每个主机执行此过程。

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

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

  2. 在名称服务中启用 publickey 映射。

    将以下行添加到 /etc/nsswitch.conf 文件中:


    publickey: nis
  3. 使用 newkey 命令创建一个新的密钥对。


    # newkey -h hostname
    

    其中,hostname 是客户机的名称。


示例 15–3 在 NIS 客户机上为 root 设置新密钥

在以下示例中,会将 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.

#

Procedure如何为 NIS 用户设置 Diffie-Hellman 密钥

应该针对 NIS 域中的每个用户执行此过程。

开始之前

只有系统管理员在登录到 NIS 主服务器时才能为用户生成新密钥。

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

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

  2. 为用户创建新密钥。


    # newkey -u username
    

    其中,username 是用户的名称。系统将提示键入口令。您可以键入通用口令。将使用此通用口令以加密格式存储私钥。

  3. 通知用户登录并键入 chkey -p 命令。

    此命令允许用户使用只有其自己知道的口令重新加密其私钥。


    注 –

    可以使用 chkey 命令为用户创建新密钥对。



示例 15–4 在 NIS 中设置并加密新用户密钥

在此示例中,超级用户将设置密钥。


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

#

然后,用户 jdoe 将使用私人口令对此密钥进行重新加密。


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

Procedure如何通过 Diffie-Hellman 验证共享 NFS 文件

此过程通过要求访问验证来保护 NFS 服务器上的共享文件系统。

开始之前

必须在网络中启用 Diffie-Hellman 公钥验证。要在网络中启用验证,请执行以下操作之一:

  1. 成为超级用户或承担拥有系统管理配置文件的角色。

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

  2. 在 NFS 服务器上,通过 Diffie-Hellman 验证共享文件系统。


    # share -F nfs -o sec=dh /filesystem
    

    其中,filesystem 是要共享的文件系统。

    -o sec=dh 选项意味着现在需要通过 AUTH_DH 验证来访问文件系统。

  3. 在 NFS 客户机上,通过 Diffie-Hellman 验证挂载文件系统。


    # mount -F nfs -o sec=dh server:filesystem mount-point
    
    server

    共享 filesystem 的系统的名称

    filesystem

    共享的文件系统的名称,例如 opt

    mount-point

    挂载点的名称,例如 /opt

    -o sec=dh 选项通过 AUTH_DH 验证挂载文件系统。

第 16 章 使用 PAM

本章介绍可插拔验证模块 (Pluggable Authentication Module, PAM) 框架。PAM 提供了一种向 Solaris 操作系统 (Solaris Operating System, Solaris OS) 中“插入”验证服务的方法。PAM 会在访问系统时为多项验证服务提供支持。

PAM(概述)

使用可插拔验证模块 (Pluggable Authentication Module, PAM) 框架,可以“插入”新的验证服务,而无需更改系统登录服务,例如 loginftptelnet。还可以使用 PAM 将 UNIX 登录与其他安全机制(如 Kerberos)进行集成。也可以使用此框架来“插入”帐户、凭证、会话以及口令管理的机制。

使用 PAM 的益处

使用 PAM 框架,可以为用户验证配置系统登录服务(如 ftplogintelnetrsh)。PAM 提供的一些益处如下所示:

PAM 组件

PAM 软件由一个库、各种服务模块以及一个配置文件组成。其中还包括可利用这些 PAM 接口的 Solaris 命令或守护进程。

下图说明了系统登录应用程序、PAM 库、pam.conf 文件和 PAM 服务模块之间的关系。

图 16–1 PAM 工作原理

图中显示了如何在 PAM 模块与使用这些模块的应用程序之间放置 PAM 库。

系统登录应用程序(如 ftptelnet login)使用 PAM 库来调用配置策略。配置策略在 pam.conf 文件中定义。pam.conf 文件定义要使用的模块,以及每个应用程序使用这些模块的顺序。模块中的结果基于模块响应和已配置的控制标志。这些结果通过库传送回应用程序。

PAM 框架

PAM 框架提供了一种使用堆叠借助多项服务来验证用户的方法。根据配置,系统可以提示用户输入每种验证方法的口令。验证服务的使用顺序通过 PAM 配置文件确定。

PAM 库可提供框架以装入相应模块和管理堆叠过程。PAM 库提供了一种可在其中插入所有模块的通用结构。有关更多信息,请参见 pam_sm(3PAM) 手册页。

Solaris 10 发行版对 PAM 所做的更改

Solaris 10 发行版对可插拔验证模块 (Pluggable Authentication Module, PAM) 框架做了以下更改:

PAM(任务)

本节介绍使 PAM 框架使用特定安全策略所需执行的一些任务。应注意与 PAM 配置文件关联的某些安全问题。有关安全问题的信息,请参见规划 PAM 实现

PAM(任务列表)

任务 

说明 

参考 

规划 PAM 安装。 

开始软件配置过程之前,考虑配置问题并做出相关决定。 

规划 PAM 实现

添加新的 PAM 模块。 

有时,必须写入并安装特定于站点的模块,以满足通用软件不包括的要求。此过程说明如何安装这些新的 PAM 模块。 

如何添加 PAM 模块

阻止访问 ~/.rhosts

通过阻止访问 ~/.rhosts 来进一步提高安全性。

如何使用 PAM 防止从远程系统进行 Rhost 样式的访问

启动错误日志。 

通过 syslog 启动 PAM 错误消息日志。

如何记录 PAM 错误报告

规划 PAM 实现

所提供的 pam.conf 配置文件可实现标准的 Solaris 安全策略。此策略应适用于许多情况。如果需要实现其他安全策略,则应考虑以下问题:

以下是更改 PAM 配置文件之前要考虑的一些建议:

Procedure如何添加 PAM 模块

此过程说明如何添加新的 PAM 模块。可以创建新模块以提供特定于站点的安全策略或支持第三方应用程序。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见配置 RBAC(任务列表)

  2. 确定应使用的控制标志和其他选项。

    有关模块的信息,请参阅PAM 模块

  3. 确保设置了拥有权和权限,以便模块文件由 root 拥有,并且权限为 555

  4. 编辑 PAM 配置文件 /etc/pam.conf,并将此模块添加到相应的服务中。

  5. 检验是否正确添加了模块。

    必须在重新引导系统之前进行测试,以防此配置文件配置错误。在重新引导系统之前,使用直接服务(例如 rlogintelnet )登录,并运行 su 命令。此服务可能是引导系统时仅产生一次的守护进程。因此,必须先重新引导系统,然后才能检验是否已添加模块。

Procedure如何使用 PAM 防止从远程系统进行 Rhost 样式的访问

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见配置 RBAC(任务列表)

  2. 从 PAM 配置文件中删除所有包括 rhosts_auth.so.1 的行。

    此步骤用于防止在 rlogin 会话期间读取 ~/.rhosts 文件。因此,此步骤可防止从远程系统对本地系统进行未经验证的访问。无论 ~/.rhosts/etc/hosts.equiv 文件是否存在或包含什么内容,所有 rlogin 访问都需要口令。

  3. 禁用 rsh 服务。

    要防止对 ~/.rhosts 文件进行其他未经验证的访问,请记住要禁用 rsh 服务。


    # svcadm disable network/shell
    

Procedure如何记录 PAM 错误报告

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见配置 RBAC(任务列表)

  2. 为所需的日志级别配置 /etc/syslog.conf 文件。

    有关日志级别的更多信息,请参见 syslog.conf(4)

  3. 刷新 syslog 守护进程的配置信息。


    # svcadm refresh system/system-log
    

PAM 配置文件(参考)

PAM 配置文件 pam.conf 确定要使用的验证服务模块,以及这些模块的使用顺序。可以修改此文件来为每个系统登录应用程序选择验证模块。

PAM 配置文件语法

PAM 配置文件所包含项的语法如下:


service-name module-type control-flag module-path module-options
service-name

系统登录服务的名称,例如 ftp logintelnet

module-type

服务的模块类型。有关更多信息,请参见PAM 模块类型

control-flag

确定模块的延续行为或失败行为。

module-path

指定实现安全策略的库对象的路径。

module-options

指定传送到服务模块的选项。

通过以 #(井号)开始行,可以向 pam.conf 文件中添加注释。可以使用空格或制表符来分隔字段。


注 –

如果在 PAM 配置文件的项中发现错误,则会生成 syslog 错误消息。如果此错误是请求服务的项,则此服务可能会返回一个错误。


PAM 的服务名称

每项服务的特定服务名称应该在该服务的手册页中进行介绍。例如,sshd(1M) 手册页列出 sshd 命令的所有 PAM 服务名称。

PAM 模块类型

您需要了解 PAM 模块类型,因为这些类型定义模块的接口。以下是 PAM 模块的类型:

PAM 控制标志

使用 PAM 服务模块的请求返回以下三种状态之一:

栈中的每个模块都可以确定请求的成功或失败。要确定模块的延续行为或失败行为,必须为 PAM 配置文件中的每个项选择一个控制标志

延续行为定义是否检查后面的所有模块。根据特定模块的响应,可以决定跳过所有其他模块。

失败行为定义如何记录或报告错误消息。失败信息既可以是可选信息,也可以是必需信息。必需的失败信息会导致此请求失败,即使其他模块成功也是如此。可选的失败信息不会始终导致此请求失败。

控制标志如下所示:

有关这些控制标志的更多信息,请参见下一节,其中介绍了通用 /etc/pam.conf 文件。

PAM 模块

每个 PAM 模块都可实现一种特定的功能。设置 PAM 验证时,需要指定模块和模块类型,后者定义模块执行的操作。一个模块可以实现多个模块类型,例如 authaccountsessionpassword

每个模块的路径由已安装的 Solaris 发行版中提供的指令集确定。对于 32 位模块,模块路径为 /usr/lib/security。对于 64 位模块,路径为 /usr/lib/security/ $ISA。有关更多信息,请参见 isalist(5) 手册页。

Solaris PAM 模块的完整列表位于 /usr/lib/security/$ISA 中。每个模块都有关联的手册页,其中介绍了应用的模块类型以及所有的特殊选项。

出于安全原因,这些模块文件必须由 root 拥有,并且禁止使用 groupother 权限写入。如果文件并非由 root 拥有,则 PAM 不会装入模块。

通用 pam.conf 文件的示例

通用 /etc/pam.conf 文件包括以下项:


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_getpam_dhkeyspam_auth_credpam_auth_unixpam_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_getpam_dhkeyspam_auth_credpam_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 的值。

第 17 章 使用 SASL

本章介绍有关简单身份验证和安全层 (Simple Authentication and Security Layer, SASL) 的信息。

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 插件

SASL 插件提供对安全机制、用户标准化和辅助属性检索的支持。 缺省情况下,动态装入的 32 位插件安装在 /usr/lib/sasl 中,64 位插件安装在 /usr/lib/sasl/ $ISA 中。Solaris 10 发行版中提供了以下安全机制插件:

crammd5.so.1

CRAM-MD5,仅支持验证,不支持授权。

digestmd5.so.1

DIGEST-MD5,支持验证、完整性、保密性和授权。

gssapi.so.1

GSSAPI,支持验证、完整性、保密性和授权。GSSAPI 安全机制要求有效的 Kerberos 基础结构。

plain.so.1

PLAIN,支持验证和授权。

此外,EXTERNAL 安全机制插件和 INTERNAL 用户标准化插件内置在 libsasl.so.1 中。 EXTERNAL 机制支持验证和授权。如果外部安全源提供该机制,则该机制支持完整性和保密性。如果用户名需要,INTERNAL 插件将添加领域名称。

目前,Solaris 10 发行版不提供任何 auxprop 插件。 要使 CRAM-MD5 和 DIGEST-MD5 机制插件在服务器端能完全运行,用户必须提供 auxprop 插件以检索明文口令。 PLAIN 插件还需要其他的支持,以对口令进行验证。支持口令验证的有:对服务器应用程序的回调、auxprop 插件、saslauthdpwcheck。Solaris 发行版中未提供 salauthdpwcheck 守护进程。要获取更好的互操作性,可使用 mech_list SASL 选项将服务器应用程序限制为可完全运行的那些机制。

SASL 环境变量

缺省情况下,客户机验证名称被设置为 getenv("LOGNAME")。客户机或插件可以重置此变量。

SASL 选项

使用可在 /etc/sasl/app.conf 文件中设置的选项,可以在服务器端修改 libsasl 和插件的行为。变量 app 是服务器定义的应用程序名称。服务器 app 的文档应指定该应用程序名称。

Solaris 10 发行版支持以下选项:

auto_transition

用户成功进行纯文本验证后自动将其转换到其他机制。

auxprop_login

列出要使用的辅助属性插件的名称。

canon_user_plugin

选择要使用的 canon_user 插件。

mech_list

列出允许服务器应用程序使用的机制。

pwcheck_method

列出用于验证口令的机制。目前,auxprop 是唯一允许的值。

reauth_timeout

设置缓存验证信息以便进行快速重新验证的时间(以分钟为单位)。此选项由 DIGEST-MD5 插件使用。将此选项设置为 0 将禁用重新验证。

Solaris 10 发行版不支持以下选项:

plugin_list

列出可用机制。不使用该选项是因为它会更改动态装入插件的行为。

saslauthd_path

定义用于与 saslauthd 守护进程通信的 saslauthd 门的位置。Solaris 10 发行版中不包括 saslauthd 守护进程。因此,也不包括此选项。

keytab

定义 GSSAPI 插件使用的 keytab 文件的位置。可使用 KRB5_KTNAME 环境变量代替此选项来设置缺省 keytab 位置。

Cyrus SASL 中不包括以下选项。但是,Solaris 10 发行版中添加了这些选项:

use_authid

创建 GSS 客户机安全性上下文时获取客户机凭证而不是使用缺省凭证。缺省情况下,将使用缺省客户机 Kerberos 身份。

log_level

为服务器设置需要的日志级别。

第 18 章 使用 Solaris 安全 Shell(任务)

使用 Solaris 安全 Shell,用户可以通过不安全的网络安全地访问远程主机。该 shell 提供了用于远程登录和远程文件传输的命令。本章包含以下主题:

有关参考信息,请参见第 19 章,Solaris 安全 Shell(参考)

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 验证

Solaris 安全 Shell 提供公钥和口令方法来验证与远程主机的连接。公钥验证是一种比口令验证更强大的验证机制,因为私钥从不通过网络传送。

请按以下顺序尝试这些验证方法。如果配置不满足验证方法的要求,请尝试下一种方法。

下表显示了验证正在尝试登录到远程主机的用户的要求。该用户位于本地主机(客户机)上。远程主机(服务器)正在运行 sshd 守护进程。下表显示了 Solaris 安全 Shell 验证方法、兼容的协议版本和主机要求。

表 18–1 Solaris 安全 Shell 的验证方法

验证方法(协议版本) 

本地主机(客户机)要求 

远程主机(服务器)要求 

GSS-API (v2)

GSS 机制的启动器凭证。 

GSS 机制的接收器凭证。有关更多信息,请参见获取 Solaris 安全 Shell 中的 GSS 凭证

基于主机 (v2)

用户帐户 

/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 中的本地主机项

RSA 或 DSA 公钥 (v2)

用户帐户 

~/.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 中的用户公钥

键盘交互 (v2)

用户帐户 

用户帐户 

支持 PAM,包括触发口令生命期后的任意提示和口令更改。 

基于口令(v1 或 v2)

用户帐户 

用户帐户 

支持 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

有关 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。该文档集包括以下文章:

Solaris 10 发行版中 Solaris 安全 Shell 的增强功能

从 Solaris 9 发行版开始,Solaris 安全 Shell 中引入了以下变化:

Solaris 安全 Shell(任务列表)

以下任务列表介绍了用于配置 Solaris 安全 Shell 和使用 Solaris 安全 Shell 的任务列表。

任务 

说明 

参考 

配置 Solaris 安全 Shell 

指导管理员为用户配置 Solaris 安全 Shell。 

配置 Solaris 安全 Shell(任务列表)

使用 Solaris 安全 Shell 

指导用户使用 Solaris 安全 Shell。 

使用 Solaris 安全 Shell(任务列表)

配置 Solaris 安全 Shell(任务列表)

以下任务列表介绍了配置 Solaris 安全 Shell 的过程。

任务 

说明 

参考 

配置基于主机的验证 

在客户机和服务器上配置基于主机的验证。 

如何为 Solaris 安全 Shell 设置基于主机的验证

将主机配置为使用 v1 和 v2 

为使用 v1 和 v2 协议的主机创建公钥文件。 

如何启用 Solaris 安全 Shell v1

配置端口转发 

允许用户使用端口转发。 

如何在 Solaris 安全 Shell 中配置端口转发

配置 Solaris 安全 Shell

缺省情况下,Solaris 安全 Shell 中未启用基于主机的验证,并且不允许同时使用两种协议。更改这些缺省设置需要管理干预。另外,要端口转发正常工作,也需要管理干预。

Procedure如何为 Solaris 安全 Shell 设置基于主机的验证

以下过程将设置一个公钥系统,其中客户机的公钥用于服务器上的验证。用户还必须创建公钥/私钥对。

在此过程中,术语客户机本地主机是指用户键入 ssh 命令的计算机。术语服务器远程主机是指客户机要尝试访问的计算机。

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

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

  2. 在客户机上,启用基于主机的验证。

    在客户机配置文件 /etc/ssh/ssh_config 中,键入以下项:


    HostbasedAuthentication yes
  3. 在服务器上,启用基于主机的验证。

    在服务器配置文件 /etc/ssh/sshd_config 中,键入相同的项:


    HostbasedAuthentication yes
  4. 在服务器上,配置文件以允许将客户机识别为受信任主机。

    有关更多信息,请参见 sshd(1M) 手册页中的 FILES 部分。

    • 将客户机作为一项添加到服务器的 /etc/shosts.equiv 文件中。


      client-host
      
    • 或者,可以指示用户在服务器上将一个有关客户机的项添加到其 ~/.shosts 文件中。


      client-host
      
  5. 在服务器上,确保 sshd 守护进程可以访问受信任主机的列表。

    /etc/ssh/sshd_config 文件中,将 IgnoreRhosts 设置为 no


    # sshd_config
    
    IgnoreRhosts no
  6. 确保站点上的 Solaris 安全 Shell 用户在两台主机上都拥有帐户。

  7. 执行以下操作之一,以将客户机的公钥放到服务器上。

    • 修改服务器上的 sshd_config 文件,然后指示用户将客户机的公共主机密钥添加到其 ~/.ssh/known_hosts 文件中。


      # sshd_config
      
      IgnoreUserKnownHosts no

      有关用户说明,请参见如何生成用于 Solaris 安全 Shell 的公钥/私钥对

    • 将客户机的公钥复制到服务器。

      主机密钥存储在 /etc/ssh 目录中。这些密钥通常由 sshd 守护进程在首次引导时生成。

      1. 将密钥添加到服务器上的 /etc/ssh/ssh_known_hosts 文件中。

        在客户机上,在某一行中键入该命令(不带反斜杠)。


        # cat /etc/ssh/ssh_host_dsa_key | ssh RemoteHost \
        
        'cat >> /etc/ssh/ssh_known_hosts && echo "Host key copied"'
        
      2. 出现提示时,提供登录口令。

        复制文件时,将会显示消息 "Host key copied"。


示例 18–1 设置基于主机的验证

在以下示例中,每台主机同时配置为服务器和客户机。任一主机上的用户都可以启动与另一台主机的 ssh 连接。以下配置可使每台主机同时成为服务器和客户机:


Procedure如何启用 Solaris 安全 Shell v1

此过程在一台主机与运行 v1 和 v2 的多台主机交互操作时非常有用。

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

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

  2. 将主机配置为同时使用两种 Solaris 安全 Shell 协议。

    编辑 /etc/ssh/sshd_config 文件。


    # Protocol 2
    
    Protocol 2,1
  3. 为用于 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
    
  4. 生成用于 v1 的主机密钥。


    # ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_rsa1_key -N ''
    
    -t rsa1

    表示用于 v1 的 RSA 算法。

    -f

    表示保存主机密钥的文件。

    -N ''

    表示无需口令短语。

  5. 重新启动 sshd 守护进程。


    # svcadm restart network/ssh:default
    

    您也可以重新引导系统。

Procedure如何在 Solaris 安全 Shell 中配置端口转发

使用端口转发可以将本地端口转发到远程主机。实际上,分配了一个套接字用于侦听本地端的端口。同样,也可以在远程端指定端口。


注 –

Solaris 安全 Shell 端口转发必须使用 TCP 连接。Solaris 安全 Shell 不支持使用 UDP 连接进行端口转发。


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

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

  2. 将远程 Solaris 安全 Shell 服务器配置为允许端口转发。

    /etc/ssh/sshd_config 文件中,将 AllowTcpForwarding 的值更改为 yes


    # Port forwarding
    
    AllowTcpForwarding yes
  3. 重新启动 Solaris 安全 Shell 服务。


    remoteHost# svcadm restart network/ssh:default
    

    有关管理持久性服务的信息,请参见《系统管理指南:基本管理》中的第 14  章 “管理服务(概述)”svcadm(1M) 手册页。

  4. 检验是否可以使用端口转发。


    remoteHost# /usr/bin/pgrep -lf sshd
    
     1296 ssh -L 2001:remoteHost:23 remoteHost

使用 Solaris 安全 Shell(任务列表)

以下任务列表介绍了用户使用 Solaris 安全 Shell 的过程。

任务 

说明 

参考 

创建公钥/私钥对。 

针对要求公钥验证的站点启用对 Solaris 安全 Shell 的访问。 

如何生成用于 Solaris 安全 Shell 的公钥/私钥对

更改口令短语 

更改用于验证私钥的短语。 

如何更改 Solaris 安全 Shell 私钥的口令短语

使用 Solaris 安全 Shell 登录 

远程登录时提供加密的 Solaris 安全 Shell 通信。此过程与使用 rsh 命令类似。

如何使用 Solaris 安全 Shell 登录到远程主机

登录到 Solaris 安全 Shell 而不会出现提示要求输入口令。  

允许使用可向 Solaris 安全 Shell 提供口令的代理进行登录。 

如何减少 Solaris 安全 Shell 中的口令提示

如何将 ssh-agent 命令设置为自动运行

在 Solaris 安全 Shell 中使用端口转发 

指定要在基于 TCP 的 Solaris 安全 Shell 连接中使用的本地端口或远程端口。 

如何在 Solaris 安全 Shell 中使用端口转发

使用 Solaris 安全 Shell 复制文件 

在主机之间安全地复制文件。 

如何使用 Solaris 安全 Shell 复制文件

安全地从防火墙内的主机连接到防火墙外的主机。 

使用与 HTTP 或 SOCKS5 兼容的 Solaris 安全 Shell 命令连接由防火墙隔离的主机。 

如何设置到防火墙外部主机的缺省连接

使用 Solaris 安全 Shell

Solaris 安全 Shell 可提供本地 shell 和远程 shell 之间的安全访问。有关更多信息,请参见 ssh_config(4)ssh(1) 手册页。

Procedure如何生成用于 Solaris 安全 Shell 的公钥/私钥对

如果用户的站点要实现基于主机的验证或用户公钥验证,则必须生成公钥/私钥对。有关其他选项,请参见 ssh-keygen(1) 手册页。

开始之前

通过系统管理员确认是否配置了基于主机的验证。

  1. 启动密钥生成程序。


    myLocalHost% ssh-keygen -t rsa
    
    Generating public/private rsa key pair.
    
    …

    其中,-t 是算法类型,可以是 rsadsarsa1 之一。

  2. 指定将保存密钥的文件的路径。

    缺省情况下,文件名 id_rsa(表示 RSA v2 密钥)显示在括号中。可通过按回车键选择此文件。或者,可以键入替换的文件名。


    Enter file in which to save the key (/home/jdoe/.ssh/id_rsa):<按回车键>
    

    通过将字符串 .pub 附加到私钥文件的名称后,可以自动创建公钥的文件名。

  3. 键入使用密钥的口令短语。

    此口令短语用于加密私钥。强烈建议不要使用空项。请注意,键入口令短语时,它们不会显示。


    Enter passphrase (empty for no passphrase): <键入口令短语>
    
  4. 重新键入口令短语以进行确认。


    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
  5. 检查结果。

    检查密钥文件的路径是否正确。


    % ls ~/.ssh
    
    id_rsa
    
    id_rsa.pub

    此时,已创建公钥/私钥对。

  6. 选择适当的选项:

    • 如果管理员已配置了基于主机的验证,则可能需要将本地主机的公钥复制到远程主机。

      现在即可登录到远程主机。有关详细信息,请参见如何使用 Solaris 安全 Shell 登录到远程主机

      1. 在一行中键入命令(不带反斜杠)。


        % cat /etc/ssh/ssh_host_dsa_key | ssh RemoteHost \
        
        'cat >> ~./ssh/known_hosts && echo "Host key copied"'
        
      2. 出现提示时,提供登录口令。


        Enter password: <键入口令>
        
        Host key copied
        
        %
    • 如果站点使用公钥来进行用户验证,请在远程主机上装载 authorized_keys 文件。

      1. 将公钥复制到远程主机。

        在一行中键入命令(不带反斜杠)。


        myLocalHost% cat $HOME/.ssh/id_rsa.pub | ssh myRemoteHost \
        
        'cat >> .ssh/authorized_keys && echo "Key copied"'
        
      2. 出现提示时,提供登录口令。

        复制文件时,将会显示消息 "Key copied"。


        Enter password: 键入登录口令
        
        Key copied
        
        myLocalHost%
  7. (可选的)减少口令短语的提示。

    有关过程,请参见如何减少 Solaris 安全 Shell 中的口令提示。有关更多信息,请参见 ssh-agent(1)ssh-add(1) 手册页。


示例 18–2 为用户建立 v1 RSA 密钥

在以下示例中,用户可以访问运行 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"'

Procedure如何更改 Solaris 安全 Shell 私钥的口令短语

以下过程不会更改私钥。此过程将更改私钥的验证机制,即口令短语。有关更多信息,请参见 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 用于请求更改私钥文件的口令短语。

Procedure如何使用 Solaris 安全 Shell 登录到远程主机

  1. 启动 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)? 

    初始连接到远程主机时,出现此提示为正常情况。

  2. 如果出现提示,请检验远程主机密钥的真实性。

    • 如果无法确认远程主机的真实性,请键入 no 并与系统管理员联系。


      Are you sure you want to continue connecting(yes/no)? no
      

      管理员负责更新全局 /etc/ssh/ssh_known_hosts 文件。更新的 ssh_known_hosts 文件可禁止出现此提示。

    • 如果确认了远程主机的真实性,请回答提示问题,并继续下一步。


      Are you sure you want to continue connecting(yes/no)? yes
      
  3. 向 Solaris 安全 Shell 验证自身的身份。

    1. 出现提示时,键入口令短语。


      Enter passphrase for key '/home/jdoe/.ssh/id_rsa': <键入口令短语>
      
    2. 出现提示时,键入帐户口令。


      jdoe@myRemoteHost's password: <键入口令>
      
      Last login: Fri Jul 20 14:24:10 2001 from myLocalHost
      
      myRemoteHost%
  4. 执行远程主机上的事务。

    所发送的命令将会加密。所接收的任何响应都会加密。

  5. 关闭 Solaris 安全 Shell 连接。

    完成后,键入 exit 或者使用常规方法退出 shell。


    myRemoteHost% exit
    
    myRemoteHost% logout
    
    Connection to myRemoteHost closed
    
    myLocalHost%

Procedure如何减少 Solaris 安全 Shell 中的口令提示

如果不想键入口令短语和口令来使用 Solaris 安全 Shell,则可以使用代理守护进程。请在会话开始时启动守护进程。然后,使用 ssh-add 命令将私钥存储到代理守护进程中。如果您在不同的主机上拥有不同的帐户,请添加需要用于会话的密钥。

可以根据需要手动启动代理守护进程,如以下过程中所述。或者,可以将代理守护进程设置为在每个会话开始时自动运行,如如何将 ssh-agent 命令设置为自动运行中所述。

  1. 启动代理守护进程。


    myLocalHost% ssh-agent
    
  2. 检验是否已启动代理守护进程。


    myLocalHost% eval `ssh-agent`
    
    Agent pid 9892
  3. 将私钥添加到代理守护进程。

    键入 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%
  4. 启动 Solaris 安全 Shell 会话。


    myLocalHost% ssh myRemoteHost
    

    此时不会提示您输入口令短语。


示例 18–3 使用 ssh-add 选项

在本示例中,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)

Procedure如何将 ssh-agent 命令设置为自动运行

只要通过自动启动代理守护进程 ssh-agent 来使用 Solaris 安全 Shell,即可避免提供口令短语和口令。可以通过 .dtprofile 脚本启动代理守护进程。要将口令短语和口令添加到代理守护进程,请参见示例 18–3

  1. 在用户启动脚本中自动启动代理守护进程。

    将以下行添加到 $HOME/.dtprofile 脚本的末尾:


    if [ "$SSH_AUTH_SOCK" = "" -a -x /usr/bin/ssh-agent ]; then
    
                    eval `/usr/bin/ssh-agent`
    
    fi
  2. 退出 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 代理。

Procedure如何在 Solaris 安全 Shell 中使用端口转发

可以指定将本地端口转发到远程主机。实际上,分配了一个套接字用于侦听本地端的端口。从此端口到远程主机的连接基于安全通道。例如,可以指定端口 143 以使用 IMAP4 远程获取电子邮件。同样,也可以在远程端指定端口。

开始之前

使用端口转发之前,管理员必须先在远程 Solaris 安全 Shell 服务器上启用端口转发。有关详细信息,请参见如何在 Solaris 安全 Shell 中配置端口转发

    要使用安全的端口转发,请选择以下选项之一:

    • 要将本地端口设置为接收来自远程端口的安全通信,请同时指定这两个端口。

      指定用于侦听远程通信的本地端口。另外,指定用于转发通信的远程主机和远程端口。


      myLocalHost% ssh -L localPort:remoteHost:remotePort 
      
    • 要将远程端口设置为接收来自本地端口的安全通信,请同时指定这两个端口。

      指定用于侦听远程通信的远程端口。另外,指定用于转发通信的本地主机和本地端口。


      myLocalHost% ssh -R remotePort:localhost:localPort
      

示例 18–4 使用本地端口转发接收邮件

以下示例说明如何使用本地端口转发来安全地接收来自远程服务器的邮件。


myLocalHost% ssh -L 9143:myRemoteHost:143 myRemoteHost 

此命令可将连接从 myLocalHost 上的端口 9143 转发到端口 143。端口 143myRemoteHost 上的 IMAP v2 服务器端口。用户启动邮件应用程序时,需要指定本地端口号,如以下对话框中所示。

标题为“邮寄程序-登录”的对话框。“IMAP 服务器”字段显示服务器名,后跟冒号和端口号。

请勿将对话框中的 localhostmyLocalHost 混淆。myLocalHost 是假设的主机名,而 localhost 则是用于标识本地系统的关键字。



示例 18–5 使用远程端口转发在防火墙外部进行通信

本示例说明企业环境中的用户如何将连接从外部网络中的主机转发到公司防火墙内的主机。


myLocalHost% ssh -R 9022:myLocalHost:22 myOutsideHost

此命令可将连接从 myOutsideHost 上的端口 9022 转发到本地主机上的端口 22sshd 服务器)。


myOutsideHost% ssh -p 9022 localhost

myLocalHost%

Procedure如何使用 Solaris 安全 Shell 复制文件

以下过程说明如何使用 scp 命令在主机之间复制加密的文件。您可以在一台本地主机和一台远程主机之间,或者两台远程主机之间复制加密的文件。该命令的运行与 rcp 命令类似,不同的是 scp 命令会提示进行验证。有关更多信息,请参见 scp(1) 手册页。

也可以使用 sftp(一种形式更安全的 ftp 命令)。有关更多信息,请参见 sftp(1) 手册页。

  1. 启动安全的复制程序。

    指定源文件、远程目标上的用户名和目标目录。


    myLocalHost% scp myfile.1 jdoe@myRemoteHost:~
    
  2. 出现提示时,提供口令短语。


    Enter passphrase for key '/home/jdoe/.ssh/id_rsa': <键入口令短语>
    
    myfile.1       25% |*******                      |    640 KB  0:20 ETA 
    
    myfile.1 

    键入口令短语后,将会显示进度计量器。请参见以上输出中的第二行。进度计量器显示以下内容:

    • 文件名

    • 已传输的文件百分比

    • 表示已传输的文件百分比的一系列星号

    • 已传输的数据量

    • 完整文件的估计到达时间 (estimated time of arrival, ETA),即剩余时间。

Procedure如何设置到防火墙外部主机的缺省连接

可以使用 Solaris 安全 Shell 建立从防火墙内的主机到防火墙外的主机的连接。通过在配置文件中指定 ssh 的代理命令或者在命令行中将该代理命令指定为选项,可以完成此任务。有关的命令行选项,请参见示例 18–6

通常,可以通过配置文件自定义 ssh 交互。

可以使用两种类型的代理命令自定义这些文件。一个是用于 HTTP 连接的代理命令。另一个是用于 SOCKS5 连接的代理命令。有关更多信息,请参见 ssh_config(4) 手册页。

  1. 在配置文件中指定代理命令和主机。

    使用以下语法添加所需数量的行:


    [Host outside-host]
    
    ProxyCommand proxy-command [-h proxy-server] \
    
    [-p proxy-port] outside-host|%h outside-port|%p
    Host outside-host

    在命令行中指定远程主机名时,将代理命令规范限制为实例。如果对 outside-host 使用通配符,则可将代理命令规范应用于一组主机。

    proxy-command

    指定代理命令。该命令可以是以下之一:

    • /usr/lib/ssh/ssh-http-proxy-connect,用于 HTTP 连接

    • /usr/lib/ssh/ssh-socks5-proxy-connect,用于SOCKS5 连接

    -h proxy-server-p proxy-port

    这些选项分别指定代理服务器和代理端口。如果存在,则代理将覆盖指定代理服务器和代理端口的任何环境变量,如 HTTPPROXYHTTPPROXYPORTSOCKS5_PORTSOCKS5_SERVERhttp_proxyhttp_proxy 变量指定 URL。如果不使用这些选项,则必须设置相关的环境变量。有关更多信息,请参见 ssh-socks5-proxy-connect(1)ssh-http-proxy-connect(1) 手册页。

    outside-host

    指定要连接到的特定主机。请在命令行中使用 %h 替换参数来指定主机。

    outside-port

    指定要连接到的特定端口。请在命令行中使用 %p 替换参数来指定端口。通过指定 %h%p 而不使用 Host outside-host 选项,只要调用 ssh 命令即可将应用代理命令到主机参数。

  2. 运行 Solaris 安全 Shell,从而指定外部主机。

    例如,键入以下命令:


    myLocalHost% ssh myOutsideHost
    

    此命令可在个人配置文件中查找 myOutsideHost 的代理命令规范。如果找不到规范,则该命令将在系统范围的配置文件 /etc/ssh/ssh_config 中查找。该代理命令将替换 ssh 命令。


示例 18–6 通过命令行连接到防火墙外部的主机

如何设置到防火墙外部主机的缺省连接说明如何在配置文件中指定代理命令。在本示例中,在 ssh 命令行中指定代理命令。


% ssh -o'Proxycommand=/usr/lib/ssh/ssh-http-proxy-connect \

-h myProxyServer -p 8080 myOutsideHost 22' myOutsideHost

ssh 命令的 -o 选项提供了指定代理命令的命令行方法。此示例命令可执行以下操作:


第 19 章 Solaris 安全 Shell(参考)

本章介绍 Solaris 安全 Shell 中的配置选项。以下是本章中参考信息的列表:

有关配置 Solaris 安全 Shell 的过程,请参见第 18 章,使用 Solaris 安全 Shell(任务)

典型的 Solaris 安全 Shell 会话

Solaris 安全 Shell 守护进程 (sshd) 通常在引导时(启动网络服务时)启动。该守护进程侦听来自客户机的连接。Solaris 安全 Shell 会话在用户运行 sshscpsftp 命令时开始。系统将为每个传入连接派生一个新的 sshd 守护进程。派生的守护进程处理密钥交换、加密、验证、命令执行以及与客户机的数据交换。这些会话的特征由客户端配置文件和服务器端配置文件确定。命令行参数可以覆盖配置文件中的设置。

客户机和服务器必须相互进行认证。验证成功后,用户可以远程执行命令和在主机之间复制数据。

Solaris 安全 Shell 中会话的特征

sshd 守护进程的服务器端行为由 /etc/ssh/sshd_config 文件中的关键字设置控制。例如,sshd_config 文件控制访问服务器时可采用哪些类型的验证。启动 sshd 守护进程时,命令行选项也可控制服务器端行为。

客户端的行为由 Solaris 安全 Shell 关键字控制,其优先级顺序如下:

例如,用户可以通过在命令行中指定 -c 3des 来覆盖在系统范围内配置的 Cipher 的设置值 blowfish

Solaris 安全 Shell 中的验证和密钥交换

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 凭证

要在 Solaris 安全 Shell 中使用 GSS-API 进行验证,服务器必须具有 GSS-API 接收器凭证,客户机必须具有 GSS-API 启动器凭证。支持 mech_dhmech_krb5

对于 mech_dh,如果 root 已运行 keylogin 命令,则服务器具有 GSS-API 接收器凭证。

对于 mech_krb5,如果 /etc/krb5/krb5.keytab 中包含与该服务器对应的主机主体的有效项,则服务器具有 GSS-API 接收器凭证。

如果执行了以下某项操作,则客户机具有 mech_dh 的启动器凭证:

如果执行了以下某项操作,则客户机具有 mech_krb5 的启动器凭证:

有关 mech_dh 在安全 RPC 中的使用,请参见第 15 章,使用验证服务(任务)。有关如何使用 mech_krb5,请参见第 20 章,Kerberos 服务介绍。有关机制的更多信息,请参见 mech(4)mech_spnego(5) 手册页。

Solaris 安全 Shell 中的命令执行和数据转发

完成验证后,用户通常可通过请求 shell 或执行命令来使用 Solaris 安全 Shell。通过 ssh 命令选项可发出请求。请求可能包括分配伪 tty、转发 X11 连接或 TCP/IP 连接,或通过安全连接启用 ssh-agent 验证程序。用户会话的基本组成部分如下:

  1. 用户请求 shell 或请求执行命令,以开始会话模式。

    在此模式下,数据通过客户端的终端进行发送或接收。在服务器端,数据通过 shell 或命令进行发送。

  2. 数据传送完成后,用户程序将终止。

  3. 除已存在的连接外,所有 X11 转发和 TCP/IP 转发均停止。现有 X11 连接和 TCP/IP 连接仍然处于打开状态。

  4. 服务器向客户机发送退出状态消息。关闭所有连接后(如仍处于打开状态的转发端口),客户机将关闭到服务器的连接。然后,客户机退出。

Solaris 安全 Shell 中的客户机和服务器配置

Solaris 安全 Shell 会话的特征由配置文件控制。命令行中的选项可在一定程度上覆盖配置文件。

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 中的服务器配置

Solaris 安全 Shell 会话的服务器端特征由 /etc/ssh/sshd_config 文件管理。Solaris 安全 Shell 中的关键字中列出了服务器配置文件中的关键字;如果关键字具有缺省值,则会给出该值。有关这些关键字的完整说明,请参见 sshd_config(4) 手册页。

Solaris 安全 Shell 中的关键字

下表列出了关键字及其缺省值(如果存在)。这些关键字按字母顺序排列。客户机上的关键字位于 ssh_config 文件中。应用于服务器的关键字位于 sshd_config 文件中。一些关键字在两个文件中均有设置。如果关键字仅应用于一种协议版本,则列出了该版本。

表 19–1 Solaris 安全 Shell 配置文件中的关键字(A 到 Escape)

关键字 

缺省值 

位置 

协议 

AllowGroups

无缺省值。 

服务器 

 

AllowTcpForwarding

no

服务器 

 

AllowUsers

无缺省值。 

服务器 

 

AuthorizedKeysFile

~/.ssh/authorized_keys

服务器 

 

Banner

/etc/issue

服务器 

 

Batchmode

no

客户机 

 

BindAddress

无缺省值。 

客户机 

 

CheckHostIP

yes

客户机 

 

Cipher

blowfish, 3des

客户机 

v1 

Ciphers

aes128-ctr, aes128-cbc, 3des-cbc, blowfish-cbc, arcfour

两者 

v2 

ClearAllForwardings

无缺省值。 

客户机 

 

ClientAliveInterval

0

服务器 

v2 

ClientAliveCountMax

3

服务器 

v2 

Compression

yes

两者 

 

CompressionLevel

无缺省值。 

客户机 

 

ConnectionAttempts

1

客户机 

 

DenyGroups

无缺省值。 

服务器 

 

DenyUsers

无缺省值。 

服务器 

 

DynamicForward

无缺省值。 

客户机 

 

EscapeChar

~

客户机 

 

表 19–2 Solaris 安全 Shell 配置文件中的关键字(Fall 到 Local)

关键字 

缺省值 

位置 

协议 

FallBackToRsh

no

客户机 

 

ForwardAgent

no

客户机 

 

ForwardX11

no

客户机 

 

GatewayPorts

no

两者 

 

GlobalKnownHostsFile

/etc/ssh/ssh_known_hosts

客户机 

 

GSSAPIAuthentication

yes

两者 

v2 

GSSAPIDelegateCredentials

no

客户机 

v2 

GSSAPIKeyExchange

yes

两者 

v2 

GSSAPIStoreDelegateCredentials

no

客户机 

v2 

Host

*有关更多信息,请参见 Solaris 安全 Shell 中的主机特定参数

客户机 

 

HostbasedAuthentication

no

两者 

v2 

HostbasedUsesNamesFromPacketOnly

no

服务器 

v2 

HostKey

/etc/ssh/ssh_host_key

服务器 

v1 

HostKey

/etc/ssh/host_rsa_key, /etc/ssh/host_dsa_key

服务器 

v2 

HostKeyAlgorithms

ssh-rsa, ssh-dss

客户机 

v2 

HostKeyAlias

无缺省值。 

客户机 

v2 

IdentityFile

~/.ssh/identity

客户机 

v1 

IdentityFile

~/.ssh/id_dsa, ~/.ssh/id_rsa

客户机 

v2 

IgnoreRhosts

yes

服务器 

 

IgnoreUserKnownHosts

yes

服务器 

 

KbdInteractiveAuthentication

yes

两者 

 

KeepAlive

yes

两者 

 

KeyRegenerationInterval

3600(秒)

服务器 

 

ListenAddress

无缺省值。 

服务器 

 

LocalForward

无缺省值。 

客户机 

 

表 19–3 Solaris 安全 Shell 配置文件中的关键字(Login 到 R)

关键字 

缺省值 

位置 

协议 

LoginGraceTime

600(秒)

服务器 

 

LogLevel

info

两者 

 

LookupClientHostname

yes

服务器 

 

MACs

hmac-sha1,hmac-md5

两者 

v2 

MaxAuthTries

6

服务器 

 

MaxAuthTriesLog

无缺省值。 

服务器 

 

MaxStartups

10:30:60

服务器 

 

NoHostAuthenticationForLocalHost

no

客户机 

 

NumberOfPasswordPrompts

3

客户机 

 

PAMAuthenticationViaKBDInt

yes

服务器 

v2 

PasswordAuthentication

yes

两者 

 

PermitEmptyPasswords

no

服务器 

 

PermitRootLogin

no

服务器 

 

PermitUserEnvironment

no

服务器 

 

PreferredAuthentications

gssapi-keyex, gssapi-with-mic, hostbased, publickey, keyboard-interactive, password

客户机 

v2 

Port

22

两者 

 

PrintMotd

no

服务器 

 

Protocol

2

两者 

 

ProxyCommand

无缺省值。 

客户机 

 

PubkeyAuthentication

yes

两者 

v2 

RemoteForward

无缺省值。 

客户机 

 

RhostsAuthentication

no

两者 

v1 

RhostsRSAAuthentication

no

两者 

v1 

RSAAuthentication

no

两者 

v1 

表 19–4 Solaris 安全 Shell 配置文件中的关键字(S 到 X)

关键字 

缺省值 

位置 

协议 

ServerKeyBits

768

服务器 

 

StrictHostKeyChecking

ask

客户机 

 

StrictModes

yes

服务器 

 

Subsystem

sftp /usr/lib/ssh/sftp-server

服务器 

 

SyslogFacility

auth

服务器 

 

UseLogin

no,已过时并被忽略。

服务器 

 

User

无缺省值。 

客户机 

 

UserKnownHostsFile

~/.ssh/known_hosts

客户机 

 

VerifyReverseMapping

no

服务器 

 

X11Forwarding

yes

服务器 

 

X11DisplayOffset

10

服务器 

 

X11UseLocalHost

yes

服务器 

 

XAuthLocation

无缺省值。 

两者 

 

Solaris 安全 Shell 中的主机特定参数

如果不同的本地主机具有不同 Solaris 安全 Shell 特征很有用,则管理员可以在 /etc/ssh/ssh_config 文件中定义单独的参数组,以根据主机或正则表达式进行应用。通过按 Host 关键字对文件中的项进行分组,可完成此任务。如果不使用 Host 关键字,则客户机配置文件中的项将应用于任一用户正在使用的本地主机。

Solaris 安全 Shell 和登录环境变量

如果 sshd_config 文件中未设置以下 Solaris 安全 Shell 关键字,则这些关键字将从 /etc/default/login 文件的等效项中获取各自的值:

/etc/default/login 中的项

sshd_config 中的关键字和值

CONSOLE=*

PermitRootLogin=without-password

#CONSOLE=*

PermitRootLogin=yes

PASSREQ=YES

PermitEmptyPasswords=no

PASSREQ=NO

PermitEmptyPasswords=yes

#PASSREQ

PermitEmptyPasswords=no

TIMEOUT=secs

LoginGraceTime=secs

#TIMEOUT

LoginGraceTime=300

RETRIESSYSLOG_FAILED_LOGINS

仅应用于 passwordkeyboard-interactive 验证方法。

通过 login 命令设置以下变量后,sshd 守护进程将使用这些值。未设置这些变量时,守护进程将使用缺省值。

TIMEZONE

控制 TZ 环境变量的设置。如果未设置此值,在启动 sshd 守护进程时,守护进程将使用 TZ 的值。

ALTSHELL

控制 SHELL 环境变量的设置。缺省值是 ALTSHELL=YES,此时 sshd 守护进程使用用户 shell 的值。ALTSHELL=NO 时,不设置 SHELL 值。

PATH

控制 PATH 环境变量的设置。未设置此值时,缺省路径为 /usr/bin

SUPATH

控制 rootPATH 环境变量的设置。未设置此值时,缺省路径为 /usr/sbin:/usr/bin

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

维护 Solaris 安全 Shell 中的已知主机

需要与其他主机安全通信的每台主机都必须将服务器的公钥存储在本地主机的 /etc/ssh/ssh_known_hosts 文件中。虽然脚本可用于更新 /etc/ssh/ssh_known_hosts 文件,但是强烈建议不要这样做,因为脚本会打开严重的安全漏洞。

/etc/ssh/ssh_known_hosts 文件应只按如下安全机制分发:

要避免入侵者通过向 known_hosts 文件插入伪造公钥而获得访问权限的可能性,应使用 JumpStartTM 服务器作为 ssh_known_hosts 文件的已知和受信任源。ssh_known_hosts 文件可在安装过程中分发。然后,可将使用 scp 命令的脚本用于引入最新版本。由于每台主机都已具有 JumpStart 服务器的公钥,因此此方法是安全的。

Solaris 安全 Shell 软件包和初始化

Solaris 安全 Shell 依赖于核心 Solaris 软件包和以下软件包:

以下软件包安装 Solaris 安全 Shell:

安装后重新引导时,sshd 守护进程将运行。该守护进程在系统中创建主机密钥。运行 sshd 守护进程的 Solaris 系统是 Solaris 安全 Shell 服务器。

Solaris 安全 Shell 文件

下表显示了重要的 Solaris 安全 Shell 文件和建议的文件权限。

表 19–5 Solaris 安全 Shell 文件

文件名 

说明 

建议的权限和属主 

/etc/ssh/sshd_config

包含 sshd(Solaris 安全 Shell 守护进程)的配置数据。

-rw-r--r-- root

/etc/ssh/ssh_host_key

包含主机私钥 (v1)。 

-rw-r--r-- root

/etc/ssh/ssh_host_dsa_key/etc/ssh/ssh_host_rsa_key

包含主机私钥 (v2)。 

-rw-r--r-- root

host-private-key.pub

包含主机公钥,如 /etc/ssh/ssh_host_rsa_key.pub。用于将主机密钥复制到本地 known_hosts 文件中。

-rw-r--r-- root

/var/run/sshd.pid

包含 Solaris 安全 Shell 守护进程 sshd 的进程 ID。如果正在运行多个守护进程,则文件包含最后启动的守护进程。

-rw-r--r-- root

~/.ssh/authorized_keys

存储允许登录到用户帐户的用户公钥。 

-rw-rw-r-- username

/etc/ssh/ssh_known_hosts

包含客户机可安全与其通信的所有主机的主机公钥。此文件由管理员填写。 

-rw-r--r-- root

~/.ssh/known_hosts

包含客户机可安全与其通信的所有主机的主机公钥。该文件将会自动维护。只要用户与未知主机连接,就会向该文件中添加远程主机密钥。 

-rw-r--r-- username

/etc/default/login

未设置对应的 sshd_config 参数时,将为 sshd 守护进程提供缺省值。

-r--r--r-- root

/etc/nologin

如果此文件存在,则 sshd 守护进程只允许 root 登录。此文件的内容将向尝试登录的用户显示。

-rw-r--r-- root

~/.rhosts

包含指定用户无需口令即可登录主机的主机-用户名称对。rlogindrshd 守护进程也使用此文件。

-rw-r--r-- username

~/.shosts

包含指定用户无需口令即可登录主机的主机-用户名称对。其他实用程序不使用此文件。有关更多信息,请参见 sshd(1M) 手册页中的 FILES 部分。

-rw-r--r-- username

/etc/hosts.equiv

包含 .rhosts 验证中使用的主机。rlogindrshd 守护进程也使用此文件。

-rw-r--r-- root

/etc/ssh/shosts.equiv

包含基于主机的验证中使用的主机。其他实用程序不使用此文件。 

-rw-r--r-- root

~/.ssh/environment

包含登录时的初始赋值。缺省情况下,不会读取此文件。要读取此文件,必须将 sshd_config 文件中的 PermitUserEnvironment 关键字设置为 yes

-rw------- username

~/.ssh/rc

包含启动用户 shell 前运行的初始化例程。有关初始化例程的样例,请参见 sshd 手册页。 

-rw------- username

/etc/ssh/sshrc

包含管理员指定的主机特定的初始化例程。 

-rw-r--r-- root

/etc/ssh/ssh_config

配置客户机系统上的系统设置。 

-rw-r--r-- root

~/.ssh/config

配置用户设置。覆盖系统设置。 

-rw------- username

下表列出了可被关键字或命令选项覆盖的 Solaris 安全 Shell 文件。

表 19–6 覆盖 Solaris 安全 Shell 文件的位置

文件名 

关键字覆盖 

命令行覆盖 

/etc/ssh/ssh_config

 

ssh -F config-file

scp -F config-file

~/.ssh/config

 

ssh -F config-file

/etc/ssh/host_rsa_key

/etc/ssh/host_dsa_key

HostKey

 

~/.ssh/identity

~/.ssh/id_dsa ~/.ssh/id_rsa

IdentityFile

ssh -i id-file

scp -i id-file

~/.ssh/authorized_keys

AuthorizedKeysFile

 

/etc/ssh/ssh_known_hosts

GlobalKnownHostsFile

 

~/.ssh/known_hosts

UserKnownHostsFile

IgnoreUserKnownHosts

 

Solaris 安全 Shell 命令

下表汇总了主要的 Solaris 安全 Shell 命令。

表 19–7 Solaris 安全 Shell 中的命令

命令 

说明 

手册页 

ssh

使用户登录到远程计算机并在远程计算机上安全地执行命令。此命令是 Solaris 安全 Shell 中替代 rloginrsh 命令的命令。ssh 命令在不安全网络上两台不受信任主机之间启用安全的加密通信。X11 连接和任意 TCP/IP 端口也可通过安全通道进行转发。

ssh(1)

sshd

Solaris 安全 Shell 的守护进程。该守护进程侦听来自客户机的连接,并在不安全网络上两台不受信任主机之间启用安全的加密通信。 

sshd(1M)

ssh-add

将 RSA 或 DSA 身份添加到验证代理 ssh-agent。这些身份也称为密钥

ssh-add(1)

ssh-agent

存储用于公钥验证的私钥。ssh-agent 程序在 X 会话或登录会话开始时启动。所有其他窗口和其他程序均作为 ssh-agent 程序的客户机启动。通过使用环境变量,当用户使用 ssh 命令登录到其他系统时,可以找到代理并将其用于验证。

ssh-agent(1)

ssh-keygen

生成并管理用于 Solaris 安全 Shell 的验证密钥。 

ssh-keygen(1)

ssh-keyscan

收集大量 Solaris 安全 Shell 主机的公钥。帮助构建并验证 ssh_known_hosts 文件。

ssh-keyscan(1)

ssh-keysign

ssh 命令用于访问本地主机上的主机密钥。生成使用 Solaris 安全 Shell v2 进行基于主机的验证时所需的数字签名。此命令由 ssh 命令(而不是用户)调用。

ssh-keysign(1M)

scp

通过加密的 ssh 传输在网络上的主机之间安全地复制文件。与 rcp 命令不同,如果验证需要口令信息,scp 命令会提示输入口令或口令短语。

scp(1)

sftp

一个与 ftp 命令类似的交互式文件传输程序。与 ftp 命令不同,sftp 命令通过加密的 ssh 传输执行所有操作。此命令连接并登录到指定的主机名,然后进入交互式命令模式。

sftp(1)

下表列出了覆盖 Solaris 安全 Shell 关键字的命令选项。这些关键字在 ssh_configsshd_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