Вход в систему рабочего стола и аутентификация пользователей 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), смотрите Альтернативный метод аутентификации после завершения основного руководства.

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.

Предупреждение

Следующее руководство может потенциально заблокировать ваш компьютер. Вы должны знать об этих рисках, так как рекомендуется сначала использовать приведенные ниже инструкции на дополнительном компьютере или после полного резервного копирования.

Вы можете потерять доступ к своим данным после настройки ` модулей PAM <https://www.man7.org/linux/man-pages/man8/pam.8.html>`__.

Требования

  • 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
    

    Примечание

    • В качестве альтернативы вы можете собрать 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 и не содержит никакой конфиденциальной информации. Он предназначен только для того, чтобы показать ожидаемый формат и длину вывода.

    Совет

    • 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. Модификация подключаемого модуля аутентификации 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
    

    Совет

    • Для тестирования мы используем значение sufficient, а на шаге 8 изменим его на required.

    • Поскольку мы используем Central Authentication Mapping, нам нужно указать 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.].

    Примечание

    Почему именно нижнее размещение? 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:

    img6
  7. Setting up multiple users

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

    Предупреждение

    Если вы не настроите всех пользователей в файле конфигурации 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.

    Предупреждение

    Прежде чем продолжить этот шаг, убедитесь, что у вас есть:

    • Проверьте, что аутентификация с помощью 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)

Вверху (до 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, может войти в систему без вашего пароля

  • Используйте его только в том случае, если удобство важнее максимальной безопасности

Подробное объяснение флагов управления и их последствий см. в разделе Флаги управления.

Модули 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.

Предупреждение

  • 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, если вы установили Central Authentication Mapping. и использовали флаги required или requisite.

  • Вы также можете потерять возможность входа в систему с помощью диспетчера Gnome Display, если вход по смарт-карте принудительный и вы использовали флаги 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