二次验证是目前比较常用的安全手段,通过设置二次验证,我们可以有效的避免账户密码可能的泄露导致的账户信息泄露,因为每次登录前我们都需要获取一个一次性验证码,没有验证码就无法成功登录。二次验证也叫两步验证、两步验证等。本文中老唐将说明如何在 Ubuntu 20.04 上使用 Google Authenticator PAM 模块进行 SSH 和 sudo 身份验证。
一、准备工作
- Ubuntu 20.04 VPS 服务器
- 二次验证 App,比如谷歌的
- SSH 权限
VPS 推荐可以参考《#老唐推荐# 最好用的国内云服务器、国外便宜 VPS 推荐》。
二、安装 PAM 模块
通过 SSH 登录 Ubuntu 20.04 系统的 VPS,使用下面命令安装 Google Authenticator PAM 模块:
sudo apt install libpam-google-authenticator
三、生成二次验证代码
使用下面命令运行 Google Authenticator 设置程序:
google-authenticator -t -f -d -w 3 -e 10 -r 3 -R 30
选项说明:
- -t : 使用 TOTP 验证
- -f : 将配置保存到
~/.google_authenticator
- -d : 不允许重复使用以前使用的令牌
- -w 3 : 允许的令牌的窗口大小。 默认情况下,令牌每 30 秒过期一次。 窗口大小 3 允许在当前令牌之前和之后使用令牌进行身份验证以进行时钟偏移。
- -e 10 : 生成 10 个紧急备用代码
- -r 3 -R 30 : 限速,每 30 秒允许 3 次登录
更多帮助信息可以使用 --help
选项查看。
程序运行后,将会更新配置文件,并且显示下面信息:
- 二维码,您可以使用大多数身份验证器应用程序扫描此代码。
- 一个秘密的钥匙,如果您无法扫描二维码,请在您的应用中输入此密钥。
- 初始验证码,该验证码将在30秒后失效。
- 10 个一次性使用紧急代码的列表。
四、配置 SSH
下面这些步骤将禁用密码身份验证,SSH 密钥将被来登录,并且将启用 2FA。
1、修改 SSH PAM 配置文件:
sudo vim /etc/pam.d/sshd
2、添加下面内容到配置文件:
auth required pam_google_authenticator.so nullok
3、禁用密码验证(添加 # 将其注释):
# @include common-auth
4、保存并关闭文件(:wq)
5、修改 SSH 配置文件:
sudo vim /etc/ssh/sshd_config
6、将 ChallengeResponseAuthentication
设为 yes:
ChallengeResponseAuthentication yes
7、检查下面几个设置项是否正确设置:
PasswordAuthentication no
PubkeyAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
8、保存并关闭文件。
9、重启 SSH 服务:
sudo systemctl restart ssh
10、重新登录 VPS,需使用 SSH 密钥,并且需要二次验证。
五、配置 sudo 二次验证
1、编辑 /etc/pam.d/common-auth
:
sudo vim /etc/pam.d/common-auth
2、添加下面内容:
auth required pam_google_authenticator.so nullok
3、保存并退出。
六、从二次验证锁定中恢复
1、紧急备份
如果您无法访问身份验证器应用程序,请使用您的紧急备用代码之一。 该代码仅供一次性使用。
2、禁用特定用户的二步验证
修改 /etc/ssh/sshd_config
文件,找到下面的选项:
AuthenticationMethods publickey,keyboard-interactive
移除 keyboard-interactive
:
AuthenticationMethods publickey
之后保存文件,并且重启 SSH:
sudo systemctl restart ssh