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

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 Nitrokey FIDO2.

Jeśli chcesz zalogować się do komputera za pomocą Nitrokey Pro 2, Nitrokey Storage 2 i Nitrokey Start możesz odwiedzić instrukcje dostępne tutaj.

Wymagania#

  • Ubuntu 20.04 z Gnome Display Manager.

  • Nitrokey FIDO2 skonfigurowany według tych instrukcji.

Instrukcje#

Metoda GUI#

  1. W lewym dolnym rogu kliknij przycisk Show Applications i wpisz w pasku wyszukiwania następujące ustawienia:.

    img1
  2. Przewiń w dół na prawym pasku do Users.

    img2
  3. w lewym rogu kliknij przycisk Unlock i pojawi się monit o podanie hasła.

    img3
  4. Wybierz Administrator i wprowadź wybraną nazwę użytkownika i hasło.

    img4
  5. Po ukończeniu kroku 4 powinieneś być gotowy.

    img5

Metoda CLI#

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

    Można to zrobić za pomocą tych poleceń:

    $ 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ę.

    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>`__.

  2. Skonfiguruj rules do rozpoznawania Nitrokey FIDO2.

    Under /etc/udev/rules.d download 41-nitrokey.rules

    $ cd /etc/udev/rules.d/
    $ sudo wget https://raw.githubusercontent.com/Nitrokey/libnitrokey/master/data/41-nitrokey.rules
    

    I uruchom ponownie udev usługę

    $ sudo systemctl restart udev
    
  3. Instalacja libpam-u2f

    Na Ubuntu 20.04 możliwe jest pobranie bezpośrednio libpam-u2f z oficjalnych repozytoriów

    $ sudo apt install libpam-u2f
    

    Informacja

    Kliknij, aby zobaczyć więcej opcji

    • 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
    
  4. Przygotowanie katalogu

    Utwórz .config/Nitrokey/ w swoim katalogu domowym.

    $ mkdir ~/.config/Nitrokey
    

    I podłącz swój Nitrokey FIDO2.

    Po zakończeniu przygotowań, możemy rozpocząć konfigurację komputera, aby używać Nitrokey FIDO2 do uwierzytelniania 2-go czynnika przy logowaniu i sudo.

  5. Generowanie pliku konfiguracyjnego U2F.

    Do wygenerowania pliku konfiguracyjnego użyjemy narzędzia pamu2fcfg, które jest dołączone do libpam-u2f. Dla wygody, zapiszemy wyjście narzędzia bezpośrednio do pliku u2f_keys pod .config/Nitrokey. Najpierw podłącz swój Nitrokey FIDO2 (jeśli jeszcze tego nie zrobiłeś) i wprowadź następującą komendę:

    $ pamu2fcfg > ~/.config/Nitrokey/u2f_keys
    

    Po uruchomieniu powyższej komendy należy dotknąć klawisza, gdy będzie on migał. Gdy to zrobimy, pamu2fcfg dołączy swoje dane wyjściowe do u2f_keys w następującym formacie:

    <username>:Zx...mw,04...0a
    

    Uwaga, wyjście będzie znacznie dłuższe, ale wrażliwe części zostały tutaj usunięte. Dla lepszego bezpieczeństwa i po wygenerowaniu pliku konfiguracyjnego, przeniesiemy katalog .config/Nitrokey pod katalog etc/ za pomocą tej komendy:

    $ sudo mv ~/.config/Nitrokey /etc
    

    Wskazówka

    • Plik pod .config/Nitrokey musi mieć nazwę u2f_keys.

    • Zaleca się, aby najpierw przetestować instrukcje z pojedynczym użytkownikiem. W tym celu poprzednie polecenie przyjmuje opcję -u, aby określić użytkownika, jak w poniższym przykładzie:

      $ pamu2fcfg -u <username> > ~/.config/Nitrokey/u2f_keys
      
    • Dla indywidualnej konfiguracji użytkownika należy w następnym kroku wskazać na katalog domowy, lub nie włączać opcji authfile w konfiguracji PAM.

  6. Backup

    Ten krok jest opcjonalny, jednak zaleca się posiadanie zapasowego Nitrokey w przypadku utraty, kradzieży lub zniszczenia Twojego Nitrokey FIDO.

    Aby skonfigurować klucz zapasowy, powtórz powyższą procedurę i użyj pola pamu2fcfg -n. Spowoduje to pominięcie pola <username>, a dane wyjściowe można dołączyć do wiersza z twoim <username> w ten sposób:

    <username>:Zx...mw,04...0a:xB...fw,04...3f
    
  7. Modyfikuj Pluggable Authentication Module PAM.

    Ostatnim krokiem jest skonfigurowanie plików modułu PAM pod /etc/pam.d/. W tym przewodniku zmodyfikujemy plik common-auth, ponieważ obsługuje on ustawienia uwierzytelniania, które są wspólne dla wszystkich usług, ale możliwe są też inne opcje. Możesz zmodyfikować ten plik za pomocą następującego polecenia:

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

    I dodaj następujące linie na górze pliku:

    #Nitrokey FIDO2 config
    auth    sufficient pam_u2f.so authfile=/etc/Nitrokey/u2f_keys cue prompt nouserok
    

    Wskazówka

    • Ponieważ używamy Central Authentication Mapping, musimy podać pam_u2f lokalizację pliku do użycia z opcją authfile.

    • Jeśli często zapominasz włożyć klucz, prompt opcja sprawia, że pam_u2f drukuje Insert your U2F device, then press ENTER. i daje Ci szansę włożyć Nitrokey.

    • Jeśli chcesz, aby był wyświetlany monit o dotknięcie Nitrokey, cue opcja spowoduje, że pam_u2f wydrukuje Please touch the device. wiadomość.

    • nouserok zapewni, że nadal będziesz mógł się zalogować używając nazwy użytkownika i hasła, możesz chcieć to usunąć w pewnym momencie, gdy konfiguracja będzie działać i nie będziesz chciał regularnych logowań opartych na nazwie użytkownika i haśle.

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

    Możesz przetestować konfigurację wpisując sudo ls w terminalu. Powinieneś otrzymać komunikat Please touch the device. i mieć podobne wyjście w terminalu:

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

    Możesz również przetestować swoją konfigurację wylogowując się z sesji użytkownika i logując się ponownie. Podobny ekran powinien zostać wyświetlony po odłączeniu/ponownym podłączeniu Nitrokey FIDO2 i wpisaniu hasła:

    img6

Zastosowanie#

Po modyfikacji modułu PAM, będziesz mógł od razu przetestować swoją konfigurację, ale zalecane jest ponowne uruchomienie komputera i odłączenie/wyłączenie Nitrokey FIDO2.

Po prawidłowym przetestowaniu instrukcji zawartych w tym przewodniku (i utworzeniu kopii zapasowej), zalecane jest użycie flagi kontrolnej required lub requisite zamiast sufficient.

Flagi required i requisite zapewniają ściślejszą kontrolę dostępu i sprawią, że Nitrokey FIDO2 będzie niezbędny do zalogowania się i/lub korzystania ze skonfigurowanej usługi.

Jeśli potrzebujesz więcej informacji o Control Flags w linii konfiguracyjnej PAM, możesz zobaczyć ostatnią sekcję tego przewodnika, aby zrozumieć różnicę i implikacje używania każdego z nich.

Moduły PAM#

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

  • Modyfikując plik /etc/pam.d/common-auth, będziesz mógł użyć Nitrokey FIDO do uwierzytelniania drugiego czynnika dla logowania graficznego i sudo. Uwaga: common-auth powinien być zmodyfikowany przez dodanie dodatkowej linii konfiguracyjnej na końcu pliku.

  • Jeśli chcesz używać uwierzytelniania FIDO U2F wyłącznie do logowania graficznego w Gnome, możesz zmodyfikować /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#

W kroku 7 użyliśmy flagi kontrolnej sufficient aby określić zachowanie modułu PAM gdy Nitrokey jest podłączony lub nie. Jednakże możliwa jest zmiana tego zachowania poprzez użycie następujących flag kontrolnych:

  • required: To jest najbardziej krytyczna flaga. Wynik modułu musi być pomyślny, aby uwierzytelnianie mogło być kontynuowane. Ta flaga może zablokować Twój komputer, jeśli nie masz dostępu do 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: Wynik modułu jest ignorowany, jeśli się nie powiedzie. Flaga sufficient uważana za bezpieczną do celów testowych.

  • optional: Sukces lub porażka tego modułu jest ważna tylko wtedy, gdy jest to jedyny moduł w stosie związany z tym service+type. Flaga optional jest uważana za bezpieczną do użycia w celach testowych.

Ostrzeżenie

  • Jeśli ustawiono required lub requisite, niepowodzenie uwierzytelnienia U2F spowoduje niepowodzenie całego uwierzytelnienia. Niepowodzenie nastąpi, gdy skonfigurowany Nitrokey FIDO nie zostanie podłączony, zgubiony lub zniszczony.

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