Logowanie do pulpitu i uwierzytelnianie użytkowników systemu Linux¶
Compatible Nitrokeys |
|||||||
|---|---|---|---|---|---|---|---|
✓ 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¶
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ę.Instalacja
libpam-u2fOn Ubuntu 24.04 it is possible to download directly
libpam-u2ffrom the official repos$ sudo apt install libpam-u2f
Informacja
Alternatywnie możesz zbudować
libpam-u2fz 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
Generowanie pliku konfiguracyjnego U2F.
To generate the configuration file we will use the
pamu2fcfgutility. 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,
pamu2fcfgwill append its output theu2f_keysfile 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
pamu2fcfgi 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_keysZaleca się, aby najpierw przetestować instrukcje z jednym użytkownikiem. Konfiguracja innych użytkowników zostanie dodana w sekcji 7.
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 -nlike 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
Securing the config file
Dla lepszego bezpieczeństwa, po wygenerowaniu pliku konfiguracyjnego, przeniesiemy wygenerowany plik
~/u2f_keysdo/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
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-authfile 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_u2flokalizację pliku do użycia z opcjąauthfile.If you often forget to insert the key,
promptoption makespam_u2fprintInsert 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,
cueoption will makepam_u2fprintPlease 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 lsin the terminal. After typing in your password you should be prompted with the messagePlease 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:
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,
pamu2fcfgtakes the-u <username>option, the output can be appended to theu2f_keysfile 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.
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ę
sufficientnarequired.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
sufficientnarequired. 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:
Przenieś linię konfiguracji PAM na górę **** z
/etc/pam.d/common-auth(przed innymi modułami auth)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:
Position |
Control Flag |
Authentication Mode |
Use Case |
|---|---|---|---|
Dół (po pam_unix) |
|
Second factor (testing) |
Faza bezpiecznego testowania |
Dół (po pam_unix) |
|
Drugi czynnik (wymuszony) |
Production security (main guide) |
Top (przed pam_unix) |
|
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-authfile, you will be able to use you Nitrokey for 2nd factor authentication for graphic login andsudo.If you wish to use FIDO U2F authentication solely for Gnome’s graphic login, you might prefer to modify the
/etc/pam.d/gdm-passwordAlternatywnie możesz po prostu zmodyfikować plik
/etc/pam.d/sudo, jeśli chcesz używać FIDO U2F podczas korzystania z poleceniasudo.
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 dorequired, 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. Thesufficientflag 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. Theoptionalflag is considered safe to use for testing purposes.
Ostrzeżenie
If
requiredorrequisiteis 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
requiredlubrequisite.Utracisz również możliwość używania
sudo, jeśli ustawiłeś Central Authentication Mapping i użyto flagrequiredlubrequisite.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
requiredlubrequisite. 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