Debian

使用Google身份驗證器的 SSH 公鑰身份驗證仍然要求輸入密碼

  • August 10, 2021

我正在嘗試使用 libpam-google-authenticator 通過 ssh 啟用 2FA。並非所有使用者都需要啟用身份驗證器。每個人都使用 ssh 公鑰,沒有人有密碼。我正在執行 Debian buster,並且我還嘗試了來自 Bullseye 的 libpam-google-authenticator。

我的問題是,無論我在 PAM 配置中添加什麼,沒有啟用身份驗證器的使用者永遠不會直接登錄,而是總是要求輸入密碼

我已經安裝了 libpam-google-authenticator 並配置了 /etc/ssh/sshd_config :

PasswordAuthentication no
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no
PermitEmptyPasswords no

我無法計算出正確的 PAM 配置,以便沒有 .google_authenticator 文件的使用者仍然登錄。根據我使用的內容,系統會提示使用者輸入密碼(他們沒有密碼),或者沒有完全允許進入。

在 /etc/pam.d/sshd 我嘗試過(像這樣Trying to get SSH with public key (no password) + google 身份驗證器在 Ubuntu 14.04.1 上工作):

#@include common-auth
auth       required     pam_google_authenticator.so debug nullok

在這種情況下,沒有驗證器設置的使用者會被以下調試拒絕;

Aug 05 15:11:18 <host> sshd(pam_google_authenticator)[746624]: debug: start of google_authenticator for "<user>"
Aug 05 15:11:18 <host> sshd(pam_google_authenticator)[746624]: debug: end of google_authenticator for "<user>" Result: The return value should be ignored by PAM dispatch
Aug 05 15:11:18 <host> sshd[746620]: error: PAM: Permission denied for <user> from <IP>

是否pam_permit需要設置備份案例?

我也嘗試過之前和之後的各種組合,auth requiredauth sufficient它們@include common-auth都導致沒有驗證器的使用者被要求輸入密碼,有時還要求有驗證器的使用者輸入密碼。

有沒有人有做這個工作的食譜?

這是我的工作配置。有些使用者啟用了身份驗證器,有些則沒有,並且只允許使用公鑰進行 SSH 登錄,從不允許使用密碼。

在 /etc/ssh/sshd_config 中,

UsePAM yes
PasswordAuthentication no
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
PermitEmptyPasswords no

在 /etc/pam.d/sshd 中,

# Standard Un*x authentication.
#@include common-auth

# Require authenticator, if not configured then allow
auth    required    pam_google_authenticator.so debug nullok
auth    required    pam_permit.so

@include comon-auth必須禁用,因為它包含我不想使用的 pam_unix。然後,您需要pam_permit使沒有身份驗證器的使用者身份驗證成功(為此pam_google_authenticator返回忽略而不是通過)。

這仍然不允許 root 使用 ssh 密鑰登錄;sshd 日誌

sshd[1244501]: fatal: Internal error: PAM auth succeeded when it should have failed

這在Google Authenticator PAM 上討論了 SSH 阻止 root login without 2FA

如上所述,我認為使用 SSH 配置為某些組強制執行 2FA 實際上更好,正如@zoredache 建議的那樣。這很容易讓您將某些 IP 列入白名單,因為它們也不需要 2FA。在這種情況下, sshd_config 例如說

UsePAM yes
PasswordAuthentication no
ChallengeResponseAuthentication yes
#AuthenticationMethods any # default
PermitEmptyPasswords no

Match Group adm Address *,!172.16.1.0/24
   AuthenticationMethods publickey,keyboard-interactive

和 /etc/pam.d/ssh 說

Standard Un*x authentication.
#@include common-auth

# Require authenticator; SSH should not allow any user in who doesn't have it
auth       sufficient   pam_google_authenticator.so debug nullok
auth       requisite    pam_deny.so

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