Desktop-Anmeldung und Linux-Benutzerauthentifizierung

Compatible Nitrokeys

3A/C/Mini

Passkey

HSM 2

Pro 2

FIDO2

Storage 2

Start

U2F

active

active

inactive

inactive

active

inactive

inactive

active

Einführung

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.

Wenn Sie stattdessen Ihren Nitrokey als alternative Anmeldemethode verwenden möchten (Passwort ODER Nitrokey), lesen Sie Alternative Authentifizierungsmethode nachdem Sie die Hauptanleitung abgeschlossen haben.

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.

Warnung

Die folgende Anleitung kann Sie möglicherweise von Ihrem Computer aussperren. Sie sollten sich dieser Risiken bewusst sein, denn es wird empfohlen, die folgenden Anweisungen zuerst auf einem zweiten Computer oder nach einer vollständigen Sicherung anzuwenden.

Nach der Konfiguration der PAM-Module verlieren Sie möglicherweise den Zugriff auf Ihre Daten.

Anforderungen

  • Ubuntu 24.04 with Gnome Display Manager (GDM).

Anweisungen

  1. Erstellen Sie einen Backup-Benutzer und geben Sie ihm Root-Rechte

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

    Falls Sie es vorziehen, U2F für einen einzelnen Benutzer einzurichten, und aus Ihrer Benutzersitzung ausgesperrt werden, können Sie sich trotzdem mit dem <backup_user> anmelden und mit der Wartung fortfahren.

  2. Install libpam-u2f

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

    $ sudo apt install libpam-u2f
    

    Bemerkung

    • Alternativ können Sie libpam-u2f aus Git erstellen.

    • Um zu überprüfen, ob die Bibliothek richtig installiert ist, geben Sie den folgenden Befehl ein:

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

    Die Ausgabe sollte in etwa wie folgt aussehen:

    /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. Generieren Sie die U2F-Konfigurationsdatei

    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
    

    Beachten Sie, dass diese Ausgabe nicht direkt von pamu2fcfg erzeugt wurde und keine sensiblen Informationen enthält. Sie ist lediglich dazu gedacht, das erwartete Format und die Länge der Ausgabe zu zeigen.

    Tipp

    • The file must be named u2f_keys

    • Es wird empfohlen, die Anweisungen zunächst mit einem einzelnen Benutzer zu testen. Die Konfiguration anderer Benutzer wird in Abschnitt 7 hinzugefügt.

  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

    Um die Sicherheit zu erhöhen, verschieben wir nach der Erstellung der Konfigurationsdatei die erstellte Datei ~/u2f_keys nach /etc/Nitrokey/ und ändern die Zugriffsrechte mit diesen Befehlen:

    $ sudo mkdir /etc/Nitrokey
    $ sudo mv ~/u2f_keys /etc/Nitrokey/
    $ sudo chmod 644 /etc/Nitrokey/u2f_keys
    
  6. Modifizieren Sie das steckbare Authentifizierungsmodul PAM

    Konfigurieren Sie die PAM-Moduldateien unter /etc/pam.d/. Dies ist eine Testphase - Schritt 8 wird die Konfiguration durchsetzen, sobald Sie bestätigen, dass sie funktioniert.

    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
    

    Tipp

    • Wir verwenden „sufficient“ für Tests und werden in Schritt 8 zu „required“ wechseln.

    • Da wir das Central Authentication Mapping verwenden, müssen wir pam_u2f den Ort der zu verwendenden Datei mit der Option authfile mitteilen.

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

    Bemerkung

    Warum die Platzierung von unten? PAM verarbeitet Module von oben nach unten. Durch die Platzierung der U2F-Konfiguration am unteren Ende wird sichergestellt, dass die Kennwortauthentifizierung zuerst geprüft wird, wodurch ein Second-Factor-Workflow (Kennwort + U2F) entsteht.

    Für alternative Authentifizierungsoptionen (Kennwort ODER Nitrokey) und ausführliche Erklärungen, wie Zeilenposition und Steuerflags die Authentifizierung beeinflussen, siehe Alternative Authentifizierungsmethode.

    Nachdem wir die common-auth modifiziert haben, können wir die Datei speichern und beenden.

    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

    Nachdem Sie bestätigt haben, dass die Authentifizierung mit Ihrem Nitrokey funktioniert hat, können Sie die U2F-Konfigurationsdatei für die anderen Benutzer auf Ihrem System einrichten.

    Warnung

    Wenn Sie nicht alle Benutzer in der U2F-Konfigurationsdatei einrichten und mit der Erzwingung der Nitrokey-Authentifizierung in Schritt 8 fortfahren, können Sie sich nicht mit einem nicht konfigurierten Benutzer anmelden!

    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
    

    Um einen Backup-Nitrokey zu diesem Benutzer hinzuzufügen, schließen Sie den Backup-Nitrokey an und gehen Sie genauso vor wie beim Hauptbenutzer:

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

    Danach wiederholen Sie diesen Vorgang für alle Benutzer Ihres Systems.

  8. Enforcing Nitrokey second factor authentication

    Sie haben vielleicht bemerkt, dass die Authentifizierung mit dem Nitrokey noch nicht erzwungen wurde. Nachdem wir bestätigt haben, dass die Authentifizierung mit dem Nitrokey funktioniert, können wir sie erzwingen, indem wir das Flag sufficient in required ändern.

    Warnung

    Bevor Sie mit diesem Schritt fortfahren, vergewissern Sie sich, dass Sie alles haben:

    • Testen Sie, ob die Authentifizierung mit dem Nitrokey tatsächlich funktioniert, sonst können Sie den Zugriff auf Ihren Computer verlieren.

    • Richten Sie einen Backup-Nitrokey ein. Wenn Sie Ihren Nitrokey verlieren oder zerbrechen, verlieren Sie den Zugang zu Ihrem Computer!

    Vorsichtig vorgehen!

    Zu diesem Zweck müssen Sie die Konfigurationsdatei PAM bearbeiten:

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

    In der Zeile, die Sie zuvor am Ende der Datei hinzugefügt haben, ändern Sie das Wort sufficient in required. Es sollte wie folgt aussehen:

    #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

