YubiKey - Benutzer-Anmeldung an Linux/Ubuntu nur mit einem YubiKey erlauben
Mit einem YubiKey lässt sich die Benutzeranmeldung an einem Linux-PC mit einem zweiten Faktor (U2F) absichern. Den U2F kann man dabei global für jede Benutzeranmeldung, sei es die grafische Anmeldung oder via SSH, vorgeben.
Auch eine feinere Granulierung nach Anmeldeverfahren ist möglich.
Der Aufwand ist ein wenig höher als bei einem Windows-System, aber überschaubar und auch relativ schnell erledigt.
Der Login an einem virtualisierten Systems kann so ebenfalls mit dem Hardwaretoken ergänzt werden. Voraussetzung ist, dass der Host-Rechner den YubiKey vollständig an das Gast-System durchreicht.
In diesem Beispiel verwende ich ein virtualisiertes Ubuntu-System in einer Oracle VirtualBox.
Die Anleitung für ein Windows findet ihr ebenfalls hier im Blog:
👉 Windows System anpassen zur Anmeldung mit einem YubiKey an einem Linux-Server
Ubuntu vorbereiten
Eine Anleitung für die Vorbereitung einer VirtualBox findet ihr hier im Blog. 👉 VirtualBox für die Erstellung des OpenPGP-Schlüsselpaars und zum Anschluss des YubiKeys vorbereiten
Wichtig ist, dass das über den USB-Controller der YubiKey vom Host- an das Gast-System durchgereicht wird.
Mit dem folgenden Befehl lassen sich die angeschlossenen USB-Geräte auflisten. Der YubiKey sollte angezeigt werden.
lsusb
In der Liste ist auch der YubiKey enthalten. Er wird also korrekt vom Host an den Gast durchgereicht.
PAM-Modul installieren
PAM
steht für Pluggable Authentication Modules
....
sudo apt install libpam-u2f
Weitere Informationen zu "pam-u2f
" finden sich auf:
- 👉 https://github.com/Yubico/pam-u2f
- 👉 https://developers.yubico.com/pam-u2f/
- 👉 https://manpages.ubuntu.com/manpages/focal/en/man8/pam_u2f.8.html
Ubuntu und YubiKey für Login vorbereiten
Es wird ein neues Verzeichnis im Home-Verzeichnis des Benutzers benötigt. Besteht bereits ein solches Verzeichnis, könnt ihr diesen Schritt überspringen.
mkdir ~/.config/YubiKey
Im nächsten Schritt wird ein angeschlossener YubiKey für die Registrierung vorbereitet.
pamu2fcfg > ~/.config/YubiKey/u2f_keys
Denkt daran die Metallkontakte am YubiKey zu drücken, sonst erhaltet ihr die Fehlermeldung "Unable to generate registration challenge, timeout error (-7)"
In der "manpage" ist zu "mapu2fcfg" zu lesen: "DESCRIPTION Perform a U2F registration procedure using a connected U2F token and output a configuration line that can be used with the U2F PAM module. "
Mit diesem Befehl wurde euer YubiKey-Schlüssel ausgelesen und in die Datei ~/.config/YubiKey/u2f_keys
geschrieben.
Einen weiteren YubiKey, also ein Backup-Token, kann man ebenfalls auslesen und in die Datei eintragen lassen. Dazu ist der Befehl nur geringfügig anzupassen.
pamu2fcfg -n >> ~/.config/YubiKey/u2f_keys
Habt ihr bereits die "u2f_keys" in ein anderes Verzeichnis verschoben, dann lt. der Befehl
sudo pamu2fcfg -n >> /etc/YubiKey/u2f_keys
Die Zugriffsrechte der Datei lassen sich mit anzeigen.
ls -la ~/.config/YubiKey/u2f_keys
Mit einem Editor könnt ihr die Datei auch einsehen und editieren.
nano ~/.config/YubiKey/u2f_keys
Das kann ein Sicherheitsrisiko darstellen, da normale Benutzer ohne Adminrechte in der Lage sind den Key zu modifizieren. Soll der Schlüssel davor geschützt werden, kann er in ein anderes Verzeichnis verschoben werden und die Zugriffsrechte auf die Datei geändert werden.
Die u2f_keys
-Datei verschieben wird deshalb in einen neuen Ordner mit dem Namen YubiKey
im Verzeichnis /etc
verschoben.
Im offiziellen YubiKey Manual wird beschrieben, wie die Datei /etc/pam.d/sudo
bearbeitet wird. Durch diese Änderung lassen sich keine sudo
-Befehle mehr ohne den YubiKey ausführen❗️
Ubuntu - Login auf YubiKey umstellen
Achtung
Nach diesem Schritt ist eine Anmeldung wirklich nur noch mit dem YubiKey möglich. Verliert ihr den Schlüssel, dann ist ein Login nicht mehr möglich. Legt deshalb zu Sicherheit gleich einen zweiten Schlüssel in der Datei an.
sudo mkdir /etc/YubiKey
cd /etc/YubiKey/
sudo mv ~/.config/YubiKey/u2f_keys /etc/YubiKey/
Die Datei wurde mit dem letzten Befehl in das Verzeichnis /etc/YubiKey/
verschoben und lässt sich ab jetzt nur noch mit sudo
bearbeiten. Für alle anderen ist die Datei nur noch lesend zugänglich.
ls -la /etc/YubiKey/
Ab hier besondere Vorsicht❗️
Die Terminal-Sitzung die ihr gerade benutzt muss offen bleiben!
In der Terminal-Sitzung muss die Datei /etc/pam.d/sudo
geöffnet bleiben, um die Änderungen ggf. rückgängig zu machen.
Wird die Session geschlossen gibt es KEINE Möglichkeit mehr "sudo" ohne YubiKey zu nutzen.
Deshalb ist die Datei nur zu SPEICHERN! --> Strg + O
Der Editor darf NICHT verlassen werden❗️
Nun ist die Ergänzung in der "/etc/pam.d/sudo" vorzunehmen.
sudo nano /etc/pam.d/sudo
Nach der Zeile @include common-auth
ist der Verweis auf die u2f_keys
einzutragen.
auth required pam_u2f.so authfile=/etc/YubiKey/u2f_keys cue
Datei nur zu SPEICHERN! --> Strg + O und in der Terminal-Sitzung geöffnet lassen.
In dieser Zeile gibt es eine Abweichung zur offiziellen Dokumentation von Yubico. Es wird am Ende der Zeile ein cue
angehängt. Dadurch wird Please touch the device.
ausgegeben, wie unten im Screenshot zu sehen.
In der offiziellen Dokumentation steht dazu:
cue Set to prompt a message to remind to touch the device.
Nun kann die Konfiguration getestet werden.
Im Screenshot seht ihr das Vorgehen:
Terminal-Sitzung 1: Bleibt immer geöffnet!
Das Terminal 1 bleibt IMMER geöffnet❗️
Terminal-Sitzung 2: YubiKey ist nicht angeschlossen
Mit dem Befehl lsusb
wird abgefragt, ob der YubiKey am System angeschlossen ist.
sudo echo test
Nach einer dreimaligen Eingabe des richtigen Passworts wird abgebrochen, da der YubiKey nicht erkannt wurde und somit die Metallkontakte nicht gedrückt werden konnten.
Terminal-Sitzung 3: YubiKey ist angeschlossen
Mit dem Befehl lsusb
wird abgefragt, ob der YubiKey am System angeschlossen ist.
Ihr seht, der YubiKey wird erkannt.
sudo echo test
Und siehe da, nach dem Drücken der Metallkontakte wird der Befehl ausgeführt.
Nach diesem Test sieht man, dass die Konfiguration korrekt ist und der YubiKey zum Ausführen der sudo
-Befehle zwingend benötigt und auch erkannt wird.
Für die zwingende Abfrage des YubiKeys bei der Anmeldung ist das Skript /etc/pam.d/common-auth
zu editieren.
Die Datei ist die globale Konfigurationsdatei für die alle Anmeldung am System und gilt u.a. für SSH-Sessions.
sudo nano /etc/pam.d/common-auth
Fügt am Ende der Datei die folgenden beiden Zeilen ein.
#YubiKey required for login
auth required pam_u2f.so nouserok authfile=/etc/YubiKey/u2f_keys cue
Die Option nouserok
geben wir noch mit, was eine Abweichung von der offiziellen Yubico-Dokumentation darstellt.
In der Dokumentation steht dazu:
Set to enable authentication attempts to succeed even if the user trying to authenticate is not found inside authfile or if authfile is missing/malformed.
das bedeutet
Wird gesetzt, damit Authentifizierungsversuche auch dann erfolgreich sind, wenn der Benutzer, der sich zu authentifizieren versucht, nicht in der auth-Datei gefunden wird oder wenn die auth-Datei fehlt/falsch ist.
Durch die Option können sich auch andere Benutzer noch anmelden, die über keinen YubiKey verfügen. Wenn sich alle Benutzer ausschließlich mit einem YubiKey anmelden müssen, dann ist die Option nouserok
einfach wegzulassen.
sudo-Befehle ohne YubiKey
Weiter oben haben wir zum Testen eine Zeile in der /etc/pam.d/sudo
hinzugefügt, damit beim Ausführen von sudo
-Befehlen zwingend ein Drücken der Metallkontakte des YubiKeys erforderlich ist.
Wer das nicht möchte, kann das Deaktivieren. Dann wird wieder beim Verwenden von sudo
wieder nach dem Passwort anstatt nach dem Hardwaretoken gefragt.
Es ist die Datei /etc/pam.d/sudo
zu editieren und ein paar Anpassungen vorzunehmen.
- Die Zeile
*@include common-auth
ist auszukommentieren. - Die Zeile, die wir weiter oben für das Testen eingefügt haben, ist ebenfalls auszukommentieren.
- Der Inhalt aus der
/etc/pam.d/common-auth
ist unterhalb der aus zu kommentierten Zeile@include common-auth
einzufügen.
Durch die Änderungen werden die globalen Vorgaben aus der common-auth
überschrieben und nur die Einstellungen der *sudo
-Datei verwendet.
Der Inhalt der Datei sieht dann so aus
#%PAM-1.0
session required pam_env.so readenv=1 user_readenv=0
session required pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
#@include common-auth
# Content of commom-auth
# here are the per-package modules (the "Primary" block)
auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_sss.so use_first_pass
# here's the fallback if no module succeeds
auth requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth required pam_permit.so
# and here are more per-package modules (the "Additional" block)
auth optional pam_cap.so
# end of pam-auth-update config
#YubiKey required for login
#auth required pam_u2f.so nouserok authfile=/etc/YubiKey/u2f_keys cue
@include common-account
@include common-session-noninteractive
Anmeldung mit YubiKey funktioniert
Nach der ganzen Konfiguration testen wir den Login ...
... und siehe da, es wird nach dem YubiKey gefragt. 😀
Mehrplatzrechner
Möchte man an einem Mehrplatzrechner für alle Benutzer die Anmeldung mit einem YubiKey vorgeben, ist das auch sehr einfach möglich.
Wenn ihr meine Anleitung von oben befolgt habt, dann ist die Datei /etc/YubiKey/u2fkeys
bereits vorhanden. Die Datei könnt ihr weiterverwenden, um dort alle YubiKeys euer Benutzer zu hinterlegen.
Die Dateiberechtigungen sind aber zwingend zu prüfen. Stimmen die nicht überein, dann erhalten die Benutzer beim Login keinen Zugriff auf die Datei, um den hinterlegten YubiKey-Schlüssel zu verifizieren.
Habt ihr die Datei, wie in der Anleitung angelegt, dann ist der Eigentümer der Datei euer Benutzer. Hier im Beispiel heißt der Benutzer einfach benutzer
-rw-rw-r-- 1 benutzer benutzer ... u2f_keys
Das müsst ihr unbedingt ändern:
sudo chown root:root /etc/YubiKey/u2f_keys
Nach der Änderung sehen die Berechtigungen dann so aus
-rw-rw-r-- 1 root root ... u2f_keys
In die Datei nehmt ihr alle YubiKeys euer Benutzer auf. Tragt einfach jeden Benutzer in eine neue Zeile ein und schreibt dahinter den YubiKey.
benutzer:18927497...
benutzer2:247971...
benutzer3:387357
Jeder Benutzer kann auch ganz einfach den Eintrag selber erzeugen:
pamu2fcfg > benutzer-yubikey.txt
Die Datei wird im Home-Verzeichnis des Benutzers angelegt und enthält bereits die korrekte Formatierung und die YubiKey-Informationen.
Die Datei kann an einen Admin weitergegeben werden, der dann mit sudo
-Rechten die Informationen in die /etc/YubiKey/u2f_keys
einfügen kann.
Wenn alle YubiKeys der Benutzer in der u2f_keys
eingetragen, dann kann die Option nouserok
in der /etc/pam.d/sudo
ganz weggelassen oder auf alwaysok
umgestellt werden.
Fehlermeldungen
Ich hatte das Problem, dass ich den YubiKey zwar ansprechen und die PIN eingeben konnte, jedoch wurde die nicht akzeptiert.
pamu2fcfg > ~/.config/Yubico/u2f_keys
Enter PIN for /dev/hidraw2:
error: fido_dev_make_cred (52) FIDO_ERR_PIN_AUTH_BLOCKED
Das Problem war schnell gelöst. Mein YubiKey war über ein USB-Kabel am PC angeschlossen. Ein Umstecken an eine USB-Schnittstelle direkt am Gerät brachte Abhilfe, der Key wurde erkannt, die PIN-Abfrage und -Eingabe war erfolgreich und der YubiKey hat sich wie oben beschrieben für die Anmeldung einrichten lassen.
YubiKey Themenseite
Hier geht es zur 👉 YubiKey Themenseite, dort findest du noch mehr Beiträge rund um den YubiKey.
Gib mir gerne einen Kaffee ☕ aus ❗️
Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.
Follow Me❗️
Source
Foto von FLY:D auf Unsplash