Mo 1. Mai 2023, 22:58
Keine Panik!
Der erste Eindruck vom Umfang dieses Wikis täuscht. Im Allgemeinen sind nur drei einfache Arbeitsschritte nötig, um eine passwortlose Anmeldung am Linux zu realisieren.
Da es aber gerade beim Thema Sicherheit von Vorteil ist, zu wissen, was man tut, und ich noch einige Sonderfälle beim Umgang mit einem FIDO2-Key vorstellen wollte, ist das Wiki deutlich umfangreicher ausgefallen, als ursprünglich geplant …
Inhaltsverzeichnis
- 1 FIDO2
- 2 PAM
- 3 1. Installation der notwendigen Programmpakete
- 4 2. Registrieren des FIDO2-Keys
- 5 3. PAM-Konfiguration anpassen
- 6 3.1 PAM unter Debian, Ubuntu und Co konfigurieren
- 7 3.2 PAM unter Manjaro konfigurieren
- 8 3.3 PAM unter OpenSuse konfigurieren
- 9 3.4 PAM unter Fedora konfigurieren
- 10 Tipps und Tricks im Umgang mit FIDO2-Keys
- 11 Hife, ich habe mich ausgesperrt!
FIDO2
FIDO (Fast IDentity Online) ist ein offener und lizenzfreier Standard mit dem Ziel, Passwörter für die Authentifizierung zu ersetzen.
Die Authentifizierung mit FIDO basiert auf kryptographischen Schlüsseln und ist dabei sicherer und einfacher in der Anwendung als Passwörter.
FIDO2 ist eine Weiterentwicklung von FIDO, die neben der klassischen Zwei-Faktor-Authentifizierung (2FA) auch passwortlose Anmeldung ermöglicht.
Grundlage einer FIDO2-Authentifizierung ist ein sogenannter Authentikator, ein USB-Stick mit Sicherheits-Chip, in diesem Wiki kurz „FIDO2-Key“ genannt.
Passende FIDO2-Keys gibt es z.B. bei Yubico, Nitrokey und SoloKey.
Nitrokey
Yubico
SoloKeys
Wer sich intensiver mit FIDO befassen möchte, findet im Internet zahlreiche Artikel zum Thema, wie z.B.:
fidoalliance.org
computerwoche.de
heise.de
Entwickelt wurde FIDO2 zur Anmeldung bei Online-Diensten, doch auch die Anmeldung am lokalen Desktop ist damit möglich. Hierbei kommt, statt der für Online-Authentifizierungen notwendigen WebAuthn-Spezifikation, das PAM (Pluggable Authentication Modules) zum Einsatz.
PAM
PAM ist bei unixoiden Betriebssystemen (wie Linux) eine zentrale Schnittstelle für Authentifizierungs-Anforderungen. Somit müssen Softwareentwickler nicht für jede Anwendung den Code für die Benutzeranmeldung neu schreiben, sondern können diese Aufgabe an PAM delegieren.
Das Zusammenspiel von FIDO2 und PAM macht die passwortlose Anmeldung an Linux besonders einfach.
Notwendige Arbeitsschritte zur Einrichtung
Die Einrichtung einer Anmeldung mithilfe eines FIDO2-Keys teilt sich in drei Schritte auf:
- Installation der notwendigen Programmpakete
- Registrieren des FIDO2-Keys für den Benutzer am PC
- PAM-Konfiguration anpassen
Obwohl die Einrichtung erfreulich einfach ist, gibt es – vor allem beim Bearbeiten der Konfigurationsdateien – einige Stolperfallen zu beachten. Andernfalls könnte man sich im schlimmsten Fall aus seinem eigenen PC aussperren. Daher ist es empfehlenswert, die ersten Gehversuche mit FIDO an einem Test-PC oder in einer virtuellen Maschine zu üben. (Siehe auch Abschnitt „Hife, ich habe mich ausgesperrt!”.)
1. Installation der notwendigen Programmpakete
Zunächst muss das PAM-Modul für FIDO installiert werden. Dieses ist bei den gängigen Distributionen in den Repositorys enthalten.
Debian, Ubuntu und Co.
Bei Debian und den darauf basierenden Distributionen sind folgende Programmpakete über die Repositories zu installieren.
sudo apt install libpam-u2f pamu2fcfg fido2-tools -y
Das Paket `libpam-u2f` enthält das PAM-Modul `pam_u2f.so` für die Authentifizierung per FIDO2. Das PAM-Modul findet sich im Verzeichnis `/usr/lib/x86_64-linux-gnu/security`. Das Helper-Tool `pamu2fcfg` hilft bei der Registrierung des FIDO2-Sticks am System. Das Programmpaket`fido2-tools` enthält Programme zum Verwalten des FIDO2-Keys (Siehe Abschnitt „FIDO2-Key mit PIN schützen”). Mit dem Parameter `-y` werden die Pakete ohne weitere Rückfragen installiert.
Manjaro
Bei Manjaro werden die notwendigen Pakete über folgenden Befehl installiert.
sudo pacman -Syu pam-u2f --noconfirm
Bei Rolling-Releases (wie z.B. Manjaro) sollten neue Programme nur installiert werden, wenn das Betriebssystem zuvor auf den neuesten Stand gebracht wurde. Der Parameter `-Syu` stellt dies sicher. Der Parameter `–noconfirm` bewirkt eine Installation aller Pakete ohne weitere Rückfragen. Wer das nicht will, lässt diesen Parameter einfach weg.
Das Paket `pam-u2f` enthält neben dem PAM-Modul auch das Helper-Tool. Über die Paketabhängigkeiten wird zusätzlich `libfido2` installiert. Es ist verantwortlich für die Kommunikation mit dem FIDO2 Gerät über das CTAP-Protokoll und enthält u.a. `fido2-token`.
OpenSuse
sudo zypper --non-interactive install pam_u2f libfido2-utils
Das Paket `pam-u2f` enthält neben dem PAM-Modul auch das Helper-Tool `pamu2fcfg`. Das Paket `libfido2-utils` enthält u.a. das Verwaltungstool `fido2-token`.
Der Parameter `–non-interactive` startet die Installation ohne weitere Nachfragen.
Fedora
sudo dnf install pam-u2f pamu2fcfg fido2-tools -y
Das Paket `pam-u2f` enthält das PAM-Modul `pam_u2f.so`. Das Helper-Tool `pamu2fcfg` hilft bei der Registrierung des FIDO2-Sticks am System. Das Programmpaket`fido2-tools` enthält Programme zum Verwalten des FIDO2-Keys (Siehe Abschnitt „FIDO2-Key mit PIN schützen”). Mit dem Parameter `-y` werden die Pakete ohne weitere Rückfragen installiert.
2. Registrieren des FIDO2-Keys
Ein FIDO2-Key ist nach dem Neukauf sofort einsatzbereit. Es ist nicht notwendig, vor der Nutzung manuell ein Schlüsselpaar zu generieren, wie es z.B bei klassischen SmardCards notwendig ist.
Er muss lediglich am Zielsystem (in unserem Fall der lokale PC) für die Authentifizierung registriert werden.
Dazu wird mit dem installierten Helper-Tool `pamu2fcfg` ein Benutzerkonto mit den Schlüsseldaten des FIDO2-Keys verknüpft.
Zuvor wird mit folgendem Kommando ein Verzeichnis für die Schlüsseldaten erstellt.
sudo mkdir /etc/fido2
Danach erfolgt die eigentliche Registrierung – die Verknüpfung von Benutzerkonto und FIDO2-Key. Nach dem Anstecken des FIDO2-Keys an einem USB-Port muss folgender Befehl mit dem gewünschten Benutzerkonto (also nicht root) ausgeführt werden. Zur Bestätigung der Registrierung muss dabei der FIDO2-Key kurz berührt werden. (Ist der FIDO2-Key mit einer PIN geschützt, muss diese zusätzlich eingegeben werden. Siehe auch Abschnitt „FIDO2-Key mit PIN schützen“.)
pamu2fcfg | sudo tee -a /etc/fido2/u2f_keys
`pamu2fcfg` gibt die Schlüsseldaten lediglich auf dem Bildschirm aus. Diese werden daher mit dem Pipe-Kommando (`|`) an `tee` übergeben, welches die Schlüsseldaten zusätzlich an die Registrierungsdatei `/etc/fido2/u2f_keys` anfügt (`-a`).
Weitere Infos unter:
pamu2fcfg manpage
3. PAM-Konfiguration anpassen
Nach der Registrierung des FIDO2-Keys am PC, muss dem Linux über die PAM- Konfigurationsdatei noch mitgeteilt werden, für welchen Anmeldeprozess (Anmeldung am Desktop, sudo, usw.) künftig der FIDO2-Key genutzt werden soll.
Die PAM-Konfigurationsdateien befinden sich bei allen Distributionen im Verzeichnis
/etc/pam.d/
Jeder Anmelde-Dienst, welcher über PAM gesteuert wird, ist in diesem Verzeichnis mit einer Konfigurationsdatei vertreten.
Bei einigen Dateien ist die Zugehörigkeit offensichtlich, wie z.B. „sudo“. Die Identifikation der Konfigurationsdateien zur Anmeldung am Linux-Desktop erfordern hingegen etwas Hintergrundwissen – mehr dazu im Abschnitt „PAM für Anmeldung am Desktop konfigurieren“.
Der Verweis auf das PAM-Modul muss in der gewünschten PAM-Datei an der richtigen Stelle eingefügt werden:
auth sufficient pam_u2f.so authfile=/etc/fido2/u2f_keys cue [cue_prompt=Bitte den FIDO-Key berühren ...]
Der Service-Typ „auth“ weist PAM an, dass eine Benutzer-Authentifizierung durchgeführt werden soll. Das Control-Flag „sufficient“ beendet PAM bei einer erfolgreichen Authentifizierung, alle nachfolgenden Konfigurationszeilen werden ignoriert. „pam_u2f.so“ ist das PAM-Modul, welches mit dem FIDO2-Key kommuniziert und „authfile“ benennt die Datei mit den FIDO2-Schlüsseldaten. Der Schalter „cue“ erzeugt während einer Anmeldung einen Hinweis, der zum Berühren des FIDO2-Keys auffordert. Über den Parameter „cue_prompt“ kann ein individueller Hinweistext hinterlegt werden. Die eckigen Klammen um cue_prompt sind notwendig, wenn der Hinweistext Leerzeichen enthält.
Wichtig zu wissen ist, dass Änderungen an den PAM-Konfigurationsdateien sofort nach dem Speichern aktiv werden. Unterlaufen bei der PAM-Konfiguration Fehler, kann man sich unter Umständen aus dem eigenen System aussperren. Es ist daher empfehlenswert, die PAM-Datei zu speichern, ohne den Texteditor zu schließen. Sollte die Anmeldung beim Test nicht wie erwartet funktionieren, kann mit dem noch geöffneten Texteditor die PAM-Datei korrigiert werden. Weitere Tipps finden Sie im Abschnitt „Hife, ich habe mich ausgesperrt!“
Die hier vorgestellten Anpassungen der PAM-Datei sind jedoch unkritisch. Scheitert die Anmeldung per FIDO2-Key, erscheint die übliche Abfrage des Benutzer-Passworts.
PAM für Anmeldung am Desktop konfigurieren
Der Displaymanager, auch Loginmanager genannt, stellt eine graphische Umgebung für die Benutzeranmeldung zur Verfügung. (Nicht zu verwechseln mit der Desktopumgebung, wie z.B. KDE, Gnome, XFCE, usw.)
Die bekanntesten Displaymanager:
LightDM Light Display Manager (XFCE)
GDM Gnome Display Manager (Gnome)
SDDM Simple Desktop Display Manager (KDE)
Für jede Desktopumgebung ist ein bestimmter Displaymanager üblich. Diese Beziehung ist jedoch nicht fest, sondern kann individuell geändert werden. Welcher Displaymanager verwendet wird, kann mit folgendem Kommando ausgelesen werden:
systemctl status display-manager
Das Ergebnis steht in der ersten Ausgabezeile, z.B.:
● lightdm.service - Light Display Manager
In diesem Fall wird also der Displaymanager LightDM für die graphische Anmeldung am Linux verwendet, wie es z.B. bei Xubuntu der Fall ist.
Die PAM-Dateien für die verschiedenen Displaymanager lauten:
# LightDM
/etc/pam.d/lightdm
# GDM
/etc/pam.d/gdm-password
# GDM bei OpenSuse
/etc/pam.d/gdm
# SDDM
/etc/pam.d/sddm
3.1 PAM unter Debian, Ubuntu und Co konfigurieren
PAM-Datei für sudo (/etc/pam.d/sudo)
Die PAM-Konfigurationsdatei für sudo ist unschwer am Dateinamen `/etc/pam.d/sudo` zu erkennen. Öffnen Sie die Datei (als root) mit einem Texteditor:
sudo nano /etc/pam.d/sudo
Direkt oberhalb der Zeile `„@include common-auth“` wird die Konfigurationszeile für FIDO2 eingefügt.
auth sufficient pam_u2f.so authfile=/etc/fido2/u2f_keys cue [cue_prompt=Bitte den FIDO-Key berühren ...]
@include common-auth
Nach dem Speichern der Datei /etc/pam.d/sudo öffnen Sie zum Test ein neues Terminal und geben zum Test folgendes Kommando ein:
sudo bash
Der FIDO2-Key beginnt zu blinken, um Sie zur Berührung aufzufordern. Zusätzlich erscheint im Terminal die Aufforderung: „Bitte den FIDO-Key berühren …“.
Sobald die den FIDO2-Key berühren, öffnet sich die root-Shell.
Wird der FIDO2-Key nicht innerhalb von 30 Sekunden berührt, interpretiert PAM den FIDO2-Key als nicht vorhanden und fordert daraufhin ganz klassisch zur Eingabe des Benutzerpassworts auf.
PAM-Datei für TTY-Terminal (/etc/pam.d/login)
Zur Steuerung der Anmeldung an einem TTY-Terminal dient die PAM-Datei /etc/pam.d/login. Hier muss – ebenso wie in /etc/pam.d/sudo – die Zeile für die FIDO2-Key direkt oberhalb von „@include common-auth“ eingefügt werden.
auth sufficient pam_u2f.so authfile=/etc/fido2/u2f_keys cue [cue_prompt=Bitte den FIDO-Key berühren ...]
@include common-auth
Nach dem Speichern von /etc/pam.d/login öffnen Sie zum Test ein TTY-Terminal mit der Tastenkombination STRG + ALT + F3. Mit STRG + ALT + F7 kommen Sie zurück zur graphischen Desktop.
PAM-Datei für Anmeldung am graphischen Desktop
Auch bei den verschiedenen PAM-Dateien für die Displaymanager muss die Konfigurationszeile für FIDO2 direkt oberhalb der Zeile „@include common-auth” eingefügt wenden.
auth sufficient pam_u2f.so authfile=/etc/fido2/u2f_keys cue [cue_prompt=Bitte den FIDO-Key berühren ...]
@include common-auth
Welche PAM-Datei Sie anpassen müssen, ist im Abschnitt „PAM für Anmeldung am Desktop konfigurieren“ weiter oben beschrieben.
Im folgenden Bild, beispielhaft für /etc/pam.d/lightdm
Zum Test genügt das Abmelden vom graphischen Desktop. Der Anmelde-Dialog des Displaymanagers fordert nun zum Berühren des FIDO2-Keys auf.
Der Hinweis des des Displaymanagers LightDM „Bitte ihr Passwort eingeben…“ ist irreführend und muss ignoriert werden, da er nicht zum Erfolg führt.
Einfach den FIDO2-Key der Debian-Konfiguration. berühren und auf die Schaltfläche „Anmelden“ klicken.
Es empfiehlt sich, zum Displaymanager LightDM zusätzlich das Programmpaket „slick-greeter” zu installieren und Debian neu zu starten. Danach ist der Umgang mit dem FIDO2-Key unter LightDM komfortabler und der Anmeldedialog sieht moderner aus.
sudo apt-get install slick-greeter
PAM-Datei common-auth
Die Datei /etc/pam.d/common-auth definiert grundlegende gemeinsame Authentifizierungsmethoden für das gesamte System. Die meisten Konfigurationsdateien für die einzelnen Dienste inkludieren über das Kommando „@include common-auth“ diese Grundeinstellungen. Fügt man die Konfigurationszeile für den FIDO2-Key in /etc/pam.d/common-auth ein, ist eine Anpassung der individuellen PAM-Dateien (sudo, login, lightdm, etc.) nicht mehr notwendig.
Dabei sollte jedoch beachtet werden, dass alle /etc/pam.d/common-* Dateien auch über das Programm pam-auth-update verwaltet werden können.
In `/etc/pam.d/common-auth` als erste Zeile Einfügen:
auth sufficient pam_u2f.so authfile=/etc/fido2/u2f_keys cue [cue_prompt=Bitte den FIDO-Key berühren ...]
3.2 PAM unter Manjaro konfigurieren
Bei Manjaro wird die Zeile für den FIDO2-Key in den PAM-Dateien /etc/pam.d/sudo und /etc/pam.d/login und der Datei für den Displaymanager (siehe Abschnitt „PAM für Anmeldung am Desktop konfigurieren“ weiter oben) als zweite Zeile nach „#%PAM-1.0“ eingefügt.
#%PAM-1.0
auth sufficient pam_u2f.so authfile=/etc/fido2/u2f_keys cue [cue_prompt=Bitte den FIDO-Key berühren ...]
Wie bei Debian kann auch bei Manjaro zum Test ein TTY-Terminal mit der Tastenkombination STRG + ALT + F3 geöffnet und mit STRG + ALT + F7 zum graphischen Desktop zurückgekehrt werden.
Nutzen Sie bei Manjaro den Displaymanager „LightDM”, empfiehlt sich zusätzlich das Programmpaket „lightdm-slick-greeter“ zu installieren. Siehe dazu auch den Abschnitt „PAM-Datei für Anmeldung am graphischen Desktop” unterhalb des Abschnitts „3.1 PAM unter Debian, Ubuntu und Co konfigurieren”.
sudo pacman -Syu lightdm-slick-greeter
PAM-Datei system-auth
Wie bei Debian mit „common-auth” kann auch bei Manjaro alternativ zu den einzelnen PAM-Dateien eine zentrale Konfigurationsdatei angepasst werden. Bei Manjaro lautet diese Datei:
/etc/pam.d/system-auth
Auch hier wird die Zeile für den FIDO2-Key als zweite Zeile nach „#%PAM-1.0“ eingefügt.
3.3 PAM unter OpenSuse konfigurieren
Bei OpenSuse wird die Zeile für den FIDO2-Key in den PAM-Dateien /etc/pam.d/sudo und /etc/pam.d/login und der Datei für den Displaymanager /etc/pam.d/gdm als zweite Zeile nach „#%PAM-1.0“ eingefügt. (Siehe auch Abschnitt „PAM für Anmeldung am Desktop konfigurieren“ weiter oben.)
#%PAM-1.0
auth sufficient pam_u2f.so authfile=/etc/fido2/u2f_keys cue [cue_prompt=Bitte den FIDO-Key berühren ...]
Damit der FIDO2-Key für sudo genutzt werden kann, muss er zusätzlich für das Konto „root“ registriert werden. Für Details siehe auch Abschnitt „Weitere Benutzerkonten registrieren“.
echo -e '\r' | sudo tee -a /etc/fido2/u2f_keys && pamu2fcfg -u root | sudo tee -a /etc/fido2/u2f_keys
Da in der Registrierungsdatei `/etc/fido2/u2f_keys` die Registrierung für jedes Nutzerkonto in einer eigenen Zeile stehen muss, fügt das Kommando `echo -e ‚\r‘ | sudo tee -a /etc/fido2/u2f_keys` zunächst einen Zeilenvorschub „CR” (Carriage Return) an, bevor mit `pamu2fcfg -u root | sudo tee -a /etc/fido2/u2f_keys` der FIDO2-Key für das Konto „root“ registriert wird. (Der Operator `&&` ist nötig, um die beiden Befehle zu einer Kommandozeile zu verbinden).
In der Registrierungsdatei `/etc/fido2/u2f_keys` ist danach der FIDO2-Key nicht nur für das normale Nutzerkonto (im folgenden Bildschirmfoto „adam”), sondern auch für das Konto „root” registriert.
Zum Test der Konfiguration in /etc/pam.d/login kann bei OpenSuse ein TTY-Terminal mit der Tastenkombination STRG + ALT + F3 geöffnet werden. Mit STRG + ALT + F2 wird zum graphischen Desktop zurückgekehrt.
PAM-Datei common-auth
Die PAM-Datei für die systemweite Authentifizierung lautet bei OpenSuse /etc/pam.d/common-auth.
Im Originalzustand von OpenSuse ist common-auth jedoch keine Datei, sondern ein Link auf /etc/pam.d/common-auth-pc. Eigene Änderungen an /etc/pam.d/common-auth landen wegen der Verlinkung in der Datei /etc/pam.d/common-auth-pc. Bei einem Update wird die Datei /etc/pam.d/common-auth-pc überschrieben, alle persönlichen Einstellungen gehen dabei verloren. Darum muss vor eigenen Anpassungen der Link gelöscht und eine eigenständige Datei aus common-auth-pc erstellt werden.
sudo rm common-auth
sudo cp common-auth-pc common-auth
Die eigenständige Datei common-auth wird bei einem Update nicht angetastet, die persönlichen Anpassungen bleiben somit erhalten.
Siehe auch: Configuring PAM common files manually
3.4 PAM unter Fedora konfigurieren
Bei Fedora wird die Zeile für den FIDO2-Key in den PAM-Dateien /etc/pam.d/sudo und /etc/pam.d/login als zweite Zeile nach „#%PAM-1.0“ eingefügt.
#%PAM-1.0
auth sufficient pam_u2f.so authfile=/etc/fido2/u2f_keys cue [cue_prompt=Bitte den FIDO-Key berühren ...]
Zum Test der Konfiguration in /etc/pam.d/login kann bei Fedora ein TTY-Terminal mit der Tastenkombination STRG + ALT + F3 geöffnet werden. Mit STRG + ALT + F2 wird zum graphischen Desktop zurückgekehrt.
Die PAM-Datei für den GDM Displaymanager des Gnome Desktops lautet
/etc/pam.d/gdm-password
Die Konfigurationszeile für den FIDO2-Key wird hier als zweite Zeile eingefügt.
Der Anmelde-Dialog des Displaymanagers fordert nun zum Berühren des FIDO2-Keys auf.
PAM-Datei system-auth
Auch bei Fedora gibt es mit „/etc/pam.d/system-auth” eine zentrale PAM-Datei für die systemweite Authentifizierung. Diese wird jedoch mit dem Tool „authselect” verwaltet und sollte nicht manuell bearbeitet werden, da manuelle Anpassungen bei Updates überschrieben werden.
Siehe auch Configuring user authentication using authselect
Tipps und Tricks im Umgang mit FIDO2-Keys
FIDO2-Key mit PIN schützen
mit CLI-Tool
Um im Falle eines Verlusts des FIDO2-Keys Missbrauch zu verhindern, sollte der Zugriff zu den gespeicherten Schlüsseln mit einer PIN geschützt werden.
Zum Verwalten des FIDO2-Keys steht das Programm fido2-tools zur Verfügung. Falls noch nicht geschehen, kann es unter Debian aus den Repositories installiert werden
sudo apt install fido2-tools -y
Mit dem Parameter -L wird der angeschlossene FIDO2-Key angezeigt.
fido2-token -L
In diesem Beispiel ist ein „Nitrokey 3” über die Gerätedatei /dev/hidraw1 ansprechbar.
Eine PIN wird mit der Option -S gesetzt. Angesprochen wird der FIDO2-Key über die Gerätedatei, welche zuvor mit dem Parameter -L ermittelt wurde.
fido2-token -S /dev/hidraw1
Nach der Vergabe einer PIN muss jeder Zugriff auf die geheimen Schlüssel des FIDO2-Keys (z.B. bei der Registrierung des FIDO2-Keys für einen Nutzer) mit der PIN bestätigt werden.
Die Option -C ermöglicht das Ändern einer PIN.
fido2-token -C /dev/hidraw1
Zunächst muss mit der alten PIN der Zugriff freigeschaltet werden, danach ist die neue PIN einzugeben.
fido2-token ermöglicht mit der Option -R das Zurücksetzen des FIDO2-Keys auf Werkseinstellungen.
Beim Zurücksetzen werden alle Schlüsseldaten und die PIN gelöscht! Zuvor müssen unbedingt alle Konten, für deren Anmeldung der FIDO2-Key bisher verwendet wurde, auf alternative Authentifizierungen umgestellt werden.
fido2-token -R /dev/hidraw1
Das Zurücksetzen ist nur innerhalb der ersten fünf Sekunden nach dem Einstecken möglich und wird ohne weitere Rückmeldung durchgeführt. Ruft man das Kommando zu spät auf, erhält man statt dessen eine Fehlermeldung.
fido2-token: fido_dev_reset: FIDO_ERR_NOT_ALLOWED
mit GUI
Wer zum Verwalten der PIN ein graphisches Programm bevorzugt, kann dazu die Browser Chrome/Chromium zu verwenden.
Gestartet wird die Verwaltung der Sicherheitsschlüssel in der Adresszeile mit dem Kommando.
chrome://settings/securityKeys
Mit einem Klick auf die Option PIN erstellen kann die PIN gesetzt bzw. geändert werden.
Mit einem Klick auf die Option Sicherheitsschlüssel zurücksetzen kann der FIDO2-Key auf die Werkseinstellungen zurückgesetzt werden.
Beim Zurücksetzen werden alle Schlüsseldaten und die PIN gelöscht! Zuvor müssen unbedingt alle Konten, für deren Anmeldung der FIDO2-Key bisher verwendet wurde, auf alternative Authentifizierungen umgestellt werden.
mit YubiKey Manager
Ein YubiKey kann auch mit dem herstellereigenen Programm „YubiKey Manager“ verwaltet werden.
yubikey-manager
Falsche PIN eingeben
Wird die PIN dreimal nacheinander falsch eingegeben, ist der FIDO2-Key erst wieder nutzbar, nachdem er aus- und wieder eingesteckt wurde.
Wird die PIN insgesamt achtmal nacheinander falsch eingegeben, bleibt der FIDO2-Key dauerhaft gesperrt. Erst nach dem Zurücksetzen auf Werkseinstellungen kann er wieder genutzt werden. Dabei gehen aber PIN und alte Schlüssel verloren. Eine Anmeldung an Nutzerkonten, die mit den alten Schlüsseldaten registriert wurden, ist dann natürlich nicht mehr möglich.
Aufbau der Registrierungsdatei /etc/fido2/u2f_keys
Kenntnisse über den Aufbau der Registrierungsdatei sind besonders dann hilfreich, wenn zu einem Nutzerkonto mehrere FIDO2-Keys, oder zusätzliche Nutzerkonten mit FIDO2-Keys registriert werden sollen.
Das Helper-Tool `pamu2fcfg` gibt nur einen rudimentären Registrierungs-String aus, ohne sich um die korrekte Syntax der Registrierungsdatei zu kümmern. Daher sind unter Umständen manuelle Korrekturen notwendig.
In der Registrierungsdatei werden Anwendernamen mit den dazugehörigen Schlüsseldaten verknüpft. Für jeden Anwender wird eine Zeile mit den Schlüsseldaten erstellt. In dieser Zeile können die Schlüsseldaten eines oder mehrerer FIDO2-Keys registriert werden. Anwendername und Schlüsseldaten sind durch Doppelpunkte (ohne Leerzeichen) voneinander getrennt. Nachfolgend, die schematische Darstellung einer Zeile für einen Anwender mit zwei FIDO2-Keys:
AnwenderA:SchlüsselDatenA1:SchlüsselDatenA2
Die Schlüsseldaten selbst sind in mehrere Parameter unterteilt, die ihrerseits durch Komata (ohne Leerzeichen) voneinander getrennt sind:
KeyHandleA,UserKeyA,CoseTypeA,OptionsA
Die Struktur der Registrierungsdatei hat damit insgesamt folgenden Aufbau (zwei Anwender mit jeweils zwei FIDO2-Keys):
AnwenderA:KeyHandleA1,UserKeyA1,CoseTypeA1,OptionsA1:KeyHandleA2,UserKeyA2,CoseTypeA2,OptionsA2
AnwenderB:KeyHandleB1,UserKeyB1,CoseTypeB1,OptionsB1:KeyHandleB2,UserKeyB2,CoseTypeB2,OptionsB2
Die einzelnen Parameter haben folgende Bedeutung:
Anwender: Der Benutzername des registrierten Benutzerkontos
KeyHandle: Ein eindeutiger Identifikator für den FIDO2-Key, der mit dem Benutzerkonto verknüpft ist
UserKey: Der öffentliche Schlüssel des FIDO2-Keys, der vom Benutzerkonto akzeptiert wird
CoseType: Der COSE-Typ identifiziert den verwendeten kryptografischen Algorithmus für den öffentlichen Schlüssel
Options: Optionale Informationen über den FIDO2-Key
Beispiele für COSE-Typen: ES256, EdDSA und RS256.
ES256: steht für „Elliptic Curve Digital Signature Algorithm with NIST P-256 curve“
EdDSA: steht für „Edwards-curve Digital Signature Algorithm“
RS256: steht für „RSA Signature with SHA-256“
Beispiele für Options:
+presence Der Anwender muss zur Bestätigung den FIDO-Key berühren
+pin Der Anwender muss zur Bestätigung die PIN FIDO-Keys eingeben
Registrierungsdatei im Home-Verzeichnis
Manche Wikis schlagen vor, die Registrierungsdatei im Home-Verzeichnis des Anwenders zu speichern, z.B. in:
~/.config/Yubico/u2f_keys
Dies ist der Standardpfad für die Registrierungsdatei. Verwendet man diesen Pfad, kann in den PAM-Dateien bei der Konfiguration des FIDO2-Keys der Parameter „authfile“ entfallen.
Aus meiner Sicht hat die Verwendung des Standardpfads jedoch zwei Nachteile:
1. Möchte ein Anwender sein Home-Verzeichnis verschlüsseln, um die persönlichen Daten vor unbefugten Zugriff zu schützen, ist eine Anmeldung per FIDO2-Key nicht mehr möglich. Da das Home-Verzeichnis erst nach erfolgreicher Authentifizierung entschlüsselt werden kann (vorher weiß Linux ja noch nicht, welcher User sich anmelden will), steht die Registrierungsdatei zum Zeitpunkt der Anmeldung noch nicht zur Verfügung.
2. Gelingt es einem Angreifer (z.B. über eine Sicherheitslücke in einem Programm) Zugriff zum Terminal eines angemeldeten Nutzers zu erlangen, könnte er die Registrierungsdatei durch seine eigene ersetzen und damit (für den Fall, dass der angemeldete Nutzer sudo-Rechte besitzt), sogar root-Rechte auf dem System erhalten. Befindet sich die Registrierungsdatei hingegen im Verzeichnis /etc, ist eine Änderung nur nach Eingabe des root- oder sudo-Kennworts möglich. Ein offenes Terminal allein genügt dann nicht.
Zwei-Faktor-Authentifizierung am Linux-Desktop
Die passwortlose Anmeldung erhöht den Nutzerkomfort, aber nicht die Sicherheit. Für höhere Anforderungen an die Sicherheit kann die passwortlose Anmeldung in eine Zwei-Faktor-Authentifizierung geändert werden. Der dazu notwendige Aufwand ist minimal.
In den PAM-Dateien muss in der Zeile für den FIDO2-Key lediglich das Control-Flag „sufficient“ durch „required“ ersetzt werden:
auth required pam_u2f.so authfile=/etc/fido2/u2f_keys cue [cue_prompt=Bitte den FIDO-Key berühren ...]
Mit dieser Konfiguration muss der Anwender nach der Berührung des FIDO2-Keys zusätzlich sein Anmelde-Kennwort eingeben – Zwei-Faktor-Authentifizierung eben.
Wem die Reihenfolge nicht gefällt, und lieber das Kennwort vor dem FIDO2-Key eingeben möchte, verschiebt bei Debian die Konfigurationszeile in der PAM-Datei unterhalb der Zeile „@ include common-auth“.
Beim Einsatz des Control-Flags „required“ in der PAM-Dabei ist jedoch besondere Vorsicht geboten. „Required“ bedeutet „notwendig“. Scheitert eine notwendige Authentifizierung (z.B. wegen eines Syntaxfehlers in der Konfigurationszeile oder weil die Zeile innerhalb der PAM-Datei an einem falschen Ort abgelegt wird), ist eine Anmeldung nicht mehr möglich. Im Extremfall muss der Computer mit einem Live-Linux gestartet werden, um den Fehler zu korrigieren. Mehr dazu im Abschnitt „Hife, ich habe mich ausgesperrt!“.
Wer sich für eine Zwei-Faktor-Authentifizierung entscheidet, sollte unbedingt einen zweiten FIDO2-Key zu seinem Anwendernamen registrieren. Andernfalls ist eine Anmeldung nicht mehr möglich, sollte der FIDO2-Key verloren oder kaputt gehen. SIehe dazu Abschnitt „Weitere FIDO2-Keys für ein Benutzerkonto registrieren“.
Eine „Notfall-Anmeldung“ nach einem verlorenen Security-Key ist bei einer Zwei-Faktor-Authentifizierung ausdrücklich nicht möglich. Dies würde schließlich das Konzept der Zwei-Faktor-Authentifizierung ad absurdum führen.
Weitere FIDO2-Keys für ein Benutzerkonto registrieren
Um weitere FIDO2-Keys zu einem bereits registrierten Benutzerkonto hinzuzufügen, kommt wieder das Helper-Tool `pamu2fcfg` zum Einsatz. Nach dem Anstecken des neuen FIDO2-Keys am USB-Port, werden mit folgendem Kommando die Schlüsseldaten generiert.
pamu2fcfg -n | sudo tee -a /etc/fido2/u2f_keys
Der Parameter `-n` unterdrückt die Ausgabe des Anwendernamens, so dass nur die neu generierten Schlüsseldaten an die bereits in der Registrierungsdatei `/etc/fido2/u2f_keys` vorhandene Zeile angefügt werden.
Schematisches Beispiel für eine korrekte Registrierungsdatei (ein Anwender mit zwei Keys:
AnwenderA:KeyHandleA1,UserKeyA1,CoseTypeA1,OptionsA1:KeyHandleA2,UserKeyA2,CoseTypeA2,OptionsA2
Beim hinzufügen weiterer Nutzerkonten gilt es einige Stolperfallen zu beachten:
Wie im Abschnitt „Aufbau der Registrierungsdatei /etc/fido2/u2f_keys“ beschrieben, müssen alle zu einem Anwendernamen registrierten Schlüsseldaten in der gleichen Zeile stehen (getrennt durch Doppelpunkte). Das Helper-Tool `pamu2fcfg` hat keine Möglichkeit, die korrekte Syntax der Registrierungsdatei zu überprüfen. Sollten die neu generierten Schlüsseldaten irrtümlich in eine neue Zeile geschrieben werden, sind sie für die Anmeldung des Anwenders nicht nutzbar.
Im folgenden Beispiel ist Key2 nicht nutzbar, da er verwaist in einer eigenen Zeile steht, ohne Bezug zu einem Anwender:
AnwenderA:KeyHandleA1,UserKeyA1,CoseTypeA1,OptionsA1
:KeyHandleA2,UserKeyA2,CoseTypeA2,OptionsA2
Abhilfe: Mit einem Texteditor die zweite Zeile mit der ersten verbinden.
Ein Anwendername darf nur einmal in der Registrierungsdatei stehen. Wird bei der Registrierung des zweiten FIDO2-Keys beim Aufruf des Helper-Tools `pamu2fcfg` der Parameter `-n` vergessen, werden die zuvor registrierten Schlüsseldaten wirkungslos.
Im folgenden Beispiel ist Key1 nicht mehr nutzbar, da die Registrierung in der ersten Zeile von den Daten in der zweiten Zeile überschrieben werden.
AnwenderA:KeyHandleA1,UserKeyA1,CoseTypeA1,OptionsA1
AnwenderA:KeyHandleA2,UserKeyA2,CoseTypeA2,OptionsA2
Abhilfe: Mit einen Texteditor das zweite Vorkommen von „AnwenderA“ löschen und die beiden Zeilen zu einer Zeile verbinden.
Ein weiterer möglicher Syntaxfehler ist folgender:
AnwenderA:KeyHandleA1,UserKeyA1,CoseTypeA1,OptionsA1AnwenderA:KeyHandleA2,UserKeyA2,CoseTypeA2,OptionsA2
Hier wurden die Schlüsseldaten des zweiten FIDO2-Keys zwar an die erste Zeile angefügt, aber beim Aufruf des Helper-Tools `pamu2fcfg` wurde der Parameter `-n` vergessen. Als Folge steht der Anwendername „AnwenderA“ ein zweites Mal, unmittelbar nach „OptionsA1“ in der Zeile.
Diese Konfiguration funktioniert zwar, ist aber ein Syntaxfehler und sollte korrigiert werden.
Abhilfe: Mit einen Texteditor das zweite Vorkommen von „AnwenderA“ löschen.
Weitere Benutzerkonten registrieren
Das Helper-Tool `pamu2fcfg` kann auch dazu genutzt werden, mehre Benutzerkonten mit FIDO2-Keys zu verknüpfen. Dabei sind wieder die Syntaxregeln der Registrierungsdatei `/etc/fido2/u2f_keys` zu beachten, auf die `pamu2fcfg` selbst keine Rücksicht nehmen kann.
Wichtig ist, dass die Schlüsseldaten für das neue Nutzerkonto in der Registrierungsdatei in eine eigene Zeile geschrieben werden. Dazu muss die vorhandene Registrierungsdatei mit einen sogenannten Zeilenvorschub „CR” (Carriage Return) enden. Dies lässt sich am einfachsten durch die Ausgabe der Registrierungsdatei am Terminal mit dem Befehl `cat` überprüfen.
cat /etc/fido2/u2f_keys
Erscheint der Eingabe-Prompt des Terminals unmittelbar nach den Schlüsseldaten, fehlt der Zeilenvorschub am Ende der Registrierungsdatei und muss manuell mit einem Texteditor, oder alternativ mit folgendem Befehl angefügt werden.
echo -e '\r' | sudo tee -a /etc/fido2/u2f_keys
Erscheint der Eingabe-Prompt des Terminals in einer neuen Zeile, endet die Registrierungsdatei mit einem Zeilenvorschub. und `pamu2fcfg` wird die neuen Registrierungsdaten syntaktisch korrekt in einer neuen Zeile einfügen.
pamu2fcfg -u <Nutzerkonto> | sudo tee -a /etc/fido2/u2f_keys
Mit dem Parameter `-u` kann `pamu2fcfg` ein beliebiges Nutzerkonto für die Registrierung der FIDO2-Keys übergeben werden.
Nachfolgend ein Beispiel für eine Registrierungsdatei /etc/fido2/u2f_keys mit zwei registrierten Nutzerkonten (alice und bob):
Anmeldung mit PIN-Abfrage
Bei einer passwortlosen Anmeldung kommt dem FIDO2-Key die gleiche Bedeutung zu, wie einem klassischen Wohnungstürschlüssel: Wer den Schlüssel besitzt, kommt rein.
Dies könnte sich als problematisch erweisen, sollte z.B. das Notebook zusammen mit dem FIDO2-Key aus einem Hotelzimmer gestohlen werden. Zur Vermeidung dieser Achillesferse kann die Anmeldung mit einer PIN-Abfrage geschützt werden. Voraussetzung ist, dass der FIDO2-Key zuvor mit einer PIN geschützt wurde, wie im Abschnitt „FIDO2-Key mit PIN schützen“ beschrieben.
Zur Aktivierung der PIN-Abfrage bei der Anmeldung, muss bei der Registrierung des FIDO2-Keys die Option –pin-verification angegeben werden.
pamu2fcfg --pin-verification | sudo tee -a /etc/fido2/u2f_keys
Mit dieser Registrierung muss bei jeder Anmeldung neben der Berührung, zusätzlich die PIN des FIDO2-Keys eingegeben werden.
Erkennbar ist eine PIN-Verifikation in der Registrierungsdatei an der Option „+pin”.
In der Registrierungsdatei die Option „+pin” mit einem Editor manuell anzufügen, funktioniert allerdings nicht!
Meines Erachtens ist die PIN-Abfrage bei der Anmeldung sicherer, als die Eingabe eines konventionellen Passworts. Die meisten Anwender neigen dazu, leicht zu erratende Passwörter zu verwenden. Der Versuch die PIN des FIDO2-Keys zu erraten ist aussichtslos, da nach acht fehlgeschlagenen Versuchen, die Schlüsseldaten des FIDO2-Keys unwiederbringlich gelöscht werden. (Siehe Abschnitt „Falsche PIN eingeben“).
Hife, ich habe mich ausgesperrt!
Wird in den PAM-Dateien zur Konfiguration des FIDO2-Keys das Control-Flag „sufficient“ verwendet, sollten keine unerwarteten Probleme auftreten, da „sufficient“ die Authentifizierung per FIDO2-Key ermöglicht, aber nicht erzwingt.
Anders verhält es sich, wenn das Control-Flag „required“ verwendet wird, um für die Anmeldung eine Zwei-Faktor-Authentifizierung zu erzwingen (Passwort plus FIDO2-Key). Ist die Konfigurationszeile für den FIDO2-Key in der PAM-Datei fehlerhaft (wird z.B. „require“ statt „required“ geschrieben), oder geht der FIDO2-Key verloren, ist eine Anmeldung nicht mehr möglich.
Ein weiterer Nebeneffekt zeigt sich, wenn mehrere Nutzerkonten im Linux angelegt wurden.Schützt eine Anwenderin (z.B. Alice) ihr Linux-Konto mit einem FIDO2-Key und nutzt dazu in der PAM-Datei das Control-Flag „required“, können sich weitere Anwender (z.B. Bob) nicht mehr am PC anmelden (oder sudo nutzen), wenn Bob keinen FIDO2-Key nutzt. Bobs Anmeldung wird trotz korrekt eingegebenem Passwort scheitern.
Die Einstellungen in den PAM-Dateien gelten global für alle am Linux angelegten Benutzerkonten. Wird in einer PAM-Datei für den FIDO2-Key das Control-Flag „required“ gesetzt, wird dadurch die Nutzung eines FIDO2-Keys für alle Nutzerkonten erforderlich. Ohne FIDO2-Key ist eine Anmeldung dann für niemanden mehr möglich. Dies gilt nicht, wenn das Control-Flag „sufficient“ verwendet wird, da in diesem Fall die Nutzung des FIDO2-Keys nur optional ist.
Wurde nur die PAM-Datei für den Displaymanager fehlerhaft konfiguriert, ist weiterhin eine Anmeldung über ein TTY-Terminal möglich. Durch gleichzeitiges Drücken der Tasten STRG + ALT + F3 wird die graphisch Oberfläche verlassen und ein Textterminal (TTY3) gestartet. Über dieses sollte eine Anmeldung mit Benutzernamen und Passwort weiterhin möglich sein, um die fehlerhafte PAM-Datei zu korrigieren.
Wenn nichts mehr hilft, bleibt nur noch, den PC mit einem Live-Linux zu starten und darüber die fehlerhaften PAM-Dateien zu korrigieren.
Welches Live-Linux gestartet wird, spielt keine Rolle, es ist jedoch vorteilhaft eine Distribution zu wählen, bei der während des Starts ein deutsches Tastatur-Layout ausgewählt werden kann (z.B. Ubuntu), da zum Bearbeiten der PAM-Dateien Sonderzeichen benötigt werden, die auf der US-Tastatur anders belegt sind. Ansonsten kann man sich mit einer Übersetzungstabelle helfen:
Schreiben auf deutscher Tastatur mit US-Zeichensatz
3 Reaktionen
Erst einmal herzlichen Dank für diese Einführung, gerade auch bei für unterschiedliche Linux-Flavors. Seit einem halben Jahr habe ich einen Nitrokey Fido 2 Stick daheim liegen und verwende ihn nicht. Das hängt damit zusammen, dass auch ein Anruf bei Nitrokey mir die Frage nicht beantworten konnte, ob der USB-Stick auch auf Multibootrechnern eingesetzt werden kann – das ist nämlich meine Ausgangslage. Vielleicht hast Du, Rupert, die Frage schon beantwortet und mir ist die Antwort beim Lesen im Mittagstief verloren gegangen. Auf jeden Fall bitte ich um einen Hinweis.
Und dann habe ich die Vorstellung, dass ich einem solchen Stick alle meine Passwörter beibringen kann und er Benutzernamen und Passwort selbstständig eingibt, wenn ich mich beispielsweise auf posteo.de im Firefox einlogge. Liege ich mit meiner Vermutung richtig?
Hallo Bostaurus,
das Wiki beschreibt das Anmelden am Linux-Desktop per FIDO-2 Key.
Es beschreibt **nicht** das Entschlüsseln einer verschlüsselten Root-Partition während des Startvorgangs. Somit spielt es keine Rolle, wie viele Linux-Distritbutionen Du auf Deiner Festplatte installiert hast, da der FIDO-2 Key erst nach dem Bootvorgang zur Anmeldung am Desktop zum Einsatz kommt.
Das Starten einer verschlüsselten Root-Partition mit FIDO-2 Key (bzw. mit der darin enthaltenen SmartCard) versuche ich gerade zu lösen , aber es ist offensichtlich nicht trivial. Nitrokey bietet auf seiner Webseite zwar ein Script an, welches das Entschlüsseln einer Root-Partition ermöglichen soll (https://docs.nitrokey.com/de/pro/linux/disk-encryption-luks), aber meine ersten Versuche damit sind gescheitert und ich kann Dir leider nicht sagen, ob und wie lange ich für die Lösung brauche.
Securiry-Token (wie der Nitrokey) sind eigentlich nicht dazu gedacht, Benutzernamen und Passwörter zu speichern, sondern sie durch das Public-Key-Verfahren zu ersetzen.
Nitrokey Pro 2, Storage 2 und Nitrokey 3 enthalten einen Passwortspeicher für bis zu 16 Passwörter, die jeweils maximal 20 Stellen lang sein können. Der Funktionsumfang des Passwortspeichers ist jedoch rudimentär und der Platz für 16 Passwörter für mich zu klein.
Zum Speichern von Passwörtern sind spezielle Passwortmanager (wie z.B. „KeepassXC“ oder „Bitwarden“) besser geeignet. Diese bieten auch eine „Auto-Ausfüllen” Funktion an, mit der sich Benutzername und Passwort aus dem Passwortmanager in Webseiten eintragen lassen.
Siehe auch:
https://linux-bibel.at/index.php/2023/09/12/passwortmanager-keepassxc-mit-security-token-nitrokey-oeffnen/
oder:
https://linux-bibel.at/index.php/2023/09/12/bitwarden-passwort-manager/
Danke für die Klärung! Insbesondere, was das Speichern von Passwörtern angeht. Da arbeite ich seit Jahren mit KeePassXC und bin sehr zufrieden. – Ich habe keinen verschlüsselten Rechner, sondern nur mehrere Multibootrechner. Ich werde es demnächst einmal ausprobieren und hier berichten.