不,你当然不能那样做。这将破坏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
之后,您要求openvpn针对libpam进行身份验证,libpam具有自己的google auth模块。将此附加到您的openvpn服务器文件:
plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn
这表示我们将使用带有pam auth id openvpn的pam身份验证方法。
现在,为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
在这里,我们说如果没有成功的google身份验证,我们将立即失败(必要),我们使用的是特殊的机密文件,而不是默认的$ HOME / .google_authenticator(secret =),并且由于没有真正的userid关联,我们以用户openvpn的身份访问文件与我们的用户。在下一行中,我们只是说我们允许成功认证后的每个人都可以连接。当然,您应该在此处实施自己的权限政策。您可以使用相应的pam模块通过文件,mysql db或ldap控制允许的用户。
将此附加到您的openvpn客户端文件
auth-user-pass
auth-nocache
reneg-sec 0
我们使用auth-user-pass来让openvpn客户端询问用户名和密码。我们不喜欢缓存(“密码”正在更改),出于相同的原因,定期重新协商对我们不利。
之后,您应该可以不使用openvpn-otp进行连接。请考虑这是一种更加灵活的方法,因为您可以根据需要在pam控制文件中实现非常复杂的规则。您可以基于mysql或ldap目录启用/禁用用户,而无需触摸那些证书。