标签 双因子 下的文章

每天似乎都有一个安全漏洞的新闻报道,说我们的数据会因此而存在风险。尽管 SSH 是一种远程连接系统的安全方式,但你仍然可以使它更安全。本文将向你展示如何做到这一点。

此时 双因子验证 two-factor authentication (2FA)就有用武之地了。即使你禁用密码并只允许使用公钥和私钥进行 SSH 连接,但如果未经授权的用户偷窃了你的密钥,他仍然可以借此访问系统。

使用双因子验证,你不能仅仅使用 SSH 密钥连接到服务器,你还需要提供手机上的验证器应用程序随机生成的数字。

本文展示的方法是 基于时间的一次性密码 Time-based One-time Password (TOTP)算法。Google Authenticator 用作服务器应用程序。默认情况下,Google Authenticator 在 Fedora 中是可用的。

至于手机,你可以使用与 TOTP 兼容的任何可以双路验证的应用程序。Andorid 或 iOS 有许多可以与 TOTP 和 Google Authenticator 配合使用的免费应用程序。本文与 FreeOTP 为例。

安装并设置 Google Authenticator

首先,在你的服务器上安装 Google Authenticator。 $ sudo dnf install -y google-authenticator

运行应用程序:

$ google-authenticator

该应用程序提供了一系列问题。下面的片段展示了如何进行合理的安全设置:

Do you want authentication tokens to be time-based (y/n) y
Do you want me to update your "/home/user/.google_authenticator" file (y/n)? y

这个应用程序为你提供一个密钥、验证码和恢复码。把它们放在安全的地方。如果你丢失了手机,恢复码是访问服务器的唯一方式。

设置手机验证

在你的手机上安装验证器应用程序(FreeOTP)。如果你有一台安卓手机,那么你可以在 Google Play 中找到它,也可以在苹果 iPhone 的 iTunes 商店中找到它。

Google Authenticator 会在屏幕上显示一个二维码。打开手机上的 FreeOTP 应用程序,选择添加新账户,在应用程序顶部选择二维码形状工具,然后扫描二维码即可。设置完成后,在每次远程连接服务器时,你必须提供验证器应用程序生成的随机数。

完成配置

应用程序会向你询问更多的问题。下面示例展示了如何设置合理的安全配置。

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
By default, tokens are good for 30 seconds. 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. If you experience problems with poor time synchronization, you can increase the window from its default size of +-1min (window size of 3) to about +-4min (window size of 17 acceptable tokens).
Do you want to do so? (y/n) n
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 连接,因为我们将禁用密码连接。如果出现问题或错误,一个已经建立的连接将允许你修复问题。

在你的服务器上,使用 sudo 编辑 /etc/pam.d/sshd 文件。

$ sudo vi /etc/pam.d/ssh

注释掉 auth substack password-auth 这一行:

#auth       substack     password-auth

将以下行添加到文件底部:

auth sufficient pam_google_authenticator.so

保存并关闭文件。然后编辑 /etc/ssh/sshd_config 文件:

$ sudo vi /etc/ssh/sshd_config

找到 ChallengeResponseAuthentication 这一行并将其更改为 yes

ChallengeResponseAuthentication yes

找到 PasswordAuthentication 这一行并将其更改为 no

PasswordAuthentication no

将以下行添加到文件底部:

AuthenticationMethods publickey,password publickey,keyboard-interactive

保存并关闭文件,然后重新启动 SSH:

$ sudo systemctl restart sshd

测试双因子验证

当你尝试连接到服务器时,系统会提示你输入验证码:

[user@client ~]$ ssh [email protected]
Verification code:

验证码由你手机上的验证器应用程序随机生成。由于这个数字每隔几秒就会发生变化,因此你需要在它变化之前输入它。

如果你不输入验证码,你将无法访问系统,你会收到一个权限被拒绝的错误:

[user@client ~]$ ssh [email protected]
Verification code:
Verification code:
Verification code:
Permission denied (keyboard-interactive).
[user@client ~]$

结论

通过添加这种简单的双路验证,现在未经授权的用户访问你的服务器将变得更加困难。


via: https://fedoramagazine.org/two-factor-authentication-ssh-fedora/

作者:Curt Warfield 选题:lujun9972 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

美国 国家标准和技术协会 National Institute of Standards and Technology (NIST)发布了《 数字身份验证指南 Digital Authentication Guideline (DAG)》的最新草案,其中暗示将来会禁用基于短信的 双因子认证方案 Two-Factor Authentication (2FA)。

