Passwortlose Authentifizierung (sudo/gdm)

Fr, 12. November 2021, Martin

Wer seinen Rechner vor Unbefugten schützen möchte, sollte ein «vernünftiges» Benutzerpasswort wählen. Dieses jedes Mal einzutippen, bei jedem Anmelden und bei jedem sudo-Befehl, ist jedoch kein Spass und nervt schnell. Anstatt am Passwort zu sparen, kann man sich auch auf andere Weise authentifizieren: ohne Passwort.


Die Rede ist natürlich vom passwortlosen Login per U2F/FIDO2 Stick. Am Beispiel von Arch Linux und einem Nitrokey (z. B. FIDO2 oder Nitrokey 3) möchte ich hier kurz beschreiben, wie man das System so konfiguriert, dass man optional den Stick verwenden kann, um sich a) am GNOME Session Manager (gdm) und b) für einen sudo-Befehl zu authentifizieren. Optional heisst: Ist der Stick am Rechner eingesteckt, genügt es, ihn zu berühren. Ist er nicht eingesteckt, kann man wie bisher das Passwort eintippen.

Vorbereitung

Als Erstes muss, falls noch nicht geschehen, das Paket pam-u2f installiert werden. Dann brauchen wir ein Verzeichnis, das die Schlüsseldatei enthalten soll. Ich wähle ~/.config/Nitrokey. Schlüssel können mittels pamu2fcfg hinzugefügt werden:

mkdir ~/.config/Nitrokey
pamu2fcfg -o pam://myhostname -i pam://myhostname > ~/.config/Nitrokey/u2f_keys

Ein Antippen des Buttons/Sensors auf dem Stick befördert den Schlüssel in die angegebene Datei u2f_keys. myhostname muss natürlich durch den Hostnamen des Rechners ersetzt werden. Es empfiehlt sich, den Schlüssel eines weiteren U2F/FIDO2-Sticks hinzuzufügen. Schliesslich kann so ein Stick auch mal kaputtgehen und der Teufel ist bekanntlich ein Eichhörnchen. Weitere Schlüssel kann man folgendermassen anhängen:

pamu2fcfg -o pam://myhostname -i pam://myhostname -n >> ~/.config/Nitrokey/u2f_keys

Passwortloses sudo

Hinweis: Hier muss man wissen, was man tut! Man sollte sich unbedingt noch ein weiteres Konsolenfenster öffnen, in dem man root-Rechte hat. Sollte man sich dennoch ausgeschlossen haben, kann man mit dem Arch Linux Liveimage booten und den Fehler reparieren.

In der Datei /etc/pam.d/sudo fügt man folgende Zeile an erster Stelle ein:

auth   sufficient   pam_u2f.so cue [cue_prompt=Bitte Nitrokey berühren] origin=pam://myhostname appid=pam://myhostname authfile=.config/Nitrokey/u2f_keys

Nach dem Speichern werden die Änderungen sofort wirksam. Zum Test kann man ein weiteres Terminalfenster öffnen und sudo ls eingeben.

Passwortloser GDM Login

In der Datei /etc/pam.d/gdm-password fügt man die schon aus dem vorigen Abschnitt bekannte Zeile an erster Stelle ein:

auth   sufficient   pam_u2f.so cue [cue_prompt=Bitte Nitrokey berühren] origin=pam://myhostname appid=pam://myhostname authfile=.config/Nitrokey/u2f_keys

Ein kleiner Nachteil ist jedoch, dass GNOME nun den Anmeldeschlüsselbund nicht mehr automatisch entsperrt, da GNOME hierfür ein Passwort benötigt, das jedoch durch die Authentifizierung per Stick nicht übermittelt wird.

Das Passwort muss jedoch pro Sitzung nur einmal eingetippt werden. Nach einer Bildschirmsperre etwa genügt das Entsperren per Nitrokey.

Zwei-Faktor-Authentifizierung

Wen die Passworteingabe nicht stört und den GDM-Login per Zwei-Faktor-Authentifizierung noch sicherer machen will, kann stattdessen auch folgende Zeile nach den anderen auth-Einträgen in /etc/pam.d/gdm-password eintragen:

auth   required   pam_u2f.so nouserok origin=pam://myhostname appid=pam://myhostname authfile=.config/Nitrokey/u2f_keys

Dann wird zusätzlich zum Passwort auch noch der U2F-Stick abgefragt. Nun gibt es auch kein Problem mit dem GNOME Anmeldeschlüsselbund; er wird automatisch entsperrt, da ja das Passwort eingegeben wurde. nouserok bewirkt, dass sich (andere) Benutzer, die keinen U2F-Stick eingerichtet haben, dennoch anmelden können.

Quellen:

Arch Wiki
Nitrokey Docs