JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 11.1 管理:安全服务     Oracle Solaris 11.1 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

第 1 部分安全性概述

1.  安全性服务(概述)

第 2 部分系统、文件和设备安全性

2.  管理计算机安全性(概述)

3.  控制对系统的访问(任务)

4.  病毒扫描服务(任务)

5.  控制对设备的访问(任务)

6.  使用 BART 验证文件完整性(任务)

7.  控制对文件的访问(任务)

第 3 部分角色、权限配置文件和特权

8.  使用角色和特权(概述)

9.  使用基于角色的访问控制(任务)

10.  Oracle Solaris 中的安全属性(参考信息)

第 4 部分加密服务

11.  加密框架(概述)

12.  加密框架(任务)

13.  密钥管理框架

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

14.  使用可插拔验证模块

15.  使用 安全 Shell

安全 Shell(概述)

安全 Shell 验证

企业中的安全 Shell

安全 Shell 和 OpenSSH 项目

安全 Shell 和 FIPS-140

配置安全 Shell(任务)

配置 安全 Shell(任务列表)

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

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

如何创建不同于 安全 Shell 缺省值的用户和主机例外

如何为 sftp 文件创建隔离的目录

使用 安全 Shell(任务)

使用 安全 Shell(任务列表)

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

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

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

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

如何使用 安全 Shell 远程管理 ZFS

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

如何使用安全 Shell 复制文件

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

16.  安全 Shell(参考信息)

17.  使用简单验证和安全层

18.  网络服务验证(任务)

第 6 部分Kerberos 服务

19.  Kerberos 服务介绍

20.  规划 Kerberos 服务

21.  配置 Kerberos 服务(任务)

22.  Kerberos 错误消息和故障排除

23.  管理 Kerberos 主体和策略(任务)

24.  使用 Kerberos 应用程序(任务)

25.  Kerberos 服务(参考信息)

第 7 部分在 Oracle Solaris 中审计

26.  审计(概述)

27.  规划审计

28.  管理审计(任务)

29.  审计(参考信息)

词汇表

索引

使用 安全 Shell(任务)

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

使用 安全 Shell(任务列表)

以下任务列表列出了有关使用安全 Shell 的用户过程。

任务
说明
参考
创建公钥/私钥对。
针对要求公钥验证的站点启用对安全 Shell 的访问。
更改口令短语。
更改用于验证私钥的短语。
使用安全 Shell 登录。
远程登录时,提供加密的安全 Shell 通信。
在不提示输入口令的情况下登录到安全 Shell。
允许使用可向安全 Shell 提供口令的代理进行登录。
root 用户身份登录到 安全 Shell。
允许作为 root 登录以使用 ZFS sendreceive 命令。
在安全 Shell 中使用端口转发。
指定要在基于 TCP 的安全 Shell 连接中使用的本地端口或远程端口。
使用安全 Shell 复制文件。
在主机之间安全地复制文件。
安全地连接防火墙内的主机与防火墙外的主机。
使用与 HTTP 或 SOCKS5 兼容的安全 Shell 命令连接由防火墙隔离的主机。

如何生成用于安全 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):<Press Return>

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

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

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

    Enter passphrase (empty for no passphrase): <Type passphrase>
  4. 重新键入口令短语以进行确认。
    Enter same passphrase again: <Type passphrase>
    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. 选择适当的选项:
    • 如果管理员已配置了基于主机的验证,则可能需要将本地主机的公钥复制到远程主机。

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

      1. 在一行中键入以下命令(不带反斜杠)。
        % cat /etc/ssh/ssh_host_dsa_key.pub | ssh RemoteHost \
        'cat >> ~./ssh/known_hosts && echo "Host key copied"'
      2. 出现提示时,提供登录口令。
        Enter password: <Type 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: Type login password
        Key copied
        myLocalHost%
  7. 可选少口令短语的提示。

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

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

以下过程不会更改私钥。此过程将更改私钥的验证机制,即口令短语。有关更多信息,请参见 ssh-keygen(1) 手册页。

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

  1. 启动安全 Shell 会话。

    键入 ssh 命令,并指定远程主机名称和您的登录信息。

    myLocalHost% ssh myRemoteHost -l username

    此时会出现提示,询问远程主机的真实性:

    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. 向安全 Shell 验证自身的身份。
    1. 出现提示时,键入口令短语。
      Enter passphrase for key '/home/jdoe/.ssh/id_rsa': <Type passphrase>
    2. 出现提示时,键入帐户口令。
      jdoe@myRemoteHost's password: <Type password>
      Last login: Wed Sep  7 09:07:49 2011 from myLocalHost
      Oracle Corporation      SunOS 5.11       September 2011
      myRemoteHost%
  4. 执行远程主机上的事务。

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

  5. 关闭安全 Shell 连接。

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

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