数字身份验证指南 Digital Authentication Guideline (DAG)》是一系列用于软件商构建安全服务的规则,也被政府和私人机构用于评估其服务和软件的安全性。

NIST 的专家们一直不断地更新该指南,以便应对 IT 领域的快速变化。

基于短信的双因子认证仍然可以用,但是不会太久了

最新的《数字身份验证指南》草案,NIST 正式地不建议公司继续使用基于短信的认证,甚至说将来考虑在该指南中将基于短信的双因子认证视作不安全的。NIST 在该草案中说:

“如果使用基于公共移动电话网络的短信作为带外验证,验证者必须验证其预注册的手机号码是基于移动网络的,而非 VoIP(或者其它基于软件的),然后才能发送短信到预注册手机号码。修改预注册手机号码时如果没有双因子验证是不能进行的。不推荐使用短信进行带外验证,本指南的将来版本中将不再允许这种方式。”

NIST 的指南当中认为基于短信的双因子认证是不安全的,因为用户不会总是带着电话。

在该指南中,推荐软件应用应该使用令牌和软件加密验证器,这可能是手机应用或硬件设备的形式,但是就像手机一样,也可能被偷走或“临时借走”。但该指南认为这种风险是可接受的,而不像令牌或软件加密验证器那样,短信在 VoIP 服务之下是一个影响到了联合信任因子的缺陷。

短信是不安全的,特别是在 VoIP 连接下

因为一些 VoIP 服务允许劫持短信,所以 NIST 建议厂商在基于短信的双因子系统在发送短信验证码之前,对使用 VoIP 连接的访问进行特别检查。

短信是一个广泛使用的不安全协议,仅在上周,Context Information Security 的安全研究人员就披露了又一起依赖于短信协议而危及到了其用户和设备的攻击。随着对这种攻击类型的越来越多的研究,软件厂商、公司以及用户会逐渐认识到应该换到更安全的验证方式上。

当前的 NIST 指南仍在讨论之中,但是基本上可以确定,该指南的将来版本不会再将使用基于短信的认证方式推荐为带外验证的安全方式。

生物识别技术是一个新兴发展方向

在该指南草案中,也提到了生物特征识别技术在特定条件下是可以作为一个验证方式的:

“因此,对生物识别技术的验证是支持的,只需要遵循如下准则:生物识别技术应该与其他(你知道的或你拥有的)认证因子配合使用。”

安全就是一切。我们生活的当今世界,数据具有令人难以置信的价值,而你也一直处于数据丢失的风险之中。因此,你必须想尽办法保证你桌面系统和服务器中数据的安全。结果,管理员和用户就会创建极其复杂的密码、使用密码管理器甚至其它更复杂的东西。但是,如果我告诉你你可以只需要一步,至多两步就能登录到你的 Linux 服务器或桌面系统中呢?多亏了 Google 身份验证器,现在你可以做到了。并且,配置也极其简单。

我会给你简要介绍为登录和 sudo 设置双因子认证的步骤。我基于 Ubuntu 16.04 桌面系统进行介绍,但这些步骤也适用于其它服务器。为了实现双因子认证,我会使用 Google 身份验证器。

这里有个非常重要的警告:一旦你设置了认证,没有一个从认证器中获得的由 6 个数字组成的验证码你就不可能登录账户(或者执行 sudo 命令)。这也给你增加了一步额外的操作,因此如果你不想每次登录到 Linux 服务器(或者使用 sudo)的时候都要拿出你的智能手机,这个方案就不适合你。但你也要记住,这额外的一个步骤也给你带来一层其它方法无法给予的保护。

话不多说,开始吧。

安装必要的组件

安装 Google 身份验证器 Google Authenticator ,首先要解决两个问题。一是安装智能机应用。下面是如何从 Google 应用商店安装的方法:

  1. 在你的安卓设备中打开 Google 应用商店
  2. 搜索 google 身份验证器 Google Authenticator
  3. 找到并点击有 Google Inc. 标识的应用
  4. 点击安装
  5. 点击“接受”
  6. 等待安装完成

接下来,我们继续在你的 Linux 机器上安装这个认证器。步骤如下:

  1. 打开一个终端窗口
  2. 输入命令 sudo apt-get install google-authenticator
  3. 输入你的 sudo 密码并敲击回车
  4. 如果有弹窗提示,输入 y 并敲击回车
  5. 等待安装完成

