Linux系统安全双重保险,详细步骤在SSH中开启双因素认证

在本指南中,详细记录了如何在SSH连接中添加双因素验证。

Adding-2FA-to-SSH-Thumbnail.jpg

双因素认证可以为SSH连接增加双重保险。通过在你的SSH连接中添加两个2FA,用户需要输入一个生成的一次性密码才能进行。如果有人碰巧计算出你的密码或窃取你的SSH密钥,他们还需要有双因素验证码才能访问系统。

为了添加2FA支持,要使用一个实现Google Authenticator协议的包,使其可以作为SSH认证栈的一部分。我正在使用的软件包可以在许多操作系统上使用,从基于Debian的系统如Ubuntu到CentOS或Fedora。使用2FA是帮助保护您的物联网设备(如树莓派)安全也是绝佳的。

安装谷歌双因素认证器SSH模块

在本节中,展示如何安装实现谷歌双因素协议的可插拔验证模块(PAM)。使用这个模块,用户必须输入一个2FA令牌才能登录。当用户的密码或SSH密钥被盗时,这额外的保护可以帮助提高安全性。这个模块将工作在任何利用SSH的Linux操作系统上。虽然我只在运行Raspbian操作系统的Raspberry Pi上测试了本教程,但它应该可以在任何操作系统上工作。

基于apt的系统 (Debian, Ubuntu, Raspbian)

本节将指导您在使用apt软件包管理器的操作系统上安装2FA模块的过程。基于Debian的操作系统,如Ubuntu或Raspbian使用这个软件包管理器。

1. 要安装SSH所需的双因素认证模块,需要更新包列表。

更新软件包列表将确保我们不会尝试从一个不存在的镜像下载软件包。

sudo apt update

2. 当软件包列表完成更新后,使用下面的命令安装需要的2FA模块。

Google身份验证器PAM可以通过Debian和Ubuntu的官方资源库获得。

sudo apt install libpam-google-authenticator

一旦模块安装完成,就可以进入下一章节了。

基于yum的系统(CentOS, RHEL)

在本节中,展示如何在使用yum包管理器的系统上安装SSH双因素认证模块。

1. 在安装2FA可插拔认证模块(PAM)之前,需要添加Extra Packages for Enterprise Linux(EPEL)仓库。

这个资源库包含了一系列不同的包,包括google-authenticator。确保你使用的CentOS或RHEL版本的命令是正确的。

CentOS/RHEL 6

sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm

CentOS/RHEL 7

sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

CentOS/RHEL 8

sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

2. 现在已经添加了存储库,可以继续需要的SSH 2FA模块了。

在设备上运行以下命令来安装Google Authenticator PAM模块。

sudo yum install google-authenticator

安装好软件包后,就可以进入下一环节。

基于dnf的系统(Fedora)

本节,学习如何使用dnf包管理器安装所需的双因素认证SSH模块。Fedora 是使用这个软件包管理器的主要操作系统。

1. 要安装Google Authenticator包,只需要运行以下命令即可。

Google Authenticator软件包已经可以通过Fedora软件包仓库获得。

sudo dnf install -y google-authenticator

当dnf完成安装包后,我们就可以继续设置双因素认证了。

设置双因素认证SSH模块

现在已经安装了SSH所需的2FA模块,可以对它进行配置了。在这些步骤中,将生成您将输入2FA应用程序的代码。

1. 要开始设置过程,需要在系统上运行以下命令。

该命令将开始为当前用户创建认证令牌。

google-authenticator

2. 第一个问题会问你是否要使用基于时间的认证令牌。

由于大多数2FA应用都希望Token是定时的,对这个问题的回答是y。

Do you want authentication tokens to be time-based (y/n) y

3. 现在,将看到一个二维码和其他信息位。

你可以使用手机上的2-Factor应用扫描这个二维码。如果你目前没有使用应用程序,Authy、Duo Security或Google Authenticator。

SSH-Google-2FA-Setup-Code-Generation.png

你还应该对应急二维码码进行安全备份。这是在您因某种原因失去双因素身份验证器访问权限时再次获得账户访问权限的唯一方法。请注意,这些代码只能使用一次。

4. 下一个问题,会被问到是否要更新当前用户的身份验证器配置文件。

这个文件将以”.google_authenticator “为名保存在你的用户主目录中。

输入y,按ENTER键继续。

Do you want me to update your "/home/pi/.google_authenticator" file? (y/n) y

5. 接下来,被问及是否要禁止多次使用同一令牌。

这意味着,两个人不能使用同一个令牌登录到同一个账户。你需要再等30秒才能获得新的双因素令牌来登录。

我建议启用该选项,因为它将显著提高账户在面对中间人攻击时的保护。

输入y,按ENTER键继续。

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y

6. 下一个选项是你是否要增加生成的代码被认为有效的时间。

