随着时代的发展,传统的用户名和密码验证已被证明不能为应用程序和系统提供强大的安全性。简单的用户名和密码可以被多种黑客工具轻松破解,从而使系统容易受到破坏。因此,任何认真对待安全性的公司或实体都需要实施2-Factor authentication,字面意思双因素认证,也称为双重认证。

通常称为 MFA (Multi-Factor Authentication)(多因素身份验证),双因素身份验证提供了额外的安全层,要求用户在使用通常的用户名和密码进行身份验证之前或之后提供某些细节,如代码或OTP(一次性密码)。

如今,多家公司(例如Google,Facebook,Twitter和AWS)为用户提供了选择设置MFA来进一步保护其帐户的选择。

在本指南中,我们演示了如何在Ubuntu上使用双重身份验证。

第1步:安装Google的PAM软件包

首先,安装Google PAM软件包。 PAM是可插入身份验证模块的缩写,是一种在Linux平台上提供额外身份验证层的机制。

该软件包托管在Ubuntu存储库中,因此请继续并使用apt命令按如下所示安装它:

linuxmi@linuxmi:~/www.linuxmi.com$ sudo apt install libpam-google-authenticator

出现提示时,按“ Y”,然后按Enter以继续安装。

第2步:在智能手机上安装Google 身份验证器

此外,您需要在平板电脑或智能手机上安装Google 身份验证器。 该应用将为您提供6位数的OTP代码,该代码每30秒自动更新一次。

第3步:在Ubuntu中配置Google PAM

安装设置好Google 身份验证器后,我们将通过修改/etc/pam.d/common-auth文件,在Ubuntu上继续进行配置,并配置Google PAM软件包,如下所示。

linuxmi@linuxmi:~/www.linuxmi.com$ sudo vim /etc/pam.d/common-auth

将下面这行代码追加到文件中。

auth required pam_google_authenticator.so

保存文件并退出。

现在,运行以下命令初始化PAM。

linuxmi@linuxmi:~/www.linuxmi.com$ google-authenticator

然后会在您的终端屏幕上出现几个问题。 首先,将询问您是否要使身份验证令牌基于时间(Time-based)。

基于时间的身份验证令牌会在特定时间后过期。 默认情况下,这是在30秒之后,之后会生成一组新的令牌。 这些令牌被认为比非基于时间的令牌更安全,因此,将键入“ y”表示“Yes”,然后按Enter。

接下来,二维码将显示在终端上,如下图所示,并在其右下方,将显示一些信息。 显示的信息包括:

  • Secret key  密钥
  • Verification code  验证码
  • Emergency scratch codes  应急备用验证码,手机不在身边可以使用,不过一个码只能用一次

您需要将此信息保存到Vault中,以备将来参考。 如果您丢失了身份验证器设备,则应急备用验证码非常有用。 如果您的身份验证设备发生意外事情,请使用代码。

在您的智能设备上启动Google 身份验证器,然后选择“扫描二维码”以扫描显示的二维码。

注意:您需要最大化终端窗口才能扫描整个二维码。 扫描二维码后,每30秒更改一次的六位OTP将显示在应用程序上。

之后,选择“ y”以更新您的主文件夹中的Google身份验证器文件。

在下一个提示中,将登录限制为每30秒仅登录一次,以防止可能由于中间人攻击而引起的攻击。 因此选择“ y”

在下一个提示中,选择“ n”以禁止延长持续时间,该持续时间解决了服务器和客户端之间的时间偏差。 除非您遇到时间同步差的挑战,否则这是更安全的选择。

最后,仅对3次登录尝试启用速率限制。

如图:

至此,我们已经完成了双因素身份验证功能的实现。 实际上,如果您运行任何sudo命令,系统将提示您输入验证码,您可以从Google 身份验证器应用中获取该验证码。

您可以通过重新启动来进一步验证这一点,一旦进入登录屏幕,系统将要求您提供验证码。

在你从Google身份证验证器提供了你的代码后,还需要提供你的密码才可以访问你的系统。

第4步:将SSH与Google身份验证器集成

如果您打算将SSH与谷歌PAM模块一起使用,则需要将两者集成起来。有两种方法可以实现这一点。

SSH密码认证

如果需要对普通用户进行SSH密码认证,首先需要打开SSH默认配置文件。

linuxmi@linuxmi:~/www.linuxmi.com$ sudo vim /etc/ssh/sshd_config

并将以下属性设置为“yes”,如下所示

对于root用户,将“PermitRootLogin”属性设置为“yes”。

PermitRootLogin yes

保存文件并退出。

接下来,修改SSH的PAM规则

linuxmi@linuxmi:~/www.linuxmi.com$ sudo vim /etc/pam.d/sshd

然后追加以下行

auth required pam_google_authenticator.so

最后,重新启动SSH服务以使更改生效。

linuxmi@linuxmi:~/www.linuxmi.com$ sudo systemctl restart ssh

在下面的示例中,我们从Putty客户端登录到Ubuntu系统。

对于SSH公钥身份验证

如果您使用的是公钥身份验证,请重复上述步骤并添加/etc/ssh/sshd_config文件底部显示的行。

AuthenticationMethods publickey,keyboard-interactive

再次编辑SSH守护程序的PAM规则。

linuxmi@linuxmi:~/www.linuxmi.com$ sudo vim /etc/pam.d/sshd

然后添加以下行。

auth required pam_google_authenticator.so

保存文件并重新启动SSH服务,如我们先前所见的图例。

linuxmi@linuxmi:~/www.linuxmi.com$ sudo systemctl restart ssh

OK,本文到此结束,只做测试研究之用,如有问题不要找我哦。

发表评论