为你的Linux VPS开启两步验证

1. 什么是两步验证(多重要素验证)

本章节部分内容节选自WikiPedia维基百科

多重要素验证(英语:Multi-factor authentication,缩写为 MFA),又译多因子认证、多因素验证、多因素认证,是一种电脑访问控制的方法,用户要通过两种以上的认证机制之后,才能得到授权,使用电脑资源。例如,用户要输入PIN码,插入银行卡,最后再经指纹比对,通过这三种认证方式,才能获得授权。这种认证方式可以提高安全性。

多重要素验证的概念也广泛应用于计算机系统以外的各领域。例如许多国家使用的自助出入境检查系统允许旅客不经人工检查即可通过边境检查。使用时,通常需要旅行证件扫描、指纹、面部特征三种要素结合来验证身份。

2. 在你的Linux VPS中添加两步验证

2.1 配置SSH免密登录(允许特定的计算机不通过密码直接访问你的Linux服务器)

2.1.1 在你的本地计算机中运行以下命令:

ssh-keygen -t rsa   # 生成SSH公钥,全程回车即可,无需输入密码

2.1.2 然后运行以下命令将密码存储到服务器端

ssh-copy-id -i ~/.ssh/id_rsa.pub <your-vps-user>@<your-vps-ip>

2.1.3 如果你的本地计算机使用的是Windows,请直接连接到你的vps,并编辑vps服务器端的/home/username/.ssh/authorized_keys文件,并将本地计算机生成的id_rsa.pub公钥追加到服务器端。

这样,你就可以在不使用密码的情况下连接到VPS服务器了

2.2安装所需要的包

2.2.1 在你的计算机中安装ntpdatelibpam-google-authenticator两个包(Debian、Arch、RedHat系的Linux发行版本均可安装),安装完成后就可以完成下一步的操作了

  • 注意

CentOS需要先安装epel-release

2.3 校验当前的日期时间

2.3.1 使用该命令校准日期时间,防止时间不准确导致MFA验证码错误

sudo ntpdate pool.ntp.org

2.4 禁用传统密码登录

2.4.1 这样做的话,即使其他未被授权的用户拿到了你的root密码,但是你的服务器端没有该用户的公钥,该用户仍然无法登录到你的服务器。

2.4.2 使用root用户权限编辑/etc/pam.d/sshd文件,注释掉@include common-auth,就像这样

# @include common-auth

2.5 将两步验证和手机或其他设备的APP绑定

2.5.1 运行以下命令,绑定两步验证

google-authenticator -t -f -d -w 3 -e 10 -r 3 -R 30

2.5.2 此时你会看到一个二维码,然后你需要使用Microsoft Authenticator、1Password或Google Authenticator等APP来扫描二维码

2.6 配置两步验证

2.6.1 再次编辑/etc/pam.d/sshd文件,并追加以下文件

auth required pam_google_authenticator.so

2.6.2 编辑/etc/ssh/sshd_config文件,修改以下文件

PermitRootLogin yes                                     # 允许通过ssh登录root用户
PasswordAuthentication no                               # 允许密码登录
PubkeyAuthentication yes                                # 允许公钥登录
AuthenticationMethods publickey,keyboard-interactive    # 验证方式

2.7 配置密码两步验证(可选)

2.7.1 编辑/etc/pam.d/common_auth文件

auth required pam_google_authenticator.so               # 密码登录需要使用两步验证

2.8 重启sshd服务

systemctl restart sshd