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