桌面登录和Linux用户认证#

(Nitrokey FIDO U2F - Linux)

简介#

本指南将指导你完成Linux的配置,以使用FIDO通用第二因子,即使用``libpam-u2f``和`Nitrokey FIDO2 <https://shop.nitrokey.com/shop/product/nk-fi2-nitrokey-fido2-55>`_ 的 FIDO U2F。

如果你想用`Nitrokey Pro 2登录到你的电脑。<https://shop.nitrokey.com/shop/product/nk-pro-2-nitrokey-pro-2-3>`_ Nitrokey Storage 2Nitrokey开始 你可以访问这里提供的说明 ``_。

要求#

说明#

GUI方法#

  1. 在左下角点击 Show Applications 并在搜索栏输入设置如下:

img1
  1. 在右栏向下滚动到 Users

img2
  1. 在左角点击 Unlock 这将提示您的密码

img3
  1. 选择 Administrator 并输入你选择的用户名和密码

img4
  1. 一旦你完成了第4步,你应该就完成了

img5

CLI方法#

  1. 创建一个备份用户并赋予其root权限

你可以通过使用这些命令来做到这一点。

$ sudo adduser <backup_user>
$ sudo usermod -aG sudo <backup_user>

如果你喜欢为单个用户设置U2F,并且被锁定在用户会话之外,你仍然能够用``<backup_user>``登录,并继续进行维护。

警告

下面的指南有可能将你的电脑锁定。你应该意识到这些风险,因为建议首先在第二台电脑上使用下面的说明,或者在完整备份之后使用。

在配置了`PAM模块<http://www.linux-pam.org/Linux-PAM-html/>`_之后,你可能失去对数据的访问。

  1. 设置 rules 以识别Nitrokey FIDO2

在``/etc/udev/rules.d`下载``41-nitrokey.rules```

$ cd /etc/udev/rules.d/
$ sudo wget https://raw.githubusercontent.com/Nitrokey/libnitrokey/master/data/41-nitrokey.rules

并重新启动``udev``服务

$ sudo systemctl restart udev
  1. 安装 libpam-u2f

在Ubuntu 20.04上,可以直接下载``libpam-u2f``从官方仓库下载

$ sudo apt install libpam-u2f

注解

点击查看更多选项

$ file /lib/x86_64-linux-gnu/security/pam_u2f.so

输出应该是如下内容。

/lib/x86_64-linux-gnu/security/pam_u2f.so: \ ELF 64-bit LSB shared object, x86-64, version 1 (SYSV),\ dynamically linked, BuildID[sha1]=1d55e1b11a97be2038c6a139579f6c0d91caedb1, stripped
  1. 准备好目录

在你的主目录下创建``.config/Nitrokey/``

$ mkdir ~/.config/Nitrokey

并插入你的Nitrokey FIDO2。

一旦完成准备工作,我们就可以开始配置计算机,以便在登录和``sudo``时使用Nitrokey FIDO2进行第二因素认证。

  1. 生成U2F配置文件

为了生成配置文件,我们将使用``pamu2fcfg``工具,该工具随``libpam-u2f``附带。为方便起见,我们将直接把该工具的输出写入``u2f_keys```文件中,在``.config/Nitrokey```下。首先插入你的Nitrokey FIDO2(如果你还没有),并输入以下命令。

$ pamu2fcfg > ~/.config/Nitrokey/u2f_keys

一旦你运行上面的命令,你需要在它闪烁的时候触摸按键。一旦完成,``pamu2fcfg``将在其输出中附加``u2f_keys``格式如下。

<username>:Zx...mw,04...0a

注意,输出结果将更长,但敏感部分在这里已经被删除。为了更好的安全,一旦配置文件生成,我们将用这个命令把``.config/Nitrokey``目录移到``etc/``目录下。

$ sudo mv ~/.config/Nitrokey /etc

小技巧

  • .config/Nitrokey``下的文件必须命名为``u2f_keys

  • 建议首先用一个用户来测试指令。为此,前面的指令采取``-u``选项,来指定一个用户,就像下面的例子。

$ pamu2fcfg -u <username> > ~/.config/Nitrokey/u2f_keys
  • 对于单个用户的配置,你应该在下一步指向主目录,或者在PAM配置中不包括``authfile``选项。

  1. 备份

这一步是可选的,但建议在您的Nitrokey FIDO丢失、被盗或毁坏的情况下拥有一个备份的Nitrokey。

