我有一个openVPN安装程序,用户在运行openVPN的Debian VM上没有 shell帐户。 我在Google上find的文章都有为经典* nix用户(需要在用户主目录中执行Authenticator二进制文件)设置Google Authenticator的说明。
是否有文档解释如何集成Google Authenticator for openvpn服务器,仅基于客户端使用的.ovpn文件进行身份validation?
我查看了https://github.com/evgeny-gridasov/openvpn-otp ,但仍需要configurationGoogle Authenticator。
不,当然,你不能那样做。 这将打败2FA的目的。 您的服务器必须有一种方法来validation用户的凭据,这个信息不应该通过networking发送(即不能单独使用client.ovpn文件)。
虽然您不一定需要创buildunix用户,但是您必须让用户将其validation代码安装到服务器。 您可以使用sftp与虚拟用户使用他们已经颁发的证书,https与客户端(相互)授权,CIFS(samba),或者带有TLS扩展名的旧的ftp或者让服务器知道用户创build的validation码的任何其他方式。 通信通道应该是安全的(encryption||本地)。
当然,如果您的用户上传自己的文件,则不能使用openvpn-otp使用的基于聚合文件的凭据。 幸运的是,我们有另外一个(也是更好的)select,使用linux优秀的安全模块pam。
首先,您必须通过上述方法之一收集目录中由google-authenticator创build的用户文件。 在我们的情况下,它将是/ etc / google-auth。
您必须在这里强制执行所有文件的单一用户标识,因为您没有真正的用户。 让它成为openvpn 。 权限必须是0400(-r ——–)。 Pam不喜欢世界/组可读凭证(当然)。 你可以使用samba,apache,ftp或在最坏的情况下使用cron选项卡(不推荐)轻松地执行此操作。
为了testing目的,只要这样做:
mkdir /etc/google-auth apt-get install libpam-google-authenticator google-authenticator # set up as you wish, save image and/or codes mv ~/.google_authenticator /etc/google-auth/some_username chown -R openvpn /etc/google-auth
之后,您要求openvpn对libpam进行身份validation,libpam拥有自己的Googleauthentication模块。 追加到您的openvpn服务器文件:
plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn
这就是说我们将使用pamauthentication方法和pam auth id openvpn 。
现在,创buildopenvpn的pam设置。 编辑/etc/pam.d/openvpn:
auth requisite /lib/security/pam_google_authenticator.so secret=/etc/google-auth/${USER} user=openvpn account required pam_permit.so
在这里我们说,没有成功的谷歌身份validation,我们立即失败(必要),我们正在使用一个特殊的秘密文件,而不是默认的$ HOME / .google_authenticator(秘密=),我们作为用户openvpn访问文件,因为没有真正的用户关联与我们的用户。 在下一行中,我们只是说,我们允许每个人都authentication成功后连接。 当然你应该在这里实现你自己的权限策略。 您可以通过file,mysql db或ldap控制相应的pam模块允许的用户。
追加到您的openvpn客户端文件
auth-user-pass auth-nocache reneg-sec 0
我们使用auth-user-pass让openvpn客户端询问用户名和密码。 我们不喜欢caching(“密码”正在改变),定期重新否定对我们来说也是同样的原因。
之后,你应该能够连接没有openvpn-otp。 请考虑这是更灵活的方法,因为如果你愿意,你可以在pam控制文件中实现非常复杂的规则。 例如,您可以基于您的mysql或ldap目录启用/禁用用户,而不必触及这些证书。