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

第 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