我想通过添加另一个因素来加强 SSH 登录的身份验证:密码生成器设备或手机上的密码生成应用程序。默认设置中唯一明显的选项是固定密码和密钥对。我该怎么做?
(如果我使用密码加上密码生成器,这提供了双因素身份验证(2FA):密码是“我知道的”,密码是“我拥有的”。)
答案1
一种方法是使用 Google 提供的工具Google 身份验证器。
-
- 要不就
sudo apt-get install libpam-google-authenticator
- 要不就
编辑
/etc/pam.d/sshd
以包含模块:sudoedit /etc/pam.d/sshd
然后在文件顶部并保存:
auth required pam_google_authenticator.so
编辑你的 SSH 配置文件来开启挑战:
sudoedit /etc/ssh/sshd_config
然后将响应身份验证从:ChallengeResponseAuthentication no
到
ChallengeResponseAuthentication yes
然后保存文件。
sudo restart ssh
重新启动 SSH跑步
google-authenticator
- 这会为您提供密钥、验证码和紧急刮擦代码。它还会询问您一些速率限制问题。
移动应用程序:
您需要其中一个才能在另一台设备上接收身份验证码。
相关且有用的:
- 本答案大部分来自这篇博文由 Jean-Francois Theroux 编写,但已更新。
- Google 身份验证器维基
- http://guides.webbynode.com/articles/security/ubuntu-google-authenticator.html
- http://www.mnxsolutions.com/security/two-factor-ssh-with-google-authenticator.html
- 据我了解,如果您通过 SSH 密钥使用无密码登录,则只能执行其中一个,请参阅以下问题:如何设置无密码 SSH 登录?
- 如果你正在使用 Puppet,这里有一个 puppet 模块:https://github.com/camptocamp/puppet-googleauthenticator
- 请参阅 Maarten 的回答并链接到 github 问题,了解为什么需要在 pam 配置顶部添加 .so 行:https://askubuntu.com/a/668398
请注意,将密码与一次性密码组合在一起是双因素身份验证:它将“您知道的”(密码)与“您拥有的”(密码生成器设备)组合在一起。另一方面,如果您将一次性密码与 SSH 密钥对组合在一起,那么一切都取决于“您拥有的”。当两个身份验证因素属于同一类型时,您就不是双因素身份验证;有时这被称为“单因素半身份验证”。
答案2
Google Authenticator 非常适合您的个人服务器,但您可能会发现它与您现有的身份基础架构不太匹配。如果您想探索其他选项,请考虑使用 RADIUS 作为身份验证协议和 pam-radius 插件。所有面向企业的双因素身份验证系统都支持 radius。我们编写了一份关于如何添加的文档通过 pam-radius 对 Ubuntu 进行 WiKID 双因素身份验证。
使用 radius 可以将 SSH 以外的其他系统绑定到同一个身份验证服务器。您还可以通过 freeradius 将身份验证请求路由到 LDAP,然后再路由到您的 2FA 服务器,以将授权与身份验证分开。顺便说一句,您可以对 AD 执行相同操作。
答案3
我敦促大家把下面这句话放在顶部,而不是底部如上所述/etc/pam.d/sshd
(现已更正):
auth required pam_google_authenticator.so
否则你的系统将保持容易受到暴力攻击您的密码,从而泄露双重身份验证的第一部分:您的密码。
系统将首先要求您输入验证码,然后输入密码(无论代码是否正确)。如果其中一个错误,则需要重新输入两个密码。您可以反过来配置,但在当前默认的 ubuntu (15.04) sshd 配置中,这种更改更难描述。
有关为什么需要它的详细信息,请查看此问题: