Logowanie do pulpitu i uwierzytelnianie użytkowników systemu Linux

Compatible Nitrokeys

3A/C/Mini

Passkey

HSM 2

Pro 2

FIDO2

Storage 2

Start

U2F

active

active

inactive

inactive

active

inactive

inactive

active

Wstęp

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.

Jeśli zamiast tego chcesz użyć Nitrokey jako alternatywnej metody logowania (hasło LUB Nitrokey), zobacz Alternatywna metoda uwierzytelniania po ukończeniu głównego przewodnika.

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.

Ostrzeżenie

Poniższa instrukcja może potencjalnie zablokować dostęp do komputera. Należy być świadomym tego ryzyka, ponieważ zaleca się, aby najpierw skorzystać z poniższych instrukcji na komputerze pomocniczym lub po wykonaniu pełnej kopii zapasowej.

Możesz stracić dostęp do swoich danych po skonfigurowaniu ` modułów PAM <https://www.man7.org/linux/man-pages/man8/pam.8.html>`__.

Wymagania

  • Ubuntu 24.04 with Gnome Display Manager (GDM).

Instrukcje

  1. Utwórz użytkownika backupu i nadaj mu uprawnienia roota.

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

    Jeśli wolisz skonfigurować U2F dla pojedynczego użytkownika i zostaniesz zablokowany w swojej sesji użytkownika, nadal będziesz mógł się zalogować za pomocą <backup_user> i kontynuować konserwację.

  2. Instalacja libpam-u2f

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

    $ sudo apt install libpam-u2f
    

    Informacja

    • Alternatywnie możesz zbudować libpam-u2f z Git.

    • Aby sprawdzić, czy biblioteka została poprawnie zainstalowana, wpisz następujące polecenie:

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

    Wyjście powinno wyglądać jak poniżej:

    /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. Generowanie pliku konfiguracyjnego 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
    

    Uwaga, ten wynik nie został wygenerowany bezpośrednio przez pamu2fcfg i nie zawiera żadnych poufnych informacji. Ma on na celu wyłącznie pokazanie oczekiwanego formatu i długości danych wyjściowych.

    Wskazówka

    • The file must be named u2f_keys

    • Zaleca się, aby najpierw przetestować instrukcje z jednym użytkownikiem. Konfiguracja innych użytkowników zostanie dodana w sekcji 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

    Dla lepszego bezpieczeństwa, po wygenerowaniu pliku konfiguracyjnego, przeniesiemy wygenerowany plik ~/u2f_keys do /etc/Nitrokey/ i zmienimy uprawnienia dostępu za pomocą tych poleceń:

    $ sudo mkdir /etc/Nitrokey
    $ sudo mv ~/u2f_keys /etc/Nitrokey/
    $ sudo chmod 644 /etc/Nitrokey/u2f_keys
    
  6. Modyfikuj Pluggable Authentication Module PAM.

    Skonfiguruj pliki modułu PAM pod /etc/pam.d/. Jest to faza testowa - krok 8 wymusi konfigurację po potwierdzeniu, że działa.

    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
    

    Wskazówka

    • Używamy wartości wystarczającej do testowania i zmienimy ją na wymaganą w kroku 8.

    • Ponieważ używamy Central Authentication Mapping, musimy podać pam_u2f lokalizację pliku do użycia z opcją 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.].

    Informacja

    Dlaczego umieszczanie od dołu? PAM przetwarza moduły od góry do dołu. Umieszczenie konfiguracji U2F na dole zapewnia, że uwierzytelnianie hasłem jest sprawdzane jako pierwsze, tworząc przepływ pracy drugiego czynnika (hasło + U2F).

    Aby zapoznać się z alternatywnymi opcjami uwierzytelniania (hasło LUB Nitrokey) i szczegółowymi wyjaśnieniami dotyczącymi wpływu położenia linii i flag kontrolnych na uwierzytelnianie, zobacz Alternatywna metoda uwierzytelniania.

    Gdy już zmodyfikowaliśmy common-auth, możemy zapisać i wyjść z pliku.

    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

    Po potwierdzeniu, że uwierzytelnianie za pomocą Nitrokey zadziałało, można skonfigurować plik konfiguracyjny U2F dla innych użytkowników w systemie.

    Ostrzeżenie

    Jeśli nie skonfigurujesz wszystkich użytkowników w pliku konfiguracyjnym U2F i będziesz kontynuować wymuszanie uwierzytelniania Nitrokey w kroku 8, nie będziesz mógł zalogować się przy użyciu żadnego nieskonfigurowanego użytkownika!

    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
    

    Aby dodać zapasowy Nitrokey do tego użytkownika, podłącz zapasowy Nitrokey i wykonaj te same czynności, które wykonałeś dla głównego użytkownika:

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

    Następnie powtórz ten proces dla wszystkich użytkowników w systemie.

  8. Enforcing Nitrokey second factor authentication

    Być może zauważyłeś, że uwierzytelnianie za pomocą Nitrokey nie zostało jeszcze wymuszone. Po potwierdzeniu, że uwierzytelnianie za pomocą Nitrokey działa, możemy je wymusić, zmieniając flagę sufficient na required.

    Ostrzeżenie

    Przed kontynuowaniem tego kroku upewnij się, że posiadasz:

    • Sprawdzono, że uwierzytelnianie za pomocą Nitrokey rzeczywiście działa, w przeciwnym razie można utracić dostęp do komputera.

    • Skonfiguruj zapasowy Nitrokey. W przeciwnym razie, jeśli zgubisz lub złamiesz Nitrokey, stracisz dostęp do swojego komputera!

    Postępuj ostrożnie!

    W tym celu należy edytować plik konfiguracyjny PAM:

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

    W linii dodanej wcześniej na dole pliku zmień słowo sufficient na required. Powinno to wyglądać następująco:

    #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

