桌面登录和Linux用户认证

Compatible Nitrokeys

3A/C/Mini

Passkey

HSM 2

Pro 2

FIDO2

Storage 2

Start

U2F

active

active

inactive

inactive

active

inactive

inactive

active

简介

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``标志。