Openvpn

OpenVPN 2.4 + Google Authenticator = 身份驗證失敗

  • March 18, 2021

我們有一個企業 VPN 伺服器,在帶有 Ubuntu 16.04 Xenial 的 AWS 實例上執行 OpenVPN 2.3。伺服器已使用 Ansible playbook 進行配置。

我計劃升級到 Ubuntu 18.04 Bionic,它還將 OpenVPN 升級到 2.4 版(這是一個理想的副作用,因為 OpenVPN 2.3 已被棄用)。所以我創建了一個帶有 Bionic 的測試實例,並針對它執行 Ansible playbook。配置包括通過 Google Authenticator 進行的 MFA,所以我還~/.google_authenticator從舊伺服器複製文件並應用chmod 400到它。

在新伺服器工作之前,我還必須解決一些兼容性問題:

  • openvpn-plugin-auth-pam.so文件位置已更改,現在不需要在伺服器配置中指定其完整路徑。
  • CAP_AUDIT_WRITE``openvpnsystemd 服務中缺少權限(在此處查看更多詳細資訊)

但是,即使在該身份驗證之後,新伺服器上仍然失敗。這是我的/etc/pam.d/openvpn樣子:

auth required pam_google_authenticator.so

如果我將此行替換為auth required pam_permit.so,我將成功通過身份驗證(當然使用任何密碼)並連接,所以問題肯定是 MFA 介入的地方。

同時,pamtester告訴我pam_google_authenticator.so效果很好:

$ sudo pamtester openvpn vlad authenticate
Verification code:
pamtester: successfully authenticated

這是我在嘗試對 VPN 伺服器進行身份驗證時在 syslog 中看到的內容:

Aug 16 15:17:39 ip-10-7-0-230 openvpn[10873]: AUTH-PAM: BACKGROUND: received command code: 0
Aug 16 15:17:39 ip-10-7-0-230 openvpn[10873]: AUTH-PAM: BACKGROUND: USER: vlad
Aug 16 15:17:39 ip-10-7-0-230 openvpn[10873]: AUTH-PAM: BACKGROUND: my_conv[0] query='login:' style=2
Aug 16 15:17:39 ip-10-7-0-230 openvpn[10873]: AUTH-PAM: BACKGROUND: user 'vlad' failed to authenticate: Authentication failure

這個執行緒中,我發現了一個建議,即伺服器配置中呼叫 auth-pam 模組的行應該從

plugin openvpn-plugin-auth-pam.so openvpn

到:

plugin openvpn-plugin-auth-pam.so "openvpn login USERNAME password PASSWORD"

但是,它們似乎都不起作用 - 我仍然收到“身份驗證失敗”。

有趣的是,在 Xenial 的基礎上重建伺服器的相同實驗有效 - 所以問題似乎出在 Ubuntu Bionic(一些額外的安全功能?)或 OpenVPN 2.4(一些兼容性問題)中。

有誰知道如何解決這個問題?

更新。剛剛嘗試添加nullok/etc/pam.d/openvpn刪除~/.google_authenticator文件。仍然失敗,同樣的錯誤。

Ubuntu 18.04 及更高版本在 systemd 中使用更嚴格的沙盒配置,這會干擾 google-authenticator。

只需編輯/lib/systemd/system/openvpn@.service並刪除此行:

[Service]
...
ProtectHome=true

這是 systemd 的一個較新功能,它使包含“使用者”內容的目錄顯示為空,例如/home,/root/run/user

通常啟用它/home通常包含 SSH 和 GPG 密鑰是一個好主意,但在這種情況下,它會阻止 OpenVPN 讀取.google-authenticator使用者主目錄中的文件。

更多資訊:

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