Ssh

如何使用帶有 PAM 的 ssh 伺服器但不允許密碼驗證?

  • June 24, 2019

許多教程告訴你像這樣配置你的 ssh 伺服器:

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no 

但是使用此設置您不能使用 PAM,因為我計劃將 2 Factor Auth 與 Google Authenticator(OTP 一次性密碼)一起使用,我需要 PAM。

那麼如何配置一個新的 debian jessie ssh 守護程序,如果我想阻止使用普通密碼登錄但仍然允許使用 PAM。

也許確切的問題是如何配置 pam 以禁止密碼?

PAM 身份驗證的詳細資訊

禁用基於 PAM 的密碼身份驗證相當不直覺。幾乎所有 GNU/Linux 發行版(Slackware 除外)和 FreeBSD 都需要它。如果您不小心,您可以將 PasswordAuthentication 設置為“否”,並且仍然通過 PAM 身份驗證僅使用密碼登錄。事實證明,您需要將“ChallengeResponseAuthentication”設置為“no”才能真正禁用 PAM 身份驗證。FreeBSD 手冊頁有這樣的說法,這可能有助於澄清情況:

請注意,如果 ChallengeResponseAuthentication 為“yes”,並且 sshd 的 PAM 身份驗證策略包括 pam_unix(8),則無論 PasswordAuthentication 的值如何,都將允許通過質詢-響應機制進行密碼身份驗證。

http://www.unixlore.net/articles/five-minutes-to-more-secure-ssh.html

也許確切的問題是如何配置 pam 以禁止密碼?

正確的。您已經偶然發現設置UsePAM no通常是不好的建議。它不僅阻止任何形式的基於 PAM 的身份驗證,它還禁用accountsession模組。訪問控制和會話配置是好東西。

首先,讓我們建立一個需求列表:

  • 一次性密碼通過pam_google_authenticator.so. 這需要UsePAM yesChallengeResponseAuthentication yes。畢竟,您是在提示他們提供憑證!
  • 沒有其他形式的通過 PAM 的密碼驗證。這意味著禁用任何auth可能允許通過keyboard-interactive登錄傳輸密碼的模組。(我們必須為 OTP 啟用)
  • 基於密鑰的身份驗證。我們需要進行publickey身份驗證,也許gssapi-with-mic如果您配置了 Kerberos。

通常,使用密鑰進行身份驗證會完全跳過基於 PAM 的身份驗證。這會阻止我們使用舊版本的 openssh,但 Debian 8 (jessie) 支持該 AuthenticationMethods指令。這允許我們需要多種身份驗證方法,但僅適用於實現 SSHv2 的客戶端。


sshd 配置

以下是我建議的行/etc/ssh/sshd_config。確保您有辦法訪問此系統sshd,以防萬一您破壞了某些東西!

# Require local root only
PermitRootLogin no

# Needed for OTP logins
ChallengeResponseAuthentication yes
UsePAM yes

# Not needed for OTP logins
PasswordAuthentication no

# Change to to "yes" if you need Kerberos. If you're unsure, this is a very safe "no".
GSSAPIAuthentication no


# Require an OTP be provided with key based logins
AuthenticationMethods publickey,keyboard-interactive

# Use this instead for Kerberos+pubkey, both with OTP
#
#AuthenticationMethods gssapi-with-mic,keyboard-interactive publickey,keyboard-interactive

sshd完成這些更改後,不要忘記重新載入。

PAM 配置

我們仍然需要配置 PAM。假設全新安裝 Debian 8(根據您的問題):

  • @include common-auth來自 的評論/etc/pam.d/sshd
  • 查看/etc/pam.d/sshd並確認不auth存在以開頭的行。如果這是全新安裝,則不應該存在,但最好是安全的。
  • 為 .添加一個auth條目pam_google_authenticator.so

請記住,本地密碼仍然有效。

我們沒有做出任何會影響通過本地控制台登錄的更改,或者阻止使用者使用密碼來升級他們的權限,sudo.這超出了問題的範圍。如果您決定更進一步,請記住應該始終允許 root 通過密碼在本地登錄。否則,您可能會意外地將自己鎖定在系統之外。

引用自:https://serverfault.com/questions/783082