跳过导览列.
首页
做最好的Linux技术文档网站

OpenSSH 的新身份验证方法

jarson's picture

本文讨论 OpenSSH 支持的一些身份验证方法。OpenSSH 是一种实现 SSH1 和 SSH2 协议的免费工具。通过本文您将了解 OpenSSH 中一些身份验证方法的配置以及 IBM® 支持的 OpenSSH 版本中新增的特性。

<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --> <!--END RESERVED FOR FUTURE USE INCLUDE FILES-->

简介

OpenSSH 是一种实现 SSH1 和 SSH2 协议的免费工具。它是一种安全可靠的工具,常常用来替代 r-commands。通过 ssh 会话的通信是加密的,它会加密所有通信流,包括密码。

本文描述如何配置基于主机的和 PAM 身份验证方法,以及在 IBM 支持的 OpenSSH 版本中新增的一些特性和配置选项。IBM 支持的 OpenSSH 版本的下载链接见 参考资料

要想安装 OpenSSH,必须先安装 OpenSSL。现在可以获得 installp 映像格式的 OpenSSL;下载信息见 参考资料

SSH 中基于主机的身份验证

当可信主机上的用户希望登录远程计算机(可以是不可信的系统)时,使用 SSH 中基于主机的身份验证。这种方法不需要密码。通过使用以下配置设置,可信主机上的用户就可以登录远程计算机,不需要提供密码。

在客户机和服务器端启用以下配置选项。

  1. 在客户机上的 /etc/ssh/ssh_config 文件中,做以下修改:
    HostbasedAuthentication yes
    EnableSSHKeysign yes

  2. 在服务器端的 /etc/ssh/sshd_config 文件中,做以下修改:
    HostbasedAuthentication yes
    IgnoreRhosts no

  3. 执行以下操作之一:
    • 如果作为根用户在服务器上登录,那么在 /.rhosts 或 /.shosts 文件中输入主机。
    • 如果作为非根用户在服务器上登录,那么在 /etc/hosts.equiv 文件中输入主机。

    设置项的格式如下:

    <client host name or IP Address >   <client username>

    如果希望作为根用户在服务器上登录,那么运行 ssh root@< server host name >,服务器会在 /.rhosts 或 /.shosts 文件中检查客户机用户名和客户机主机名,只在找到正确的用户名和主机名的情况下,才允许登录。

    如果希望作为非根用户在服务器上登录,那么运行 ssh non-root@<server host name>,服务器会在 /etc/hosts.equiv 文件中检查客户机用户名和客户机主机名,并允许用户登录。

    在 作为非根用户登录时,应该在客户机上把公共密钥复制到 /etc/ssh/ssh_known_hosts 或 /etc/ssh/ssh_known_hosts2 文件中。这个文件的格式应该与 ~/. ssh/known_hosts 文件相同。公共密钥前面应该加上 <client hostname>, <client IP address >。

  4. 修改 sshd_config 文件中的配置选项之后,停止并重新启动 ssh 守护进程 (sshd):
    #stopsrc –s sshd
    0513-044 The sshd Subsystem was requested to stop.

    #startsrc –s sshd
    0513-059 The sshd Subsystem has been started. Subsystem PID is 417812

完成这些设置之后,就应该能够登录到远程计算机,系统不会提示输入密码。

OpenSSH 中的 PAM 支持

要想在 OpenSSH 中启用 PAM 身份验证,应该运行以下配置命令:

# lssec -f /etc/security/login.cfg -s usw -a auth_type
usw auth_type=STD_AUTH

 

如果代码是 auth_type = STD_AUTH,那么使用以下命令把它改为 PAM_AUTH:

# chsec -f /etc/security/login.cfg -s usw -a auth_type=PAM_AUTH

 

在 /etc/pam.conf 文件中添加以下设置:

  • 在 authentication 部分中:
    sshd    auth    required        /usr/lib/security/pam_aix

  • 在 account management 部分中:
    sshd    account    required        /usr/lib/security/pam_aix

  • 在 password management 部分中:
    sshd    password    required        /usr/lib/security/pam_aix

  • 在 session management 部分中:
    sshd    session  required        /usr/lib/security/pam_aix

完成这些设置之后,运行 ssh 命令以使用 PAM 身份验证。

SSH 中的新特性

下面是 IBM 支持的 OpenSSH 版本中新增的一些特性和配置选项。