Jeśli wolisz używać Nitrokey jako alternatywy dla hasła (hasło LUB Nitrokey), możesz to skonfigurować:

Configuration Steps:

  1. Przenieś linię konfiguracji PAM na górę **** z /etc/pam.d/common-auth (przed innymi modułami auth)

  2. Zachowaj flagę kontrolną sufficient

Umożliwia to uwierzytelnianie tylko za pomocą jednego z tych czynników. Należy pamiętać, że zapewnia to mniejsze bezpieczeństwo niż uwierzytelnianie drugiego czynnika.

Zrozumienie trybów uwierzytelniania

Kombinacja pozycji linii i flagi kontrolnej określa tryb uwierzytelniania:

Authentication Modes

Position

Control Flag

Authentication Mode

Use Case

Dół (po pam_unix)

sufficient

Second factor (testing)

Faza bezpiecznego testowania

Dół (po pam_unix)

required

Drugi czynnik (wymuszony)

Production security (main guide)

Top (przed pam_unix)

sufficient

Alternative factor

Convenience (password OR key)

Jak działa PAM:

PAM przetwarza moduły sekwencyjnie od góry do dołu. Flaga kontrolna określa, w jaki sposób sukces lub porażka wpływa na ogólne uwierzytelnianie:

  • sufficient: Sukces kończy uwierzytelnianie; niepowodzenie jest ignorowane, jeśli inne moduły się powiodą

  • required: Sukces jest obowiązkowy; niepowodzenie powoduje ogólne niepowodzenie uwierzytelniania

Co to oznacza dla użytkownika?

Alternatywne uwierzytelnianie (górne + wystarczające):

  • Możesz zalogować się za pomocą hasła LUB sam Nitrokey

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

  • Jeśli uwierzytelnianie Nitrokey nie powiedzie się lub zostanie pominięte, hasło nadal będzie działać

  • Jest to wygodniejsze, ale mniej bezpieczne niż uwierzytelnianie drugim czynnikiem

Security implications:

  • Atakujący posiadający Twoje hasło może zalogować się bez Twojego Nitrokey

  • Atakujący mający fizyczny dostęp do Nitrokey może zalogować się bez hasła użytkownika

  • Używaj tego tylko wtedy, gdy wygoda jest ważniejsza niż maksymalne bezpieczeństwo

Szczegółowe objaśnienia flag kontrolnych i ich implikacji można znaleźć na stronie Flagi kontrolne.

Moduły PAM

Istnieje kilka plików modułów PAM, które mogą być modyfikowane zgodnie z Twoimi potrzebami:

  • 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

  • Alternatywnie możesz po prostu zmodyfikować plik /etc/pam.d/sudo, jeśli chcesz używać FIDO U2F podczas korzystania z polecenia sudo.

Flagi kontrolne

Flaga kontrolna określa zachowanie modułu PAM, gdy uwierzytelnianie powiedzie się lub nie. W kroku 6 użyliśmy flagi sufficient do testowania, a następnie zmieniliśmy ją na required do egzekwowania.

Dostępne flagi kontrolne to:

  • 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: Podobne do required, jednak w przypadku, gdy określony moduł zwraca błąd, kontrola jest zwracana bezpośrednio do aplikacji, lub do nadrzędnego stosu PAM. Ta flaga może także zablokować Cię z Twojego komputera, jeśli nie masz dostępu do 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.

Ostrzeżenie

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

  • Stracisz dostęp do swojego komputera, jeśli źle skonfigurowałeś moduł PAM i użyłeś flag required lub requisite.

  • Utracisz również możliwość używania sudo, jeśli ustawiłeś Central Authentication Mapping i użyto flag required lub requisite.

  • Możesz również utracić możliwość logowania się za pomocą menedżera Gnome Display, jeśli wymuszone jest logowanie za pomocą karty inteligentnej i użyłeś flag required lub requisite. Więcej informacji można znaleźć w sekcji Rozwiązywanie problemów.

Rozwiązywanie problemów

Problemy z logowaniem do konta użytkownika przy użyciu GDM

W niektórych przypadkach, na przykład jeśli masz zainstalowany opencs-pkcs11, Gnome Display Manager (GDM) może domyślnie wymuszać logowanie kartą inteligentną, gdy tylko jakakolwiek karta inteligentna (taka jak Nitrokey) zostanie podłączona, nawet jeśli żadna karta inteligentna nigdy nie została skonfigurowana. Może to uniemożliwić zalogowanie się na konto użytkownika przy użyciu u2f. Jeśli ustawiłeś flagę kontrolną sufficient, odłącz wszystkie karty inteligentne i zaloguj się przy użyciu hasła. Aby wyłączyć wymuszanie kart inteligentnych, uruchom następujące polecenie:

$ 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