如何在带有 Google 身份验证器的 Linux 上使用 Sudo 和 SSH 的双因素身份验证

一、介绍

双因素身份验证(2FA)通过两个不同的因素确认用户的身份:他们知道的东西和他们拥有的东西。2FA 也称为多因素身份验证、两步验证和两步身份验证。本指南介绍了如何使用 Google Authenticator PAM 模块进行 SSH 和 sudo 身份验证。

二、准备工作

在继续阅读本指南之前,您需要一个已部署的 Linux 云服务器。我们建议采用以下最佳做法:

  • 创建须藤用户
  • 更新服务器
  • 配置防火墙
  • 配置 SSH 以允许使用 SSH 密钥进行访问。

您还需要一个双因素身份验证器应用程序。流行的选择是Google Authenticator,Microsoft Authenticator,Authy和FreeOTP。

三、 安装谷歌身份验证器 PAM 模块

以具有 sudo 访问权限的非 root 用户身份登录到您的 Linux 服务器。按照适用于您的 Linux 发行版的说明安装 Google Authenticator PAM 模块。

3.1、Ubuntu、Debian 和其他基于 apt 的发行版

使用 apt 安装。

$ sudo apt-get install libpam-google-authenticator

 3.2、Fedora

使用 yum 安装。

$ sudo yum install google-authenticator

 3.3、CentOS、Rocky Linux、Alma Linux、VzLinux 和其他 RHEL 克隆

安装 EPEL 存储库。

$ sudo yum install epel-release

使用 yum 安装。

$ sudo yum install google-authenticator

四、 生成您的 2FA 代码

注意:连接到服务器的每个用户都将执行这些步骤。

运行谷歌身份验证器安装程序。您可以在没有命令行选项的情况下运行该程序以进行交互式设置,也可以使用以下选项:

    $ 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 个一次性紧急代码的列表。

重要提示:按照 2FA 应用程序中的说明使用 QR 码或密钥创建新条目。将您的紧急代码存储在安全的位置。如果需要重置代码,请重新运行程序。

五、 配置 SSH

这些步骤禁用密码身份验证。登录需要公钥/私钥,并且将启用 2FA。

  1. 编辑您的 SSH PAM 配置文件。
    $ sudo nano /etc/pam.d/sshd
    
  2. 将以下行添加到文件底部。该选项允许尚未生成 2FA 代码的用户登录,而如果用户已按照上述步骤 2 操作,则需要代码。此选项在推出期间很有用。所有用户生成代码后,您可以删除要求每个人使用 2FA 的选项。nulloknullok
    auth required pam_google_authenticator.so nullok
    
  3. 禁用用户密码身份验证。通过添加到开头来注释掉以下行。#
    # @include common-auth
    
  4. 保存并关闭文件。
  5. 编辑 SSH 守护程序配置文件。
    $ sudo nano /etc/ssh/sshd_config
    
  6. 查找 for 的行并将其值设置为 yes。ChallengeResponseAuthentication
    ChallengeResponseAuthentication yes
    
  7. 验证是否按所示设置了以下选项,或者如果它们不存在,请添加它们。
    PasswordAuthentication no
    PubkeyAuthentication yes
    KbdInteractiveAuthentication yes
    AuthenticationMethods publickey,keyboard-interactive
    
  8. 保存并关闭文件。
  9. 重新启动 SSH 服务守护程序。
    $ sudo systemctl restart ssh
    
  10. 注销服务器。
  11. 使用 SSH 密钥登录到服务器。服务器将请求验证码。输入身份验证器应用生成的代码。

    恢复提示:如果 SSH 配置中出现错误并且您无法登录,请使用Vultr Web 控制台。

六、配置 2FA

按照以下步骤配置为需要 2FA 代码。sudo

  1. 编辑。/etc/pam.d/common-auth
    $ sudo nano /etc/pam.d/common-auth
    
  2. 将这些行添加到文件底部。该选项允许尚未生成 2FA 代码的用户使用 sudo,而如果用户已按照上述步骤 2 操作,则需要代码。此选项在推出期间很有用。所有用户生成代码后,您可以删除要求每个人使用 2FA 的选项。有关详细信息,请参阅此说明。nulloknullok
    auth required pam_google_authenticator.so nullok
    auth required pam_permit.so
    
  3. 保存并退出文件。

2FA 选项立即生效。如果用户在上面的步骤 中配置了 2FA,则除了用户密码外,还需要 2FA 代码。所有用户配置 2FA 后,您可以删除该选项。sudonullok

注意:在 sudoers 文件中设置了 NOPASSWD 的用户将不会收到 2FA 质询。

七、从 2FA 锁定中恢复

7.1、紧急备份

如果您无法访问身份验证器应用,请使用其中一个紧急备用代码。这些代码仅供一次性使用。

7.2、SSH 锁定

如果您被 SSH 锁定,则可以使用Vultr Web 控制台。本指南中的配置不需要 2FA 即可访问控制台。

7.3、为特定用户禁用 2FA

要为特定用户禁用 2FA:

  1. 以根用户身份登录。
  2. 删除用户主目录中的文件。.google_authenticator
    $ sudo rm /home/user/.google_authenticator
    

7.4、为所有用户禁用 2FA

要为所有用户禁用 2FA:

  1. 编辑。/etc/ssh/sshd_config
  2. 找到以下行:
    AuthenticationMethods publickey,keyboard-interactive
    
  3. 删除方法:keyboard-interactive
    AuthenticationMethods publickey
    
  4. 保存并关闭文件,然后重新启动 SSH 守护程序:
    $ sudo systemctl restart ssh
赞(0)
未经允许不得转载:主机百科 » 如何在带有 Google 身份验证器的 Linux 上使用 Sudo 和 SSH 的双因素身份验证