OpenVPN 2.4 + Google Authenticator = 身份驗證失敗
我們有一個企業 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``openvpn
systemd 服務中缺少權限(在此處查看更多詳細資訊)但是,即使在該身份驗證之後,新伺服器上仍然失敗。這是我的
/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
使用者主目錄中的文件。更多資訊: