Vla*_*rov 5 openvpn pam google-authenticator ubuntu-18.04
我们有一个企业 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
Run Code Online (Sandbox Code Playgroud)
如果我用 替换这一行auth required pam_permit.so
,我将成功通过身份验证(当然使用任何密码)并连接,所以问题肯定是 MFA 介入的地方。
同时,pamtester
告诉我pam_google_authenticator.so
工作正常:
$ sudo pamtester openvpn vlad authenticate
Verification code:
pamtester: successfully authenticated
Run Code Online (Sandbox Code Playgroud)
这是我在尝试对 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
Run Code Online (Sandbox Code Playgroud)
在这个线程中,我发现了一个建议,即服务器配置中调用 auth-pam 模块的行应该从
plugin openvpn-plugin-auth-pam.so openvpn
Run Code Online (Sandbox Code Playgroud)
到:
plugin openvpn-plugin-auth-pam.so "openvpn login USERNAME password PASSWORD"
Run Code Online (Sandbox Code Playgroud)
但是,它们似乎都不起作用 - 我仍然收到“身份验证失败”。
有趣的是,在 Xenial 的基础上重建服务器的相同实验有效 - 所以问题似乎出在 Ubuntu Bionic(一些额外的安全功能?)或 OpenVPN 2.4(一些兼容性问题)中。
有没有人有任何想法如何解决这个问题?
更新。只是尝试添加nullok
到/etc/pam.d/openvpn
和删除~/.google_authenticator
文件。仍然失败,同样的错误。
小智 2
Ubuntu 18.04 及更高版本在 systemd 中使用更严格的沙箱配置,这会干扰 google-authenticator。
只需编辑/lib/systemd/system/openvpn@.service
并删除此行:
[Service]
...
ProtectHome=true
Run Code Online (Sandbox Code Playgroud)
这是 systemd 的一项新功能,它使包含“用户”内容的目录显示为空,例如/home
、/root
和/run/user
启用此功能通常是一个好主意,因为它/home
通常包含 SSH 和 GPG 密钥,但在这种情况下,它会阻止 OpenVPN 读取.google-authenticator
用户主目录中的文件。
更多信息:
归档时间: |
|
查看次数: |
2022 次 |
最近记录: |