linux服务器添加google(Two-Factor Authentication,2FA)多因子登录认证

参考

一. 部署

1.安装软件

centos安装软件
1
2
3
4
5
6
7
8
9
10
# 首先我们需要启用epel仓库
yum install epel-release
# 同步时间(因为我现在用的机器可以连接外网所以直接同步了外网,如果是内网机器则与现在时间相差不超过30S)
yum -y install ntp ntpdate
ntpdate ntp1.aliyun.com
# 接着直接安装google验证器
# 查看版本信息
yum list google-authenticator
# 直接安装
yum install google-authenticator

NOTE: 也可以在github下载编译安装

ubuntu安装软件
1
2
# 安装软件
sudo apt-get install libpam-google-authenticator

2. 初始化(centosubuntu相同)

第一种方式 (本次使用第一种方式)使用下面命令运行Google Authenticator 设置程序

参数

  • -t : 使用 TOTP 验证
  • -f : 将配置保存到 ~/.google_authenticator
  • -d : 不允许重复使用以前使用的令牌
  • -w 3 : 允许的令牌的窗口大小。 默认情况下,令牌每 30 秒过期一次。 窗口大小 3 允许在当前令牌之前和之后使用令牌进行身份验证以进行时钟偏移。
  • -e 10 : 生成 10 个紧急备用代码
  • -r 3 -R 30 : 限速,每 30 秒允许 3 次登录 更多帮助信息可以使用 --help 选项查看。
程序运行后,将会更新配置文件,并且显示下面信息
  1. 二维码,您可以使用大多数身份验证器应用程序扫描此代码。
  2. 一个秘密的钥匙,如果您无法扫描二维码,请在您的应用中输入此密钥。
  3. 初始验证码,该验证码将在30秒后失效。
  4. 10 个一次性使用紧急代码的列表。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 设置Google Authenticator
google-authenticator -t -f -d -w 3 -e 10 -r 3 -R 30
# 此种方式回显
# google-authenticator -t -f -d -w 3 -e 10 -r 3 -R 30
Warning: pasting the following URL into your browser exposes the OTP secret to Google:
https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/root@gegewu%3Fsecret%3DV5C2YRWMGIRJQZ4SPNSB4JW3UI%26issuer%3Dgegewu
"二维码 略"
Your new secret key is: V5C2YRWMGIRJQZ4SPNSB4JW3UI
# 第一次登陆使用
Your verification code is 653881
Your emergency scratch codes are:
# 10 个一次性使用紧急代码的列表(只能使用一次 所以可以多指定几个)
41815252
34749580
90273121
87401877
60093622
82350870
51486189
61001326
75095961
23122238
第二种方式(可选)
1
2
3
4
5
6
7
8
9
10
11
12
# 安装完成之后进行初始化配置
google-authenticator
----------------------------
Do you want authentication tokens to be time-based (y/n) y

上述共需回答5个y  
第1个:问你是否想做一个基于时间的令牌  y
(需要记录二维码,或者URL,或者口令,如下图口令为PU7TEDORGV7BD3J4JW6CGO55UY)
第2个:是否更新你的google认证文件,由于第一次设置,所以一定选 y  
第3个:是否禁止口令多用,这里选择y,禁止它,以防止中间人欺骗。y  
第4个:默认情况,1个口令的有效期是30s,这里是为了防止主机时间和口令客户端时间不一致,设置的误差,可以选择y,也可选n,看要求严谨程度   y
第5个:是否打开尝试次数限制,默认情况,30s内不得超过3次登录测试,防止别人暴力破解。y5、给ssh启用google验证

3.配置ssh及重启ssh服务

配置
1
2
3
4
# 配置sshd
echo "auth required pam_google_authenticator.so" >> /etc/pam.d/sshd
# 修改ssh的配置文件/etc/ssh/sshd_config,将下列参数调整为yes
ChallengeResponseAuthentication yes

image-20231127143434244


image-20231127143605703

重启
1
2
# 重启ssh服务
systemctl restart sshd

二. 验证

手机安装google authenticator
手机扫描上方二维码进行添加验证码
另一终端进行远程该主机(我使用的是本机Windows11)

image-20231127142458881

三. 扩展

恢复策略一 (未测试)

从二次验证锁定中恢复 二(未测试)

1、紧急备份

如果您无法访问身份验证器应用程序,请使用您的紧急备用代码之一。 该代码仅供一次性使用。

2、禁用特定用户的二步验证

修改 /etc/ssh/sshd_config 文件,找到下面的选项:

1
AuthenticationMethods publickey,keyboard-interactive

移除 keyboard-interactive

1
AuthenticationMethods publickey

之后保存文件,并且重启 SSH:

1
sudo systemctl restart ssh

fighting!