Ani*_*esh 11 openvpn google-authenticator
我有一个 openVPN 设置,其中用户在运行 openVPN 的 Debian VM 上没有shell 帐户。我在谷歌搜索时发现的文章都有为经典 *nix 用户设置 Google Authenticator 的说明(例如,需要在用户的主目录中执行 Authenticator 二进制文件)。
是否有文档解释如何为仅基于.ovpn
客户端使用的文件进行身份验证的 openvpn 服务器集成 Google 身份验证器?
我查看了https://github.com/evgeny-gridasov/openvpn-otp,但它仍然需要配置 Google Authenticator。
不,你当然不能那样做。这将违背 2FA 的初衷。您的服务器必须有一种方法来验证用户凭据,并且不应通过网络发送此信息(即您不能单独使用 client.ovpn 文件)。
虽然你不一定要创建unix用户,但你必须让你的用户将他们的验证码安装到服务器上。您可以将 sftp 与虚拟用户一起使用,使用其已颁发的证书、具有客户端(相互)授权的 https、CIFS (samba) 或具有 TLS 扩展的旧 ftp 或任何其他让服务器知道用户创建的验证码的方式。通信通道应该是安全的(加密 || 本地)。
当然,如果您的用户上传自己的文件,您就无法使用 openvpn-otp 使用的基于聚合文件的凭据。幸运的是,我们有另一个(而且更好的)选择,即使用 Linux 优秀的安全模块 pam。
首先,您必须通过上述方法之一将 google-authenticator 创建的用户文件收集到目录中。在我们的例子中,它将是 /etc/google-auth.
您必须对此处的所有文件强制使用单一用户 ID,因为您没有真正的用户。让它成为openvpn。权限必须为 0400 (-r--------)。Pam 不喜欢世界/组可读凭证(当然)。您可以使用 samba、apache、ftp 轻松强制执行此操作,或者在最坏的情况下使用 cron 选项卡(不推荐)。
出于测试目的,只需执行以下操作:
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
Run Code Online (Sandbox Code Playgroud)
之后,您要求 openvpn 针对 libpam 进行身份验证,它有自己的 google auth 模块。将其附加到您的 openvpn 服务器文件中:
plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn
Run Code Online (Sandbox Code Playgroud)
这表示我们将使用 pam 身份验证方法和 pam auth id openvpn。
现在,为 openvpn 创建 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
Run Code Online (Sandbox Code Playgroud)
在这里,我们说,如果没有成功的谷歌身份验证,我们会立即失败(必需),我们使用特殊的秘密文件而不是默认的 $HOME/.google_authenticator (secret=),并且我们以用户 openvpn 的身份访问这些文件,因为没有关联的真实用户 ID与我们的用户。在下一行中,我们只是说我们允许每个人在身份验证成功后进行连接。当然,您应该在这里实施您自己的权限策略。您可以通过文件、mysql db 或 ldap 以及相应的 pam 模块来控制允许的用户。
将其附加到您的 openvpn 客户端文件
auth-user-pass
auth-nocache
reneg-sec 0
Run Code Online (Sandbox Code Playgroud)
我们使用 auth-user-pass 让 openvpn 客户端询问用户名和密码。我们不喜欢缓存(“密码”正在改变),出于同样的原因,定期重新协商对我们不利。
之后您应该能够在没有 openvpn-otp 的情况下进行连接。请考虑这是更灵活的方法,因为如果您愿意,您可以在 pam 控制文件中实现非常复杂的规则。例如,您可以根据 mysql 或 ldap 目录启用/禁用用户,而无需触及这些证书。
归档时间: |
|
查看次数: |
12784 次 |
最近记录: |