介绍
今天, Fedora 提供多种方法来改进我们用户帐户的安全身份验证。 当然它有熟悉的用户名和密码来登录。 它还提供额外的身份验证选项,例如生物识别、指纹、智能卡、一次性密码,甚至质询响应身份验证。
每种身份验证方法都有明显的优缺点。 这本身可能是一篇相当长的文章的主题。 Fedora 杂志之前已经介绍了其中一些选项:
- 使用 YubiKey4 Fedora
- Fedora 28: OpenSSH 中更好的智能卡支持
现代最安全的方法之一 Fedora 发布是离线硬件挑战-响应。 它也是最容易部署的一种。 就是这样。
质询-响应认证
从技术上讲,当您提供密码时,您就是在响应用户名质询。 此处介绍的离线质询响应首先需要您的用户名。 下一个, Fedora 挑战您提供加密的物理硬件令牌。 令牌使用它通过可插入身份验证模块 (PAM) 框架存储的另一个加密密钥来响应质询。 最后, Fedora 提示您输入密码。 这可以防止某人仅使用找到的硬件令牌,或者仅使用没有正确加密密钥的用户名和密码。
这意味着除了您的用户名和密码之外,您之前还必须在操作系统中注册一个或多个加密硬件令牌。 而且您必须提供该物理硬件令牌才能使用您的用户名进行身份验证。
一些质询-响应方法,如一次性密码 (OTP),采用硬件令牌上的加密代码密钥,并将该密钥通过网络传递到远程身份验证服务器。 然后服务器告诉 Fedora的 PAM 框架,如果它是该用户名的有效令牌。 如果身份验证服务器位于本地网络上,这将非常有用。 不利的一面是,如果网络连接断开或您在没有网络连接的情况下远程工作,则无法使用此远程身份验证方法。 在您可以通过网络连接到服务器之前,您可能会被锁定在系统之外。
有时工作场所需要使用 Yubikey 一次性密码 (OTP) 配置。 但是,在家庭或个人系统上,您可能更喜欢本地质询-响应配置。 一切都是本地的,并且该方法不需要远程网络调用。 以下过程适用于 Fedora 27、28 和 29 日。
准备
硬件令牌密钥
首先,您需要一个安全的硬件令牌密钥。 具体来说,此过程需要 Yubikey 4、Yubikey NEO 或最近发布的同时支持 FIDO2 的 Yubikey 5 系列设备。 您应该购买其中两个以提供备份,以防其中一个丢失或损坏。 您可以在许多工作站上使用这些键。 更简单的 FIDO 或仅 FIDO U2F 版本不适用于此过程,但非常适合使用 FIDO 的在线服务。
备份、备份和备份
接下来,备份所有重要数据。 您可能希望在 Fedora 27/28/29 克隆虚拟机,以确保您在设置个人工作站之前了解该过程。
更新和安装
现在确保 Fedora 已是最新。 然后安装需要的 Fedora Yubikey 通过这些 dnf 命令打包:
$ sudo dnf upgrade $ sudo dnf install ykclient* ykpers* pam_yubico* $ cd
如果您在虚拟机环境中,例如 Virtual Box,请确保 Yubikey 设备插入 USB 端口,并在 VM 控件中启用对 Yubikey 的 USB 访问。
配置 Yubikey
验证您的用户帐户是否有权访问 USB Yubikey:
$ ykinfo -v version: 3.5.0
如果未检测到 YubiKey,则会出现以下错误消息:
Yubikey core error: no yubikey present
接下来,使用以下 ykpersonalize 命令初始化每个新的 Yubikey。 这使用 HMAC-SHA1 算法为 Yubikey 配置槽 2 设置挑战响应,即使字符数少于 64。 如果您已经为挑战响应设置了 Yubikey,则无需再次运行 ykpersonalize。
ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible
一些用户在使用时将 YubiKey 留在工作站中,甚至对虚拟机使用挑战-响应。 但是,为了提高安全性,您可能更喜欢手动触发 Yubikey 来响应挑战。
要添加手动挑战按钮触发器,请添加 -ochal-btn-trig 标志。 该标志使 Yubikey 在请求时闪烁 yubikey LED。 它会等待您在 15 秒内按下硬件按键区域上的按钮以产生响应按键。
$ ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -ochal-btn-trig -oserial-api-visible
对每个新硬件密钥执行此操作,每个密钥仅一次。 对密钥进行编程后,使用以下命令将 Yubikey 配置存储到 ~/.yubico:
$ ykpamcfg -2 -v debug: util.c:222 (check_firmware_version): YubiKey Firmware version: 4.3.4 Sending 63 bytes HMAC challenge to slot 2 Sending 63 bytes HMAC challenge to slot 2 Stored initial challenge and expected response in '/home/chuckfinley/.yubico/challenge-9992567'.
如果您为备份目的设置多个密钥,请将所有密钥配置为相同,并使用 ykpamcfg 实用程序存储每个密钥的质询-响应。 如果对现有的注册密钥运行命令 ykpersonalize,则必须再次存储配置。
配置 /etc/pam.d/sudo
现在要验证此配置是否有效, 在同一个终端窗口中 你会设置 sudo 要求使用 Yubikey 质询-响应。 将以下行插入 /etc/pam.d/sudo 文件:
auth required pam_yubico.so mode=challenge-response
将上述 auth 行插入到 auth include system-auth 行上方的文件中。 然后保存文件并退出编辑器。 在默认情况下 Fedora 29 设置,/etc/pam.d/sudo 现在应该是这样的:
#%PAM-1.0 auth required pam_yubico.so mode=challenge-response auth include system-auth account include system-auth password include system-auth session optional pam_keyinit.so revoke session required pam_limits.so session include system-auth
保持这个原始终端窗口打开,并通过打开另一个新的终端窗口进行测试。 在新的终端窗口中输入:
$ sudo echo testing
您应该注意到按键上的 LED 闪烁。 点击 Yubikey 按钮,您应该会看到一个提示 sudo 密码。 输入密码后,您应该会在终端屏幕上看到“正在测试”。
现在测试以确保正确的故障。 启动另一个终端窗口并从 USB 端口移除 Yubikey。 验证 sudo 在没有 Yubikey 的情况下不再使用此命令:
$ sudo echo testing fail
应立即提示您输入 sudo 密码。 即使您输入密码,它也应该失败。
配置 Gnome 桌面管理器
测试完成后,现在您可以为图形登录添加质询-响应支持。 将 Yubikey 重新插入 USB 端口。 接下来,将以下行添加到 /etc/pam.d/gdm-password 文件中:
auth required pam_yubico.so mode=challenge-response
打开终端窗口,然后发出以下命令。 如果需要,您可以使用其他编辑器:
$ sudo vi /etc/pam.d/gdm-password
您应该看到 yubikey LED 闪烁。 按 yubikey 按钮,然后在提示符处输入密码。
修改 /etc/pam.d/gdm-password 文件以在现有行 auth substack password-auth 之上添加新的 auth 行。 文件的顶部现在应该如下所示:
auth [success=done ignore=ignore default=bad] pam_selinux_permit.so auth required pam_yubico.so mode=challenge-response auth substack password-auth auth optional pam_gnome_keyring.so auth include postlogin account required pam_nologin.so
Save 更改并退出编辑器。 如果你使用 vi,按键顺序是按 Esc键 键,然后输入 wq! 在提示保存并退出。
结论
现在退出 GNOME。 将 Yubikey 插入 USB 端口后,在图形登录中单击您的用户名。 Yubikey LED 开始闪烁。 轻触按钮,系统将提示您输入密码。
如果您丢失了 Yubikey,除了您设置的密码,您仍然可以使用二级备份 Yubikey。 您还可以向您的用户帐户添加额外的 Yubikey 配置。
如果有人获得了您的密码,他们仍然无法在没有您的物理硬件 Yubikey 的情况下登录。 恭喜! 您现在已经大大提高了工作站登录的安全性。