Wenn Sie es vorziehen, Ihren Nitrokey als Alternative zu Ihrem Passwort zu verwenden (Passwort ODER Nitrokey), können Sie dies stattdessen konfigurieren:

Configuration Steps:

  1. Verschieben Sie die PAM-Konfigurationszeile in den oberen Bereich **** von /etc/pam.d/common-auth (vor andere auth-Module)

  2. Behalten Sie die sufficient Steuerflagge

Dies ermöglicht die Authentifizierung mit einem der beiden Faktoren allein. Beachten Sie, dass dies weniger Sicherheit bietet als die Authentifizierung mit dem zweiten Faktor.

Verstehen der Authentifizierungsmodi

Die Kombination aus Zeilenposition und Steuerflagge bestimmt Ihren Authentifizierungsmodus:

Authentication Modes

Position

Control Flag

Authentication Mode

Use Case

Unten (nach pam_unix)

sufficient

Second factor (testing)

Sichere Testphase

Unten (nach pam_unix)

required

Zweiter Faktor (erzwungen)

Production security (main guide)

Oben (vor pam_unix)

sufficient

Alternative factor

Convenience (password OR key)

Wie PAM funktioniert:

PAM verarbeitet die Module sequentiell von oben nach unten. Das Kontrollflag bestimmt, wie sich Erfolg oder Misserfolg auf die gesamte Authentifizierung auswirken:

  • sufficient“: Bei Erfolg ist die Authentifizierung abgeschlossen; ein Fehlschlag wird ignoriert, wenn andere Module erfolgreich sind

  • required“: Erfolg ist obligatorisch; Misserfolg führt zum Scheitern der gesamten Authentifizierung

Was das für Sie bedeutet:

Alternative Authentifizierung (oben + ausreichend):

  • Sie können sich mit Ihrem Passwort anmelden ODER nur mit Ihrem Nitrokey

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

  • Wenn die Nitrokey-Authentifizierung fehlschlägt oder übersprungen wird, funktioniert das Passwort trotzdem

  • Dies ist bequemer, aber weniger sicher als die Authentifizierung mit dem zweiten Faktor.

Security implications:

  • Ein Angreifer mit Ihrem Passwort kann sich ohne Ihren Nitrokey anmelden

  • Ein Angreifer, der physischen Zugang zu Ihrem Nitrokey hat, kann sich ohne Ihr Passwort anmelden

  • Verwenden Sie dies nur, wenn Komfort wichtiger ist als maximale Sicherheit.

Ausführliche Erläuterungen zu den Kontrollkennzeichen und ihren Auswirkungen finden Sie unter Kontrollkennzeichen.

PAM-Module

Es gibt mehrere PAM-Modul-Dateien, die Sie nach Ihren Bedürfnissen anpassen können:

  • 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

  • Alternativ können Sie auch einfach die Datei /etc/pam.d/sudo modifizieren, wenn Sie FIDO U2F bei der Verwendung des sudo-Befehls verwenden möchten.

Kontrollflaggen

Das Kontrollflag bestimmt, wie sich das PAM-Modul verhält, wenn die Authentifizierung erfolgreich ist oder fehlschlägt. In Schritt 6 haben wir zum Testen das Flag sufficient verwendet und dann zur Durchsetzung auf required gewechselt.

Die verfügbaren Kontrollflags sind:

  • 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: Ähnlich wie required, jedoch wird in dem Fall, dass ein bestimmtes Modul einen Fehler zurückgibt, die Kontrolle direkt an die Anwendung oder an den übergeordneten PAM-Stack zurückgegeben. Dieses Flag kann Sie auch aus Ihrem Computer aussperren, wenn Sie keinen Zugriff auf den Nitrokey haben.

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

Warnung

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

  • Sie werden den Zugriff auf Ihren Computer verlieren, wenn Sie das PAM-Modul falsch konfiguriert und die Flags required oder requisite verwendet haben.

  • Sie werden auch die Möglichkeit verlieren, sudo zu benutzen, wenn Sie das Central Authentication Mapping einrichten und die Flags required oder requisite benutzen.

  • Sie könnten auch die Möglichkeit verlieren, sich mit dem Gnome Display Manager anzumelden, wenn die Smartcard-Anmeldung erzwungen wird und Sie die Flags required oder requisite verwendet haben. Siehe Fehlerbehebung für weitere Informationen.

Fehlersuche

Probleme bei der Anmeldung im Benutzerkonto mit GDM

In einigen Fällen, z.B. wenn Sie opencs-pkcs11 installiert haben, kann der Gnome Display Manager (GDM) standardmäßig die Anmeldung mit einer Smartcard erzwingen, sobald eine Smartcard (z.B. Ihr Nitrokey) eingesteckt wird, auch wenn noch keine Smartcard konfiguriert wurde. Dies kann Sie daran hindern, sich mit u2f in Ihr Benutzerkonto einzuloggen. Wenn Sie das Kontrollflag sufficient gesetzt haben, ziehen Sie alle Smartcards ab und melden Sie sich mit Ihrem Passwort an. Um die Smartcard-Erzwingung zu deaktivieren, führen Sie den folgenden Befehl aus:

$ 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