Влизане в работния плот и удостоверяване на потребителя на 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 compatible Nitrokeys. You will set up your Nitrokey as a second factor for authentication. This means you will need your usual login method (likely your password) and your Nitrokey to login.

Ако вместо това искате да използвате своя Nitrokey като алтернативен метод за влизане в системата (парола ИЛИ Nitrokey), вижте Alternative Authentication Method (Алтернативен метод за удостоверяване), след като завършите основното ръководство.

If you want to login to you computer using Nitrokey Pro 2, Nitrokey Storage 2 and Nitrokey Start you can visit the instructions available here.

Warning

Следното ръководство може да ви блокира достъпа до компютъра. Трябва да сте наясно с тези рискове, тъй като се препоръчва инструкциите по-долу да се използват първо на вторичен компютър или след пълно архивиране.

Възможно е да загубите достъп до данните си след конфигуриране на PAM модули.

Изисквания

  • Ubuntu 24.04 with Gnome Display Manager (GDM).

Инструкции

  1. Създайте потребител за архивиране и му дайте привилегии на root

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

    В случай че предпочитате да настроите U2F за един потребител и сте блокирани от потребителската си сесия, все пак ще можете да влезете с <backup_user> и да продължите с поддръжката.

  2. Инсталиране libpam-u2f

    On Ubuntu 24.04 it is possible to download directly libpam-u2f from the official repos

    $ sudo apt install libpam-u2f
    

    Note

    • Като алтернатива можете да изградите libpam-u2f от Git.

    • За да проверите дали библиотеката е правилно инсталирана, въведете следната команда:

    $ 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
    
  3. Генериране на конфигурационния файл на U2F

    To generate the configuration file we will use the pamu2fcfg utility. First plug your Nitrokey (if you did not already), and enter the following command:

    $ pamu2fcfg > ~/u2f_keys
    

    Once you run the command above, you will need to touch the device while it flashes. Once done, pamu2fcfg will append its output the u2f_keys file in the format:

    <username>:KeyHandle,PublicKey,flags
    

    This will look something like the following:

    nitrouser:fS6vQ9uWa0VizcczyZ/bvk5kcQJkIJOC/21/e7dXFe/fnONSL705EkeiUpZpL/3seAWL/qW4/mqb0/WtiZoP/NOLTRM4EEAg1ANLsfYgSzRd/AjsW3z8kJwgckbvwDUyB90ByR09XtBhuE41vMsEk6J+9CS0+ZuPSB0KXRG7z2yZpQLldjE/ijsdIdd8Ct2oXSiZ/zTb/t5kRafNJVkp=,Oo4U9XvIhI9r0WNnvoMwG5/pbgwYd4GMCYEinhWcsI2hKUebYj92JOxDsSa3zd2A9OB0ofXgB16FD2naev3YmLch==,es256,+presence
    

    Обърнете внимание, че този изход не е генериран директно от pamu2fcfg и не съдържа чувствителна информация. Тя има за цел единствено да покаже очаквания формат и дължина на изхода.

    Tip

    • The file must be named u2f_keys

    • Препоръчва се инструкциите да се тестват първо с един потребител. Конфигурацията на други потребители ще бъде добавена в раздел 7.

  4. Setting up a backup Nitrokey

    This step is optional, however it is advised to have a second Nitrokey as backup in the case of loss, theft or destruction of your primary Nitrokey.

    To set up a backup key, repeat the procedure above, and use pamu2fcfg -n like this:

    $ pamu2fcfg -n >> ~/u2f_keys
    

    This will omit the <username> field, and the output is appended to the line with your <username>, this will look something like this:

    <username>:Zx...mw,04...0a:xB...fw,es256,+presence:04...3f,es256,+presence
    
  5. Securing the config file

    За по-добра сигурност, след като конфигурационният файл е генериран, ще преместим генерирания файл ~/u2f_keys в /etc/Nitrokey/ и ще променим правата за достъп с помощта на тези команди:

    $ sudo mkdir /etc/Nitrokey
    $ sudo mv ~/u2f_keys /etc/Nitrokey/
    $ sudo chmod 644 /etc/Nitrokey/u2f_keys
    
  6. Модифициране на Pluggable Authentication Module PAM

    Конфигуриране на файловете на модула PAM под /etc/pam.d/. Това е тестова фаза - стъпка 8 ще наложи конфигурацията, след като потвърдите, че тя работи.

    In this guide we will modify the common-auth file as it handles the authentication settings which are common to all services, other options are described in PAM Modules. You can modify the file with the following command:

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

    Add the following line at the bottom of the file:

    #Nitrokey config
    auth    sufficient pam_u2f.so authfile=/etc/Nitrokey/u2f_keys cue [cue_prompt=Please touch the device.] prompt
    

    Tip

    • Използваме достатъчен за тестване и ще го променим на задължителен в стъпка 8.

    • Тъй като използваме Централно картографиране за удостоверяване, трябва да посочим pam_u2f местоположението на файла, който да се използва с опцията authfile.

    • If you often forget to insert the key, prompt option makes pam_u2f print Insert your U2F device, then press ENTER. and give you a chance to insert the 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.].

    Note

    Защо да се поставя на дъното? PAM обработва модулите отгоре надолу. Поставянето на конфигурацията на U2F в долната част гарантира, че първо се проверява удостоверяването с парола, като се създава работен процес с втори фактор (парола + U2F).

    За алтернативни опции за удостоверяване (парола ИЛИ Nitrokey) и подробни обяснения за това как позицията на реда и контролните флагове влияят на удостоверяването, вижте Алтернативен метод за удостоверяване.

    След като сме модифицирали common-auth, можем да запишем и да излезем от файла.

    You can test the configuration by typing sudo ls in the terminal. After typing in your password you should be prompted with the message Please touch the device. and have a similar output on the terminal:

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

    You can also test your configuration by logging out of the user session and logging back. A similar screen should be displayed once you you unplug/replug yout Nitrokey and type your password:

    Изображение6
  7. Setting up multiple users

    След като потвърдите, че удостоверяването с помощта на ключа Nitrokey е сработило, можете да настроите конфигурационния файл U2F за другите потребители в системата си.

    Warning

    Ако не настроите всички потребители в конфигурационния файл на U2F и продължите с налагането на удостоверяването с Nitrokey в стъпка 8, няма да можете да влезете в системата с никой неконфигуриран потребител!

    To configure u2f for multiple users, pamu2fcfg takes the -u <username> option, the output can be appended to the u2f_keys file like this:

    $ sudo pamu2fcfg -u <username> >> /etc/Nitrokey/u2f_keys
    

    За да добавите резервен ключ Nitrokey към този потребител, включете резервния ключ Nitrokey и направете същото, което направихте за основния потребител:

    $ sudo pamu2fcfg -n >> /etc/Nitrokey/u2f_keys
    

    След това повторете този процес за всички потребители във вашата система.

  8. Enforcing Nitrokey second factor authentication

    Може би сте забелязали, че удостоверяването с Nitrokey все още не е наложено. След като потвърдим, че удостоверяването с помощта на Nitrokey работи, можем да го наложим, като променим флага sufficient на required.

    Warning

    Преди да продължите с тази стъпка, уверете се, че имате:

    • Проверих дали удостоверяването с Nitrokey наистина работи, в противен случай може да загубите достъпа до компютъра си.

    • Създайте резервно копие на Nitrokey. В противен случай, ако изгубите или счупите Nitrokey, ще загубите достъп до компютъра си!

    Действайте внимателно!

    За целта трябва да редактирате конфигурационния файл PAM:

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

    В реда, който добавихте по-рано в долната част на файла, променете думата sufficient на required. Тя трябва да изглежда така:

    #Nitrokey config
    auth    required pam_u2f.so authfile=/etc/Nitrokey/u2f_keys cue [cue_prompt=Please touch the device.] prompt
    

