簡介:本文討論 OpenSSH 支持的一些身份驗證方法。OpenSSH 是一種實現 SSH1 和 SSH2 協議的免費工具。通過本文您將了解 OpenSSH 中一些身份驗證方法的配置以及 IBM® 支持的 OpenSSH 版本中新增的特性。
簡介
OpenSSH 是一種實現 SSH1 和 SSH2 協議的免費工具。它是一種安全可靠的工具,常常用來替代 r-commands。通過 ssh 會話的通信是加密的,它會加密所有通信流,包括密碼。
本文描述如何配置基於主機的和 PAM 身份驗證方法,以及在 IBM 支持的 OpenSSH 版本中新增的一些特性和配置選項。IBM 支持的 OpenSSH 版本的下載鏈接見 參考資料。
要想安裝 OpenSSH,必須先安裝 OpenSSL。現在可以獲得 installp 映像格式的 OpenSSL;下載信息見 參考資料。
SSH 中基於主機的身份驗證
當可信主機上的用戶希望登錄遠程計算機(可以是不可信的系統)時,使用 SSH 中基於主機的身份驗證。這種方法不需要密碼。通過使用以下配置設置,可信主機上的用戶就可以登錄遠程計算機,不需要提供密碼。
在客戶機和服務器端啟用以下配置選項。
在客戶機上的 /etc/ssh/ssh_config 文件中,做以下修改:
HostbasedAuthentication yes EnableSSHKeysign yes
在服務器端的 /etc/ssh/sshd_config 文件中,做以下修改:
HostbasedAuthentication yes IgnoreRhosts no
執行以下操作之一:
如果作為根用戶在服務器上登錄,那麼在 /.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 >。
修改 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 [email protected] Connecting to aixcomm.in.ibm.com... [email protected]'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 文件中是否有匹配的規則。如果找到匹配的規則,就拒絕連接;否則,將允許連接。
結束語
本文幫助用戶了解如何設置 OpenSSH 支持的一些身份驗證方法。本文討論了身份驗證方法的配置和 IBM OpenSSH 支持的一些新特性。