通过询问-响应身份认证提高桌面登录安全

系统
今天,Fedora 提供了多种方式来提高我们账户的身份认证的安全性。当然,它有我们熟悉的用户名密码登录方式,它也同样提供了其他的身份认证选项,比如生物识别、指纹、智能卡、一次性密码,甚至是询问-响应challenge-response身份认证。

https://s4.51cto.com/oss/201812/24/fc7bcfbe38b28b1ae03b1047adebecf6.jpg

介绍

今天,Fedora 提供了多种方式来提高我们账户的身份认证的安全性。当然,它有我们熟悉的用户名密码登录方式,它也同样提供了其他的身份认证选项,比如生物识别、指纹、智能卡、一次性密码,甚至是询问-响应challenge-response身份认证。

每种认证方式都有明确的优缺点。这点本身就可以成为一篇相当冗长的文章的主题。Fedora 杂志之前就已经介绍过了这其中的一些选项:

在现在的 Fedora 版本中,最安全的方法之一就是离线硬件询问-响应。它也同样是最容易部署的方法之一。下面是具体方法。

询问-响应认证

从技术上来讲,当你输入密码的时候,你就正在响应用户名询问。离线的询问、响应包含了这些部分:首先是需要你的用户名,接下来,Fedora 会要你提供一个加密的物理硬件的令牌。令牌会把另一个其存储的加密密钥通过可插入式身份认证Pluggable Authentication Module模块(PAM)框架来响应询问。最后,Fedora 才会提示你输入密码。这可以防止其他人仅仅使用了找到的硬件令牌,或是只使用了账户名密码而没有正确的加密密钥。

这意味着除了你的账户名密码之外,你必须事先在你的操作系统中注册了一个或多个加密硬件令牌。你必须保证你的物理硬件令牌能够匹配你的用户名。

一些询问-响应的方法,比如一次性密码(OTP),在硬件令牌上获取加密的代码密钥,然后将这个密钥通过网络传输到远程身份认证服务器。然后这个服务器会告诉 Fedora 的 PAM 框架,这是否是该用户的一个有效令牌。如果身份认证服务器在本地网络上,这个方法非常好。但它的缺点是如果网络连接断开或是你在没有网的远程端工作。你会被锁在系统之外,直到你能通过网络连接到身份认证服务器。

有时候,生产环境会采用通过 Yubikey 使用一次性密码(OTP)的设置,然而,在家庭或个人的系统上,你可能更喜欢询问-响应设置。一切都是本地的,这种方法不需要通过远程网络调用。下面这些过程适用于 Fedora 27、28 和 29.

准备

硬件令牌密钥

首先,你需要一个安全的硬件令牌密钥。具体来说,这个过程需要一个 Yubikey 4、Yubikey NEO,或者是最近发布的、同样支持 FIDO2 的 Yubikey 5 系列设备。你应该购买它们中的两个,一个做备份,以避免其中一个丢失或遭到损坏。你可以在不同的工作地点使用这些密钥。较为简单的 FIDO 和 FIDO U2F 版本不适用于这个过程,但是非常适合使用 FIDO 的在线服务。

备份、备份,以及备份

接下来,为你所有的重要数据制作备份,你可能想在克隆在 VM 里的 Fedora 27/28/29 里测试配置,来确保你在设置你自己的个人工作环境之前理解这个过程。

升级,然后安装

现在,确定你的 Fedora 是最新的,然后通过 dnf 命令安装所需要的 Fedora Yubikey 包。

  1. $ sudo dnf upgrade
  2. $ sudo dnf install ykclient* ykpers* pam_yubico*

如果你使用的是 VM 环境,例如 Virtual Box,确保 Yubikey 设备已经插进了 USB 口,然后允许 VM 控制的 USB 访问 Yubikey。

配置 Yubikey

确认你的账户访问到了 USB Yubikey:

  1. $ ykinfo -v
  2. version: 3.5.0

如果 Yubikey 没有被检测到,会出现下面这些错误信息:

  1. Yubikey core error: no yubikey present

接下来,通过下面这些 ykpersonalize 命令初始化你每个新的 Yubikey。这将设置 Yubikey 配置插槽 2 使用 HMAC-SHA1 算法(即使少于 64 个字符)进行询问响应。如果你已经为询问响应设置好了你的 Yubikey。你就不需要再次运行 ykpersonalize 了。

  1. ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible

一些用户在使用的时候将 YubiKey 留在了他们的工作站上,甚至用于对虚拟机进行询问-响应。然而,为了更好的安全性,你可能会更愿意使用手动触发 YubiKey 来响应询问。

要添加手动询问按钮触发器,请添加 -ochal-btn-trig 选项,这个选项可以使得 Yubikey 在请求中闪烁其 LED。等待你在 15 秒内按下硬件密钥区域上的按钮来生成响应密钥。

  1. $ ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -ochal-btn-trig -oserial-api-visible