After completing the setup, it is recommended to reboot your computer and unplug/replug the Nitrokey.

Alternative Authentication Method

Ако предпочитате да използвате ключа Nitrokey като алтернатива на паролата си (парола ИЛИ Nitrokey), можете да конфигурирате това вместо това:

Configuration Steps:

  1. Преместете реда за конфигуриране на PAM в горната част на **** на /etc/pam.d/common-auth (преди другите модули за автентификация)

  2. Запазете флага за управление sufficient

Това позволява удостоверяване само с един от двата фактора. Имайте предвид, че това осигурява по-малка сигурност от удостоверяването с втори фактор.

Разбиране на режимите на удостоверяване

Комбинацията от позицията на линията и контролния флаг определя режима на удостоверяване:

Authentication Modes

Position

Control Flag

Authentication Mode

Use Case

Дъно (след pam_unix)

sufficient

Second factor (testing)

Фаза на безопасно изпитване

Дъно (след pam_unix)

required

Втори фактор (принудителен)

Production security (main guide)

Top (преди pam_unix)

sufficient

Alternative factor

Convenience (password OR key)

Как работи PAM:

PAM обработва модулите последователно отгоре надолу. Контролният флаг определя как успехът или неуспехът се отразява на цялостното удостоверяване:

  • sufficient: Успехът завършва удостоверяването; неуспехът се пренебрегва, ако други модули успеят

  • required: Успехът е задължителен; неуспехът води до цялостен провал на удостоверяването