要设置一个备份钥匙,重复上述程序,并使用``pamu2fcfg -n``。这将省略``<username>``字段,输出可以附加到你的``<username>``这一行。

<username>:Zx...mw,04...0a:xB...fw,04...3f
  1. 修改可插拔的认证模块 PAM

最后一步是配置``/etc/pam.d/``下的PAM模块文件。在本指南中,我们将修改``common-auth``文件,因为它处理所有服务共有的认证设置,但其他选项也是可能的。你可以用以下命令修改该文件。

$ cd /etc/pam.d
$ sudo $editor common-auth

并添加以下几行。

#Nitrokey FIDO2 config
auth    sufficient pam_u2f.so authfile=/etc/Nitrokey/u2f_keys cue prompt nouserok

小技巧

  • 由于我们使用中央认证映射,我们需要告诉``pam_u2f``使用``authfile``选项的文件位置。

  • 如果你经常忘记插入钥匙。``prompt``选项使``pam_u2f``打印``Insert your U2F device, then press ENTER.``并且给你机会插入硝基钥匙。

  • 如果你想被提示触摸硝基钥匙。``cue``选项将使``pam_u2f``打印``Please touch the device.``信息。

  • `nouserok`将确保你仍然可以使用用户名和密码登录,你可能想在某个时候删除这个,一旦设置工作,你不想要常规的基于用户名和密码的登录。

一旦我们修改了``common-auth``,我们可以保存并退出文件。

你可以在终端输入``sudo ls``来测试该配置。你应该得到提示信息``Please touch the device.``并在终端有类似的输出。

nitrouser@nitrouser:~$ sudo ls
[sudo] password for nitrouser:  Please touch the device.

你也可以通过注销用户会话并重新登录来测试你的配置。一旦你拔掉/重新拔掉你的Nitrokey FIDO2并输入密码,应该会显示类似的屏幕。

img6

使用方法#

修改PAM模块后,你就可以马上测试你的配置,但建议重新启动你的电脑,并拔掉/重新插入Nitrokey FIDO2的插头。

一旦你正确地测试了本指南中的说明(并建立了一个备份)。建议使用``required`或``requisite``控制标志,而不是``sufficient`。

标志``required``和``requisite``提供更严格的访问控制,并将使Nitrokey FIDO2成为登录和/或使用配置的服务的必要条件。

如果你需要更多关于``PAM``配置行中的控制标志的信息,你可以看看本指南的最后一节,了解它们的区别,以及使用它们各自的意义。

PAM模块#

有几个PAM模块文件,可以根据你的需要进行修改。

  • 通过修改``/etc/pam.d/common-auth``文件,你将能够使用你的Nitrokey FIDO进行图形登录的第二因素认证和``sudo``。注意:``common-auth``应通过在文件末尾添加额外的配置行进行修改。

  • 如果你希望只在Gnome的图形登录中使用FIDO U2F认证,你可能更喜欢修改:/etc/pam.d/gdm-password

  • 另外,如果你想在使用``/etc/pam.d/sudo``文件时使用FIDO U2F,你可以直接修改``sudo``命令。

控制标志#

在第7步中,我们使用了``sufficient``控制标志来确定PAM模块在Nitrokey插入或不插入时的行为。然而,可以通过使用以下控制标志来改变这种行为。

  • required。这是最关键的标志。模块结果必须是成功的,认证才能继续。如果你没有访问Nitrokey的权限,这个标志会把你的电脑锁住。

  • requisite。与``required``类似,但在特定模块返回失败的情况下,控制权将直接返回给应用程序,或返回给上级PAM栈。如果你没有访问Nitrokey的权限,这个标志也可以将你的电脑锁定。

  • sufficient。如果失败,模块结果将被忽略。``sufficient``标志被认为是安全的测试目的。

  • optional。该模块的成功或失败只有在它是堆栈中与该服务+类型相关的唯一模块时才重要。``optional``标志被认为是安全的,可用于测试目的。

警告

  • 如果``required`或``requisite``被设置,U2F认证的失败将导致整体认证的失败。当配置的Nitrokey FIDO没有被插上、丢失或毁坏时,就会发生失败。

  • 如果你错误地配置了PAM模块,并且*使用了``required`或``标记,你将失去对你的计算机的访问。

  • 如果你设置了中央认证映射,你也将失去使用``sudo``的能力。*并*使用``required``或``requisite``标志。