如何在 Ubuntu 12.04 上将 Google Authenticator 与 OpenVPN 服务器结合使用

如何在 Ubuntu 12.04 上将 Google Authenticator 与 OpenVPN 服务器结合使用

我在 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 或创建用户目录。

一探究竟:https://github.com/evgeny-gridasov/openvpn-otp

相关内容