默认情况下,它的设置是允许在当前时间的两侧增加30秒。这意味着前一个代码将在接下来的30秒内继续运行。可以增加这个时间,这样就会有4分钟的时间偏移,这就大大增加了在任何时候被认为有效的代码数量。除非您在电脑上有同步时间的问题,否则我们建议您不要回答 “是”。要不改变默认的时间偏移,请输入n,然后按ENTER键继续。

By default, a new token is generated every 30 seconds by the mobile app.
In order to compensate for possible time-skew between the client and the server,
we allow an extra token before and after the current time. This allows for a
time skew of up to 30 seconds between authentication server and client. If you
experience problems with poor time synchronization, you can increase the window
from its default size of 3 permitted codes (one previous code, the current
code, the next code) to 17 permitted codes (the 8 previous codes, the current
code, and the 8 next codes). This will permit for a time skew of up to 4 minutes
between client and server.
Do you want to do so? (y/n) n

7. 最后,最后一个问题会问你是否要启用双因素认证SSH模块中内置的限速功能。

启用限速功能后,用户每30秒不能进行超过3次的登录尝试。为了帮助提高设备的安全性,请输入y然后按ENTER键启用该功能。

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting? (y/n) y

现在可以继续让SSH利用刚刚完成设置的双因素认证模块。

使SSH使用双因素认证模块

在本节中,展示如何告诉SSH使用在上一节中设置的双因素认证。一旦启用了这个功能,就需要使用现在生成的一次性密码。请注意,当配置SSH守护进程时,不应该关闭这个SSH会话。

1. 第一个工作是修改sshd配置文件。

可以通过运行以下命令开始修改这个文件。

sudo nano /etc/pam.d/sshd

2. 在文件底部增加以下一行:

这一行告诉守护进程,它需要Google Authenticator PAM。

auth required pam_google_authenticator.so

一旦做了这个改变,按CTRL + X,然后按Y,再按ENTER键保存文件。

3. 现在需要启用SSH协议的挑战-响应系统。

启用该系统将允许SSH提示你的双因素验证码。通过运行以下命令开始修改存储此设置的配置文件。

sudo nano /etc/ssh/sshd_config

4. 在该文件中,找到并替换以下一行:

寻找

ChallengeResponseAuthentication no

替换为

ChallengeResponseAuthentication yes

完成后,按CTRL + X,然后按Y,再按ENTER键保存文件。

5. 为了使改变生效,需要重新启动SSH服务。

可以通过运行以下命令来实现。

sudo systemctl restart sshd

现在,每当尝试登录时,应该被要求输入双因素验证码。

测试双因素认证登录

现在已经设置了SSH来使用双因素认证PAM,可以继续测试以确保一切正常。为了测试SSH 2FA功能,需要建立一个新的SSH连接到我们的设备。当尝试建立连接时,会被要求输入你的双因素验证码来登录。

SSH-Two-Factor-Authentication-Code-Login.png

在设置的任何应用程序中找到此令牌。例如,以下是我们在Authy应用程序中生成2FA代码的截图。

SSH-Token-Generating-in-Authy.png

一个有效的代码应该是六个数字长。

为SSH密钥添加2FA支持

默认情况下,SSH的设置使SSH密钥取代了任何其他形式的认证,包括2FA令牌。如果不使用SSH密钥,可以跳过本节。

1. 为了解决这个问题,需要再次修改SSH守护进程配置,运行以下命令。

sudo nano /etc/pam.d/sshd

2. 在该文件中,需要找到并替换以下一行:

注释这一行,禁用默认的UNIX配置。要阻止提示符询问密码,而不是2FA令牌。

寻找

@include common-auth

替换为

#@include common-auth

按CTRL + X,然后按Y,再按ENTER键保存文件。

3. 接下来,还需要修改另一个SSH配置文件。

在这个文件中,告诉SSH,它需要询问2FA验证码才能进行。

sudo nano /etc/ssh/sshd_config

4. 在该文件的底部,添加以下配置行。

这一行定义了我们需要使用的认证方法。

先指定公钥,告诉SSH,正在期望一个SSH密钥。第二部分说需要等待一个交互式键盘事件。在我的例子中,这个事件是我的2FA令牌。

AuthenticationMethods publickey,keyboard-interactive

一旦你做了这个改变,按CTRL + X,然后按Y,再按ENTER键保存文件。

5. 最后,需要使用以下命令重新启动SSH守护进程。重启SSH将确保它使用我们所有的变化。

在验证一切功能之前,请确保不要断开当前的SSH连接。

sudo systemctl restart sshd

6. 现在,当尝试使用SSH密钥进行连接时,我们也会被要求输入双因素验证码。

SSH-Keys-and-2FA-Tokens.png

到这里,你现在应该为SSH连接设置了双因素验证。通过添加2FA,某人通过SSH访问你的设备将变得更加困难。用户必须同时访问你的密码和2FA秘密才能够破解。

平均: 5 / 5. votes: 1

到目前为止还没有投票!成为第一位评论此文章。

欢迎转载,请留下出处链接:Labno3 » Linux系统安全双重保险,详细步骤在SSH中开启双因素认证

赞 (2)

评论

5+5=