Какво означава това за вас:

Алтернативно удостоверяване (отгоре + достатъчно):

  • Можете да влезете в системата с паролата си ИЛИ само с вашия ключ Nitrokey.

  • If authentication with the Nitrokey succeeds, no password is required

  • Ако удостоверяването с Nitrokey е неуспешно или е пропуснато, паролата ще продължи да работи.

  • Това е по-удобно, но по-несигурно от удостоверяването с втори фактор.

Security implications:

  • Нападател с вашата парола може да влезе в системата без вашия Nitrokey

  • Нападател, който има физически достъп до вашия Nitrokey, може да влезе в системата без вашата парола.

  • Използвайте я само ако удобството е по-важно от максималната сигурност.

За подробни обяснения на контролните флагове и техните последствия вижте Control Flags.

Модули PAM

Съществуват няколко файла с модули на PAM, които могат да бъдат модифицирани според вашите нужди:

  • By modifying /etc/pam.d/common-auth file, you will be able to use you Nitrokey for 2nd factor authentication for graphic login and sudo.

  • 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.

Контролни флагове

Флагът за контрол определя поведението на модула PAM при успешна или неуспешна автентикация. В стъпка 6 използвахме флага sufficient за тестване, след което го променихме на required за прилагане.

Наличните контролни флагове са:

  • required: The module result must be successful for authentication to continue. This is the most critical flag and can lock you out of your computer if you do not have access to the Nitrokey.

  • requisite: Подобно на required, но в случай че конкретен модул върне отказ, контролът се връща директно към приложението или към по-горния стек на PAM. Този флаг може също така да ви блокира компютъра, ако нямате достъп до Nitrokey.

  • sufficient: The module result is ignored if it fails. In case of success, control is directly returned to the application, or to the superior PAM stack. This means no other PAM modules will be executed. The sufficient flag is considered safe for testing purposes.

  • optional: The success or failure of this module is only important if it is the only module in the stack associated with this service+type. The optional flag is considered safe to use for testing purposes.

Warning

  • If required or requisite is set, the failure of U2F authentication will cause a failure of the overall authentication. Failure will occur when the configured Nitrokey is not plugged, lost or destroyed.

  • Ще загубите достъп до компютъра си, ако сте конфигурирали неправилно модула PAM и сте използвали флаговете required или requisite.

  • Ще загубите и възможността да използвате sudo, ако настроите Централно картографиране на удостоверяването и сте използвали флаговете required или requisite.

  • Възможно е също така да загубите възможността да влизате в системата с помощта на Gnome Display Manager, ако е наложено влизане със смарт карта и сте използвали флаговете required или requisite. Вижте „Отстраняване на проблеми“ за допълнителна информация.

Отстраняване на неизправности

Проблеми с влизането в потребителски акаунт чрез GDM

В някои случаи, например ако сте инсталирали opencs-pkcs11, Gnome Display Manager (GDM) може да наложи по подразбиране влизане със смарт карта веднага щом бъде включена някоя смарт карта (като Nitrokey), дори ако никога не е била конфигурирана смарт карта. Това може да попречи на влизането в потребителския ви акаунт с помощта на u2f. Ако сте задали флага за контрол sufficient, изключете всички смарт карти и влезте в системата, като използвате паролата си. За да изключите налагането на смарт карти, изпълнете следната команда:

$ sudo -u gdm env -u XDG_RUNTIME_DIR -u DISPLAY DCONF_PROFILE=gdm dbus-run-session gsettings set org.gnome.login-screen enable-smartcard-authentication false