示例 15-2 在 安全 Shell 中显示远程 GUI

在此示例中,jdoe 在两个系统上都是初始用户,因此指定有 Software Installation(软件安装)权限配置文件。jdoe 想要使用远程系统上的软件包管理器 GUI。X11Forwarding 关键字的缺省值仍然是 yes,并且 xauth 软件包安装在远程系统上。

% ssh -l jdoe -X myRemoteHost
jdoe@myRemoteHost's password: <Type password>
Last login: Wed Sep  7 09:07:49 2011 from myLocalHost
Oracle Corporation      SunOS 5.11       September 2011
myRemoteHost% packagemanager &

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

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

可以根据需要手动启动代理守护进程,如以下过程所述:

  1. 启动代理守护进程。
    myLocalHost% eval `ssh-agent`
    Agent pid 9892
  2. 检验是否已启动代理守护进程。
    myLocalHost% pgrep ssh-agent
    9892
  3. 将私钥添加到代理守护进程。

    键入 ssh-add 命令。

    myLocalHost% ssh-add
    Enter passphrase for /home/jdoe/.ssh/id_rsa: <Type passphrase>
    Identity added: /home/jdoe/.ssh/id_rsa(/home/jdoe/.ssh/id_rsa)
    myLocalHost%
  4. 启动安全 Shell 会话。
    myLocalHost% ssh myRemoteHost -l jdoe

    系统不会提示您输入口令短语。

示例 15-3 使用 ssh-add 选项

在本示例中,jdoe 将向代理守护进程添加两个密钥。-l 选项用于列出该守护进程中存储的所有密钥。在会话结束时,使用 -D 选项删除代理守护进程中的所有密钥。

myLocalHost% ssh-agent
myLocalHost% ssh-add
Enter passphrase for /home/jdoe/.ssh/id_rsa: <Type passphrase>
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: <Type passphrase>
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)

User conducts Oracle Solaris 安全 Shell transactions
myLocalHost% ssh-add -D
Identity removed:
/home/jdoe/.ssh/id_rsa(/home/jdoe/.ssh/id_rsa.pub)
/home/jdoe/.ssh/id_dsa(DSA)

如何使用 安全 Shell 远程管理 ZFS

缺省情况下,root 角色无法使用 安全 Shell 进行远程登录。过去,root 曾使用 安全 Shell 执行许多重要任务,例如将 ZFS 池数据发送到远程系统上的存储。在此过程中,root 角色创建一个可担任远程 ZFS 管理员的用户。

开始之前

