我正在尝试使用 Google Authenticator 为 Ubuntu 16.04 上的 OpenVPN 设置设置 MFA。现在 OpenVPN 运行良好,直到我将 Google Authenticator 引入其中。
我的server.conf文件内容如下:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.0.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
client-to-client
keepalive 10 120
tls-auth ta.key 0
key-direction 0
cipher AES-128-CBC
auth SHA256
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 3
plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn
reneg-sec 0
我的client.conf内容如下:
client
dev tun
proto udp
remote 10.1.0.2 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
remote-cert-tls server
comp-lzo
verb 3
cipher AES-128-CBC
auth SHA256
key-direction 1
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
auth-user-pass
auth-nocache
reneg-sec 0
另外,在 /etc/pam.d 中我克隆了 common-accounts 来创建一个包含以下行的 openvpn 文件:
account requisite pam_deny.so
account required pam_permit.so
auth requisite pam_google_authenticator.so secret=/home/${USER}/.google_authenticator
现在,我已为连接到 VPN 服务器的每个客户端创建了必要的用户配置文件,例如 Ubuntu 上的客户端 1、客户端 2 和客户端 3。现在,假设客户端 1 正在尝试连接到 VPN 服务器。我在客户端系统上以客户端 1 的身份登录,并尝试连接到 VPN 服务器。
我得到以下信息,
Enter Auth Username: ******
Enter Auth Password: ************* ( Password for local user profile? + OTP)
在这之后,我得到了
[server] Peer Connection Initiated with [AF_INET]10.1.0.2:1194
SENT CONTROL [server]: 'PUSH_REQUEST' (status=1)
AUTH: Received control message: AUTH_FAILED
TCP/UDP: Closing socket
SIGTERM[soft,auth-failure] received, process exiting
现在我不确定为什么会收到 AUTH 失败错误。在连接到 VPN 服务器的过程中,我见过许多不同的输入用户名/密码组合的方式。
Method 1 - username ; password (local account password + OTP)
Method 2 - username ; password (local account password) +
separate prompt section which asks for Google authenticator OTP
Method 3 - username ; OTP
我从未收到单独的 Google Authenticator 提示,要求我单独输入 OTP。因此,我尝试了方法 1,并尝试了方法 2,希望收到 Google Authenticator 提示,但从未出现过。
问题 1:使用 Google Authenticator 登录凭据的正确方法是什么。我是否遗漏了某些内容,这可能是我没有单独提示输入 OTP 的原因?
我观察到的另一件事是,
sudo systemctl status openvpn@server
对于上述两种登录方法,结果不同。
当我尝试不同的密码 + OTP 组合时收到了这些状态消息。
openvpn(pam_google_authenticator)[15305]: Invalid verification code
openvpn(pam_google_authenticator)[15305]: Did not receive verification code from user
openvpn(pam_google_authenticator)[15305]: Failed to compute location of secret file
问题 2:有人能向我解释一下这些状态消息对于我的登录输入意味着什么吗?
问题 3:如何启动并运行 MFA。
仅供参考,我使用了 libpam-google-authenticator。我没有遵循使用 makefile 并为 pam 添加配置参数的方法。
谢谢!
答案1
确保/home/user
目录至少+x
能够读取主目录中的 .google_authenticator 文件。
答案2
还可以尝试将其添加到/etc/pam.d/openvpn
auth requisite pam_google_authenticator.so forward_pass
auth required pam_unix.so use_first_pass
答案3
.google_authenticator 文件应该有 0600 权限,但您的主目录应该是 0711(除非您正确设置了组,否则为 0710)。昨天也遇到了同样的问题。如果您有 SELinux mage,请确保它也不会妨碍您。