SSH 和 EFS

与 用户和组相关联的私有密钥存储在 EFS 密钥存储中,由一个密钥存储密码保护。当用户登录一台启用 EFS 的计算机时,如果用户密码和密钥存储密码是相同的,登录进程就打开 EFS 密钥存储并把密钥存储中的密钥装载到内核中。当以后进程需要读写受 EFS 保护的文件时,使用这些密钥。

在使用 SSH 的开放源码版本 (OpenSSH) 时,登录进程无法打开 EFS 密钥存储并把密钥装载到内核中。这是因为 SSH 会产生两个进程,一个用于身份验证,另一个用于创建会话。对于要装载的 EFS 密钥存储,必须由单一进程创建密钥存储并把这些密钥与进程凭证绑定。对于 SSH,两个不同的进程执行这个过程,因此无法装载密钥存储。

在 IBM 支持的 OpenSSH 版本中已经纠正了这个问题。openssh-4.5p1 支持打开密钥存储并把密钥自动地装载到内核中,从而避免密码身份验证,让登录进程能够读写受 EFS 保护的文件(只要登录密码和 EFS 密钥存储密码是相同的)。

新的 sshd_config 选项

  • ChkHomeDir

    这 个选项是在之前的 openssh-4.5p1(IBM 支持的版本)中增加的。它是 sshd_config 文件中的一个选项。在默认情况下,它设置为 “No”。在启用时,设置为 “Yes”,它会检查用户的主目录是否存在。如果用户的主目录不存在,它就退出,不允许用户登录。如果系统管理员希望限制主目录不存在的用户访问系统,就 可以使用这个选项。

  • FrcpasswdPolicies

    这个配置选项 包含在 IBM 支持的 OpenSSH-4.5p1 版本的 sshd_config 文件中。在默认情况下,它设置为 “No”。在设置为 “Yes” 时,在允许用户登录之前,它检查用户的密码是否已经过期。如果用户的密码已经过期,它提示用户修改密码,在成功地修改密码之后,允许用户登录。否则,登录 失败。即使用户采用公共密钥或基于主机的身份验证,也会执行这个密码检查。这在登录之前确保用户是得到授权的。

  • AllowFiles/DenyFiles

    这 个选项是在 IBM 支持的 OpenSSH-4.7p1 版本的 sshd_config 文件中添加的。这个选项是 SFTP 专用的,SFTP 是一种安全的 FTP,用于在本地和远程计算机之间复制文件。通过使用这些设置,用户可以控制对要复制的文件、源目录和目标目录的访问。

    如以下示例所示,可以在 sshd_config 文件中指定文件名。

    在 sshd_config 文件中,添加以下代码行并保存文件:

    AllowFiles  "<jyo>:/tmp/*"

    如果 SSH 守护进程正在运行,那么运行以下命令停止和启动服务器:

    # stopsrc -s sshd
    0513-044 The sshd Subsystem was requested to stop.

    # startsrc -s sshd
    0513-059 The sshd Subsystem has been started. Subsystem PID is 11160.

    从客户机运行以下 SFTP 命令:

    # sftp jyo@aixcomm.in.ibm.com
    Connecting to aixcomm.in.ibm.com...
    jyo@aixcomm.in.ibm.com's password:
    sftp> cd /usr
    Couldn't stat remote file: Permission denied
    sftp>

    在前面的示例中,在登录之后,“jyo” 试图修改 /usr 目录。但是,sshd_config 文件中用户 jyo 的 AllowFiles 选项设置为 “jyo:/tmp/*”,因此不允许用户 “jyo” 修改除了 /tmp 目录中的文件之外的任何其他文件。

    DenyFiles 选项拒绝对指定目录中文件的访问;sshd_config 文件中的 DenyFiles 选项允许访问其他文件。

    AllowFiles 和 DenyFiles 选项用以下语法指定文件和目录名:

    <user/group> : <files/directories>

  • chroot 目录修改

    可以通过 IBM developerWorks 文章 openssh with AIX chroot 了解 IBM 支持的 OpenSSH 版本中的 chroot 特性。这篇文章的链接见 参考资料

    从 OpenSSH-5.0p1 开始,在 chroot 环境设置方面有一个修改。sshd_config 文件中增加了一个新的配置选项 ChrootDirectory,它指定身份验证之后 chroot 的路径。

    设置 chroot 环境的过程仍然与 developerWorks 文章 openssh with AIX chroot 中介绍的过程相同,但是 “Creating chroot user and finalizing installation” 一节除外(见 参考资料)。对于 OpenSSH-5.0p1 版本,可以跳过这一节。另外,要确保 chroot 目录中的 tmp 目录的权限是 777。

    需要在 chroot 环境中创建用户的主目录,chroot 目录的所有者应该是根用户。

    例如,假设以 /chroot 作为 chroot 目录,sshd_config 文件中的设置应该是:

    ChrootDirectory  /chroot

    /chroot 目录的权限应该是:

    #chown root:system /chroot

    假设要在 chroot 环境中作为用户 “jyoti” 登录。必须在 /chroot 中手工创建用户的主目录 “/home/jyoti”。

    #cd /chroot

    # ls
    bin dev etc home lib tmp unix usr

    #cd home
    #mkdir jyoti

    为了在 chroot 环境中运行 SFTP,要在 sshd_config 文件中设置 Subsystem 配置选项,如下所示:

    Subsystem   sftp     internal-sftp

    这个选项简化了使用 ChrootDirectory 的配置。

    为了只允许特定的用户使用 sshd_config 文件中的 ChrootDirectory 选项,可以使用 Match 指令指定用户名,如下所示:

    Match  User <user name> 
    ChrootDirectory <Name of the directory to chroot>

  • OpenSSH 中的审计

    系统管理员可以通过审计系统记录与安全性相关的信息,以后可以分析这些信息,寻找违反和可能违反系统安全策略的地方。

    从 OpenSSH-4.5p1 (4.5.0.5302) 开始,IBM 支持的 SSH 版本支持审计。在 SSH 中启用审计需要完成几个设置。

    在 /etc/security/audit/config 文件中添加一个新的类:

    sshcl = SSH_failnone, SSH_failpasswd,SSH_failkbdint,SSH_failpubkey, SSH_failhstbsd,
    SSH_failgssapi, SSH_invldusr,SSH_nologin, SSH_connclose,SSH_auditknwn, SSH_rootdned,
    SSH_exceedmtrix,SSH_connabndn, SSH_authsuccess

    在 “users” 部分下面添加以下设置项:

    root = sshcl

    为希望启用审计的用户指定这个类名。

    如果根用户已经有一组要审计的类,那么把 sshcl 附加在列表末尾。例如,如果根用户已经有以下列表:

    root = general,tcpip

    可以把 sshcl 附加在列表末尾:

    root = general,tcpip,sshcl

    在 /etc/security/audit/events 文件中,附加以下事件:

    SSH_failnone = printf "%s"
    SSH_failpasswd = printf "%s"
    SSH_failkbdint = printf "%s"
    SSH_failpubkey = printf "%s"
    SSH_failhstbsd = printf "%s"
    SSH_failgssapi = printf "%s"
    SSH_invldusr = printf "%s"
    SSH_nologin = printf "%s"
    SSH_connclose = printf "%s"
    SSH_auditknwn = printf "%s"
    SSH_authsuccess = printf "%s"
    SSH_rootdned = printf "%s"
    SSH_exceedmtrix = printf "%s"
    SSH_connabndn = printf "%s"

    运行以下命令停止并重新启动审计子系统,让上面的修改生效:

    		            
    # /usr/sbin/audit shutdown

    # /usr/sbin/audit start

    为了确认已经正确地配置了审计,运行 auditpr 命令获取审计报告:

    auditpr  -v < /audit/trail

  • SSH 中的 TCP 包装器支持

    在带 with-tcp-wrappers 选项编译时,OpenSSH 支持 TCP 包装器。这个选项根据主机名或 IP 地址限制对 TCP 服务的访问。它使用 /etc/hosts.allow 和 /etc/hosts.deny 配置文件决定是否允许客户机连接 SSH 服务器。

    然后,TCP 包装器服务解析 /etc/hosts.allow 文件并应用为此服务指定的第一条规则。此文件采用的格式为:

    sshd(Service name) : <host name or IP address>

    首先检查 /etc/hosts.allow 文件。如果找到匹配的规则,sshd 就允许连接;否则,它检查 /etc/hosts.deny 文件中是否有匹配的规则。如果找到匹配的规则,就拒绝连接;否则,将允许连接。