我有一个使用 Google Authenticator 进行 TFA 的 OpenVPN 服务器。它运行良好,已经运行了一年多。就在昨晚/今天,它停止了工作。我设法找到了 auth.log 文件和以下错误:
openvpn(pam_google_authenticator)[1366]: Failed to read “/home/administrator/.google_authenticator” for “administrator”
我尝试更改该文件的读取权限.google_authenticator
,但没有成功。
我将文件所有者和组分别改为 root 和管理员。但都不起作用。
我在网上看到,这可能是时区问题,于是我更新了时区为我的时区,而不是 UTC。但这也没用。
我怎样才能使 pam.d 能够.google_authenticator
再次读取?
答案1
因此这并没有启用 pam.d 来读取.google_authenticator
,但我确实让我的 OpenVPN 再次工作。
我必须创建一个新的服务用户和他们拥有的新文件夹。然后我必须将所有.google_authenticator
文件移到该文件夹中。我将所有文件重命名为其各自的用户名。然后我必须添加以下行
auth required /lib/x86_64-linux-gnu/security/pam_google_authenticator.so secret=/etc/openvpn/ga/${USER} user=goog forward_pass
到我的 openvpn pam 文件。
/etc/openvpn/ga
是 Google 身份验证用户 ( ) 拥有的文件夹goog
。${USER}
是一个pam_google_authenticator.so
变量,表示尝试登录的用户的用户名。 还有另一个pam_google_authenticator
变量表示用户的主目录(${HOME}
或),但它不能与选项~
一起使用。user
pam_google_authenticator
这这篇文章非常有帮助。它解释了很多步骤。它说要创建新用户和组,为 Google Authenticator 文件创建目录,并赋予它们适当的权限。然后它给出了如何在不同用户下运行 pam 的具体说明。
答案2
我从 2.5.?(我不记得以前的版本了)升级到 2.5.9 后也遇到了同样的问题。
我得到了一个提示这里,有人认为这可能是由于 systemd init 文件中的 ProtectHome 指令造成的,因为手动运行 openvpn 不会触发此问题。这导致了一种更简单的解决方案。
因此我编辑了服务初始化文件(在我的情况下;对您来说可以是不同的文件(例如))转换/lib/systemd/system/[email protected]
/lib/systemd/system/[email protected]
ProtectHome=true
到
ProtectHome=false
然后我重新加载了 Demon,systemctl daemon-reload
并重启了 OpenVPNsystemctl restart [email protected]
现在问题已经解决,我可以再次使用 Google Authenticator 2FA 连接到 OpenVPN。
如果有人对此方法的安全有疑虑,请发表评论。