为你的每个新的硬件密钥执行此操作。每个密钥执行一次。完成编程之后,使用下面的命令将 Yubikey 配置存储到 ~/.yubico

  1. $ ykpamcfg -2 -v
  2. debug: util.c:222 (check_firmware_version): YubiKey Firmware version: 4.3.4
  3.  
  4. Sending 63 bytes HMAC challenge to slot 2
  5. Sending 63 bytes HMAC challenge to slot 2
  6. Stored initial challenge and expected response in '/home/chuckfinley/.yubico/challenge-9992567'.

如果你要设置多个密钥用于备份,请将所有的密钥设置为相同,然后使用 ykpamcfg 工具存储每个密钥的询问-响应。如果你在一个已经存在的注册密钥上运行 ykpersonalize 命令,你就必须再次存储配置信息。

配置 /etc/pam.d/sudo

现在要去验证配置是否有效,在同一个终端窗口中,你需要设置 sudo 来要求使用 Yubikey 的询问-响应。将下面这几行插入到 /etc/pam.d/sudo 文件中。

  1. auth required pam_yubico.so mode=challenge-response

将上面的 auth 行插入到文件中的 auth include system-auth 行的上面,然后保存并退出编辑器。在默认的 Fedora 29 设置中,/etc/pam.d/sudo 应该像下面这样:

  1. #%PAM-1.0
  2. auth required pam_yubico.so mode=challenge-response
  3. auth include system-auth
  4. account include system-auth
  5. password include system-auth
  6. session optional pam_keyinit.so revoke
  7. session required pam_limits.so
  8. session include system-auth

保持这个初始的终端窗口打开,然后打开一个新的终端窗口进行测试,在新的终端窗口中输入:

  1. $ sudo echo testing

你应该注意到了 Yubikey 上的 LED 在闪烁。点击 Yubikey 按钮,你应该会看见一个输入 sudo 密码的提示。在你输入你的密码之后,你应该会在终端屏幕上看见 “testing” 的字样。

现在去测试确保失败也正常,启动另一个终端窗口,并从 USB 插口中拔掉 Yubikey。使用下面这条命令验证,在没有 Yubikey 的情况下,sudo 是否会不再正常工作。

  1. $ sudo echo testing fail

你应该立刻被提示输入 sudo 密码,但即使你输入了正确密码,登录也应该失败。

设置 Gnome 桌面管理器(GDM)

一旦你的测试完成后,你就可以为图形登录添加询问-响应支持了。将你的 Yubikey 再次插入进 USB 插口中。然后将下面这几行添加到 /etc/pam.d/gdm-password 文件中:

  1. auth required pam_yubico.so mode=challenge-response

打开一个终端窗口,然后运行下面这些命令。如果需要,你可以使用其他的编辑器:

  1. $ sudo vi /etc/pam.d/gdm-password

你应该看到 Yubikey 上的 LED 在闪烁,按下 Yubikey 按钮,然后在提示符处输入密码。

修改 /etc/pam.d/gdm-password 文件,在已有的 auth substack password-auth 行上添加新的行。这个文件的顶部应该像下面这样:

  1. auth [success=done ignore=ignore default=bad] pam_selinux_permit.so
  2. auth required pam_yubico.so mode=challenge-response
  3. auth substack password-auth
  4. auth optional pam_gnome_keyring.so
  5. auth include postlogin
  6.  
  7. account required pam_nologin.so

保存更改并退出编辑器,如果你使用的是 vi,输入键是按 Esc 键,然后在提示符处输入 wq! 来保存并退出。

结论

现在注销 GNOME。将 Yubikey 插入到 USB 口,在图形登录界面上点击你的用户名。Yubikey LED 会开始闪烁。触摸那个按钮,你会被提示输入你的密码。

如果你丢失了 Yubikey,除了重置密码之外,你还可以使用备份的 Yubikey。你还可以给你的账户增加额外的 Yubikey 配置。

如果有其他人获得了你的密码,他们在没有你的物理硬件 Yubikey 的情况下,仍然不能登录。恭喜!你已经显著提高了你的工作环境登录的安全性了。 

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2011-06-20 15:09:09

2023-12-25 08:04:42

2011-03-30 13:21:17

2013-08-30 10:54:53

2011-08-10 15:34:17

身份认证云安全CA Technolo

2009-06-27 10:59:04

2013-04-25 10:11:12

托管虚拟桌面HVDGartner

2016-08-22 19:43:38

2016-11-07 10:18:13

2016-07-11 12:50:53

身份认证移动安全移动安全身份认证

2023-10-26 08:19:34

2022-03-14 13:53:01

基于风险的身份验证RBA身份验证

2022-12-30 10:22:06

物联网智能建筑出入口控制

2011-12-09 09:31:58

桌面虚拟化

2009-12-10 10:08:29

2013-08-07 09:25:27

2013-08-07 09:36:42

2009-03-03 12:33:47

2012-11-28 09:55:35

2023-02-22 17:09:54

点赞
收藏

51CTO技术栈公众号