您必须承担 root 角色。有关更多信息,请参见如何使用指定给您的管理权限

  1. 在两个系统上都创建该用户。

    例如,创建 zfsroot 用户,并提供口令。

    source # useradd -c "Remote ZFS Administrator" -u 1201 -d /home/zfsroot zfsroot
    source # passwd zfsroot
    Enter password:
    Retype password:
    #
    dest # useradd -c "Remote ZFS Administrator" -u 1201 -d /home/zfsroot zfsroot
    dest # passwd zfsroot
    ...

    必须在两个系统上以完全相同的方式定义 zfsroot 用户。

  2. 创建用于 安全 Shell 验证的用户密钥对。

    密钥对是在源系统上创建的。然后,将公钥复制到目标系统上的 zfsroot 用户。

    1. 生成密钥对并将其放置在文件 id_migrate 中。
      # ssh-keygen -t rsa -P "" -f ~/id_migrate
      Generating public/private rsa key pair.
      Your identification has been saved in /root/id_migrate.
      Your public key has been saved in /root/id_migrate.pub.
      The key fingerprint is:
      3c:7f:40:ef:ec:63:95:b9:23:a2:72:d5:ea:d1:61:f0 root@source
    2. 将密钥对的公用部分发送到目标系统。
      # scp ~/id_migrate.pub zfsroot@dest:
      The authenticity of host 'dest (10.134.76.126)' can't be established.
      RSA key fingerprint is 44:37:ab:4e:b7:2f:2f:b8:5f:98:9d:e9:ed:6d:46:80.
      Are you sure you want to continue connecting (yes/no)? yes
      Warning: Permanently added 'dest,10.134.76.126' (RSA) to the list of known hosts.
      Password:
      id_migrate.pub 100% |*****************************| 399 00:00
  3. 在两个系统上,将 ZFS File Management(ZFS 文件管理)权限配置文件指定给 zfsroot
    source # usermod -P +'ZFS File System Management' -S files zfsroot
    dest # usermod -P +'ZFS File System Management' -S files zfsroot
  4. 验证是否已为目标系统指定了该权限配置文件。
    dest # profiles zfsroot
    zfsroot:
    ZFS File System Management
    Basic Solaris User
    All
  5. 在目标系统上,将密钥对的公用部分移动到私有的 /home/zfsroot/.ssh 目录。
    root@dest # su - zfsroot
    Oracle Corporation      SunOS 5.11      11.1    May 2012
    zfsroot@dest $ mkdir -m 700 .ssh
    zfsroot@dest $ cat id_migrate.pub >> .ssh/authorized_keys
  6. 验证配置是否正常工作。
    root@source# ssh -l zfsroot -i ~/id_migrate dest \
    pfexec /usr/sbin/zfs snapshot zones@test
    root@source# ssh -l zfsroot -i ~/id_migrate dest \
    pfexec /usr/sbin/zfs destroy zones@test
  7. 可选验证您可以创建快照并复制数据。
    root@source# zfs snapshot -r rpool/zones@migrate-all
    root@source#  zfs send -rc rpool/zones@migrate-all | \
    ssh -l zfsroot -i ~/id_migrate dest pfexec /usr/sbin/zfs recv -F zones
  8. 可选删除使用 zfsroot 帐户进行 ZFS 管理的功能。
    root@dest# usermod -P -'ZFS File System Management' zfsroot
    root@dest#  su - zfsroot
    zfsroot@dest#  cp .ssh/authorized_keys .ssh/authorized_keys.bak
    zfsroot@dest#  grep -v root@source .ssh/authorized_keys.bak> .ssh/authorized_keys

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

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

开始之前

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

示例 15-4 使用本地端口转发接收邮件

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

myLocalHost% ssh -L 9143:myRemoteHost:143 myRemoteHost 

此命令可将连接从 myLocalHost 上端口 9143 转发到端口 143。端口 143myRemoteHost 上的 IMAP v2 服务器端口。用户启动邮件应用程序时,可指定 IMAP 服务器的本地端口号码,如 localhost:9143

不要混淆 localhostmyLocalHostmyLocalHost 是假设的主机名,而 localhost 则是用于标识本地系统的关键字。

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

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

myLocalHost% ssh -R 9022:myLocalHost:22 myOutsideHost

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

myOutsideHost% ssh -p 9022 localhost
myLocalHost%

如何使用安全 Shell 复制文件

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

也可以使用 sftp 安全文件传输程序。有关更多信息,请参见 sftp(1) 手册页。有关示例,请参见示例 15-6


注 - 审计服务可审计 ft 审计类中的 sftp 交易。对于 scp,审计服务可审计 ssh 会话的接入和退出。


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

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

    myLocalHost% scp myfile.1 jdoe@myRemoteHost:~
  2. 出现提示时,提供口令短语。
    Enter passphrase for key '/home/jdoe/.ssh/id_rsa': <Type passphrase>
    myfile.1       25% |*******                      |    640 KB  0:20 ETA 
    myfile.1 

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

    • 文件名

    • 已传输的文件百分比

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

    • 已传输的数据量

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

示例 15-6 使用 sftp 命令时指定一个端口

在本示例中,用户希望 sftp 命令使用特定端口。用户使用 -o 选项来指定端口。

% sftp -o port=2222 guest@RemoteFileServer

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

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

通常,可以通过配置文件定制 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. 运行安全 Shell,指定外部主机。

    例如,键入以下命令:

    myLocalHost% ssh myOutsideHost

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

示例 15-7 通过 安全 Shell 命令行连接到防火墙外部的主机

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

% ssh -o'Proxycommand=/usr/lib/ssh/ssh-http-proxy-connect \
-h myProxyServer -p 8080 myOutsideHost 22' myOutsideHost

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