接下来配置使用 google-authenticator 进行登录。

配置

要为登录和 sudo 添加双因子认证只需要编辑一个文件,即 /etc/pam.d/common-auth。打开并找到如下一行:

auth    [success=1 default=ignore]      pam_unix.so nullok_secure

在这行上面添加:

auth required pam_google_authenticator.so

保存并关闭文件。

下一步就是为系统中的每个用户设置 google-authenticator(否则他们就不能登录了)。为了简单起见,我们假设你的系统中有两个用户:jack 和 olivia。首先为 jack 设置(我们假设这是我们一直使用的账户)。

打开一个终端窗口并输入命令 google-authenticator。之后会问你一系列的问题(每个问题你都应该用 y 回答)。问题包括:

  • 是否允许更新你的 "/home/jlwallen/.google\_authenticator" 文件 (y/n) y
  • 是否禁止多个用户使用同一个认证令牌?这会限制你每 30 秒内只能登录一次,但能增加你注意到甚至防止中间人攻击的可能 (y/n)
  • 默认情况下令牌时长为 30 秒即可,为了补偿客户端和服务器之间可能出现的时间偏差,我们允许使用当前时间之前或之后的其它令牌。如果你无法进行时间同步,你可以把这个时间窗口由默认的 1:30 分钟增加到 4 分钟。是否希望如此 (y/n)
  • 如果你尝试登录的计算机没有针对暴力破解进行加固,你可以为验证模块启用速率限制。默认情况下,限制攻击者每 30 秒不能尝试登陆超过 3 次。是否启用速率限制 (y/n)

一旦完成了问题回答,你就会看到你的密钥、验证码以及 5 个 紧急刮码 emergency scratch code 。把这些刮码打印出来并保存。你可以在无法使用手机的时候使用它们(每个刮码仅限使用一次)。密钥用于你在 Google 身份验证器上设置账户,验证码是你能当下就能够立即使用(如果需要)的一次性验证码。

设置应用

现在你已经配置好了用户 jack。在设置用户 olivia 之前,你需要在 Google 身份验证器应用上为 jack 添加账户(LCTT 译注:实际操作情形中,是为 jack 的手机上安装的该应用创建一个账户)。在打开应用,点击“菜单”按钮(右上角三个竖排点)。点击“添加账户”然后点击“输入提供的密钥”。在下一个窗口(图1),你需要输入你运行 google-authenticator 应用时提供的 16 个数字的密钥。给账户取个名字(以便你记住这用于哪个账户),然后点击“添加”。

图1: 在 Google Authenticator 应用上新建账户

(LCTT 译注:Google 身份验证器也可以扫描你在服务器上设置时显示的二维码,而不用手工输入密钥)

添加完账户之后,你就会看到一个 6 个数字的密码,你每次登录或者使用 sudo 的时候都会需要这个密码。

最后,在系统上设置其它账户。正如之前提到的,我们会设置一个叫 olivia 的账户。步骤如下:

  1. 打开一个终端窗口
  2. 输入命令 sudo su olivia
  3. 在智能机上打开 Google 身份验证器
  4. 在终端窗口(图2)中输入(应用提供的) 6 位数字验证码并敲击回车
  5. 输入你的 sudo 密码并敲击回车
  6. 以新用户输入命令 google-authenticator,回答问题并记录生成的密钥和验证码。

成功为 olivia 用户设置好之后,用 google-authenticator 命令,在 Google 身份验证器应用上根据用户信息(和之前为第一个用户添加账户相同)添加一个新的账户。现在你在 Google 身份验证器应用上就会有 jack 和 olivia 两个账户了。(LCTT 译注:在实际操作情形中,通常是为 jack 和 olivia 两个人的手机分别设置。)

图2: 为 sudo 输入 6位数字验证码

好了,就是这些。每次你尝试登录系统(或者使用 sudo) 的时候,在你输入用户密码之前,都会要求你输入提供的 6 位数字验证码。现在你的 Linux 机器就比添加双因子认证之前安全多了。虽然有些人会认为这非常麻烦,我仍然推荐使用,尤其是那些保存了敏感数据的机器。


via: https://www.linux.com/learn/how-set-2-factor-authentication-login-and-sudo

作者:JACK WALLEN 译者:ictlyh 校对:wxy