我在 Ubuntu 12.04 上有一个可运行的 OpenVPN 系统,我想添加 Google Authenticator 以获得额外的安全性。
这是我当前的 openvpn 配置:
开发调谐 原始 UDP 端口 1096 ca ubusev04-ca.crt 证书 ubusev04.crt 密钥 ubusev04.key dh dh1024.pem 服务器 10.10.0.0 255.255.255.0 推“重定向网关 def1” 推“路由 192.168.0.0 255.255.255.0” 推“dhcp-选项 DNS 8.8.8.8” 推“dhcp-选项 DNS 8.8.4.4” 漂浮 日志附加 /var/log/openvpn-otp-1096-status.log
(这只是一个测试设置,我知道我应该改变它的某些方面,但现在它有效。)
在客户端我有:
开发调谐 客户 原始 UDP 远程 my.server.fqdn 1096 解析-重试无限 ca ubusev04-ca.crt 证书用户1.crt 密钥 user1.key 动词 3
上述设置运行良好:无错误、快速、稳定。
我尝试过几种方法来运行 Google Authenticator,但每次我最终都会解决这些文章中的附带问题。我不想针对服务器的本地用户/密码数据库进行身份验证,只想使用我已经安装的系统和 Google Authenticator。
我正在运行 Google Authenticator;我使用 apt-get install libpam-google-authenticator 安装了它,并且之前曾用它来验证 ssh 会话。它运行良好,但现在我已禁用它,因为它只是一个测试服务器,并且该特定测试已完成。
请具体说明。我知道我应该在服务器的 ovpn 配置中添加一个插件,并且我应该添加某物到 /etc/pam.d/openvpn 但具体是什么?
任何帮助将不胜感激!
/额外信息
我已关注这篇文章:http://www.howtoforge.com/securing-openvpn-with-a-one-time-password-otp-on-ubuntu 我没有从源代码进行编译,而是使用 apt-get install libpam-google-authenticator 安装了 Google Authenticator。我还阅读了以下文章,但在本例中没有使用它们:http://www.howtogeek.com/121650/how-to-secure-ssh-with-google-authenticators-two-factor-authentication/和http://zcentric.com/2012/10/09/google-authenticator-with-openvpn-for-2-factor-auth/。并且我已经按照建议阅读了 PAM 的相关内容 ;)
现在,这里有一些有趣的发展。
/etc/pam.d/openvpn 有以下内容:
帐户 [成功=2 new_authtok_reqd=完成 默认=忽略] pam_unix.so 帐户 [成功=1 new_authtok_reqd=完成 默认=忽略] pam_winbind.so 账户要求 pam_deny.so 帐户需要 pam_permit.so 身份验证需要 pam_google_authenticator.so
按照操作指南,我从 /etc/pam.d/common-account 复制了原始内容并添加了最后一行。现在,如果我注释掉最后一行,OpenVPN 连接就会成功。但是,如果最后一行没有注释掉,/var/log/auth.log 会记录以下内容:
PAM 无法 dlopen(pam_google_authenticator.so):/lib/security/pam_google_authenticator.so:未定义符号:pam_get_item PAM 添加错误模块:pam_google_authenticator.so
并且 /var/log/openvpn-otp-1096.log 记录了以下内容:
PLUGIN_CALL:插件函数 PLUGIN_AUTH_USER_PASS_VERIFY 失败,状态为 1:/usr/lib/openvpn/openvpn-auth-pam.so TLS 身份验证错误:对等方的身份验证用户名/密码验证失败 使用 SSL/TLS 上下文 AUTH-PAM:背景:用户“martin”身份验证失败:模块未知
问题似乎出在 PAM 和 Google Authenticator 之间。
Google 列出了其他插件的问题,但我真的找不到有关 Google Authenticator 的具体信息。
答案1
好的,谷歌是我的朋友。
我这样做了:
# apt-get 清除 libpam-google-authenticator # 下载 https://code.google.com/p/google-authenticator/downloads/list #apt-get 安装 libpam-dev
将此添加到 Makefile 中,紧接着许可证之后:
LDFLAGS="-lpam"
然后
# 制作 # 安装 # 服务 openvpn 重启
此外,确保 /home/username/.google_authenticator 对于使用它的用户来说除了读取权限之外没有任何权限。
现在我需要输入我的用户名,即服务器上的本地用户名(我的 shell 帐户)作为我的 OpenVPN 用户名,并输入 Google Authenticator 6 位代码作为密码。
现在它可以工作了。
感谢大家的时间:)
(我怎样才能将此帖子标记为已解决?我只需编辑主题标题吗?)
答案2
如果您只想使用 OpenVPN 的 OTP 身份验证,可以使用原生 OTP OpenVPN 插件。它与 Google Authenticator 密钥兼容。所有密钥都存储在一个文本文件中,无需配置 PAM 或创建用户目录。