本章介绍 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 |
|