如何使用 2 因素身份验证进一步保护我的系统?

16 security two-factor-authentication

标题几乎说明了这一点。我听到了更多关于 2 因素身份验证、一次性密码、硬令牌和其他改进的安全功能的消息。随着仅使用密码的安全性降低,我想知道如何提高我在 Ubuntu 上的安全性。我在 Unity 中使用 14.04 LTS。

小智 30

您可以使用由 Google 创建的开源可插入身份验证模块 (PAM),称为Google Authenticator。该模块在标准存储库和 GitHub 中可用,以便您可以从源代码构建。结合同名的 Android、iOS 或 Blackberry 应用程序,它会创建基于时间的、对时间敏感的代码以及您的密码进行身份验证。因为它是一个 PAM 模块,它几乎可以放在任何地方。让我们开始吧!

安装

首先,您可以使用以下命令安装 PAM:

sudo apt-get install libpam-google-authenticator
Run Code Online (Sandbox Code Playgroud)

简单的!

设置它:

安装后,您还需要为 Android、iOS 或 Blackberry(取决于您的移动平台)安装相应的移动应用程序。没有另一个,每一个都是无用的。拥有移动设备所需的应用程序后,在终端中运行以下命令:

google-authenticator
Run Code Online (Sandbox Code Playgroud)

这将从问您几个问题开始。第一个是您必须回答“是”的唯一问题,它询问您是否希望代码基于时间。之后,阅读每个问题并做出对您最有意义的选择。

完成初始设置后,您将在终端中看到一个非常大的二维码以及一些其他信息。如果您不想使用二维码来配对您的设备,那么“您的新密钥是:”这一行是非常需要的一行,因此在设置完成之前不要关闭此窗口!这为您提供的“刮刮码”也很重要,因为如果您丢失了移动设备,它们将用于登录。将它们写下来并存放在安全的地方。

现在,在您的移动设备上,打开您的 Google 身份验证器应用程序并选择“设置帐户”。您可以扫描生成的二维码,也可以选择“使用提供的密钥”。如果您扫描二维码,所有内容将自动保存在名为“your_user@your_host”的帐户下。但是,如果您选择“使用提供的密钥”,则必须手动输入名称、密钥和令牌类型。该名称可以是您想要的任何名称。密钥将是先前生成的秘密密钥。该类型将是默认的基于时间的。设置完成后,您将在 Google Authenticator 应用程序的主窗格中看到该帐户,以及旁边的圆形计时器。该计时器每 30 秒耗尽一次,并生成一个新代码。

启用它!

魔法来了。由于这是一个 PAM 模块,所以它可以用在各种地方。我将逐步介绍向sudo请求、SSH 登录和 lightdm 登录添加身份验证。但是,阅读本教程后,您将能够基于相同的技术在其他地方启用它。

SSH

我先做这个,因为有一个额外的步骤。您需要做的第一件事是编辑您的 SSH 配置文件:

gksudo gedit /etc/ssh/sshd_config
Run Code Online (Sandbox Code Playgroud)

搜索以下内容的行:

ChallengeResponseAuthentication no
Run Code Online (Sandbox Code Playgroud)

并将“否”更改为“是”。

现在,您需要为 ssh 编辑 PAM 模块:

gksudo gedit /etc/pam.d/sshd
Run Code Online (Sandbox Code Playgroud)

在此文件的最后,添加以下行:

auth required pam_google_authenticator.so nullok
Run Code Online (Sandbox Code Playgroud)

“nullok”参数告诉系统如果用户没有设置两因素身份验证,则不要请求验证码。编辑后,继续并重新启动您的 ssh 服务:

sudo service ssh restart
Run Code Online (Sandbox Code Playgroud)

sudo 要求

编辑 PAM 文件sudo

gksudo gedit /etc/pam.d/sudo
Run Code Online (Sandbox Code Playgroud)

在最后添加以下行:

auth required pam_google_authenticator.so nullok
Run Code Online (Sandbox Code Playgroud)

现在每个sudo请求都会要求提供验证码和密码。

LightDM(图形用户界面登录)

编辑 LightDM 的 PAM 文件:

gksudo gedit /etc/pam.d/lightdm
Run Code Online (Sandbox Code Playgroud)

在最后添加以下行:

auth required pam_google_authenticator.so nullok
Run Code Online (Sandbox Code Playgroud)

就是这样!每次您通过 GUI 登录时,它都会在您输入密码后要求输入验证码。

系统范围和 TTY 登录

即使您启用了上述方法,它仍然不会,如果你切换到一个TTY与要求验证码CTRL+ ALT+ F#。要解决此问题,请编辑common-authPAM 文件:

gksudo gedit /etc/pam.d/common-auth
Run Code Online (Sandbox Code Playgroud)

并将以下行添加到最后:

auth required pam_google_authenticator.so nullok
Run Code Online (Sandbox Code Playgroud)

注意:由于此 common-auth 文件包含在所有其他 auth 类型文件中,因此您需要从其他文件中删除需要 auth 的行。否则,它会要求两次验证码,之后不允许您登录。

包起来

如您所见,添加此身份验证非常容易。如果您使用 LightDM 以外的显示管理器,您可以轻松地相应地更改上面的 lightdm 行。由于您的移动设备和您的系统已经共享了此密钥,因此它们应该始终保持同步。此设置与 Google 服务器或任何其他 Internet 资源没有交互。即使两台设备都完全离线,您的应用程序中显示的验证码也是正确的。每当您需要通过已启用的方法之一登录时,只需确保打开您的移动应用程序并获取当前的验证码。

玩得开心!!