桌面登录和Linux用户认证

简介

This guide will walk you through the configuration of Linux to use FIDO Universal 2nd Factor, i.e. FIDO U2F with libpam-u2f and Nitrokey FIDO2.

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

要求

说明

GUI方法

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

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

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

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

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

    img5

CLI方法

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

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

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

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

    警告

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

    在配置了`PAM模块<https://www.man7.org/linux/man-pages/man8/pam.8.html>`__后,你可能失去对数据的访问。

  2. 设置 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
    
  3. 安装 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
    
  4. 准备好目录

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

    $ mkdir ~/.config/Nitrokey
    

    并插入你的Nitrokey FIDO2。

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

  5. 生成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``选项。

  6. 备份

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

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

    <username>:Zx...mw,04...0a:xB...fw,04...3f
    
  7. 修改可插拔的认证模块 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 [cue_prompt=Please touch the device.] prompt nouserok
    

    小技巧

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

    • 如果你经常忘记插入密钥,``prompt``选项会让``pam_u2f``打印``插入你的U2F设备,然后按ENTER.``并给你一个机会插入Nitrokey。

    • If you would like to be prompted to touch the Nitrokey, cue option will make pam_u2f print Please touch the device. message. You can change the message in [cue_prompt=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``应通过在文件末尾添加额外的配置行进行修改。

  • If you wish to use FIDO U2F authentication solely for Gnome’s graphic login, you might prefer to modify the/etc/pam.d/gdm-password

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

控制标志

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

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

  • 必要条件":与 required 类似,但在特定模块返回失败的情况下,控制权会直接返回应用程序或上级 PAM 堆栈。如果你没有访问 Nitrokey 的权限,该标记也会将你锁定在计算机之外。

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

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

警告

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

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

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