Vor ein paar Tagen habe ich mir einen Yubikey Neo zugelegt. Dabei handelt sich um eine Kombination aus One-Time-Passwort-Generator (OTP-Generator) und PGP-Smartcard. Außerdem können auch statische Passwörter hinterlegt werden. Der Yubikey unterstützt eine Fülle an Authentifizierungsmechanismen, egal ob online, über fremde oder eigene Server, oder offline.
In diesem Beitrag soll es um den Login an einem Arch Linux Rechner gehen – abgesichert mit dem Yubikey, oder Passwort + Yubikey (Two-Factor-Auth). Für eine PAM-basierende Authentifizierung, wie wir sie unter Linux und Mac OS haben, stellt Yubico ein Open Source PAM Modul zur Verwendung mit dem Yubikey bereit. Das Modul kann in zwei verschiedenen Betriebsmodi genutzt werden: Entweder in Kombination mit dem Yubico-OTPs über Yubico-eigene Server oder über ein HMAC-SHA1-basiertes Challenge-Response Verfahren, das auch offline (und damit unabhängig von Servern) funktioniert. Ich ziehe die offline-Methode vor, denn der große Nachteil der online-Variante ist: Wenn die Server offline sind (oder mein Rechner) kann ich mich nicht mehr einloggen.
So, jetzt geht’s aber los. Yubico bietet zwar eine Anleitung für sein Modul pam-yubico an – die ist aber für Ubuntu geschrieben. Unter Arch Linux müssen Kleinigkeiten angepasst werden (deshalb schreibe ich diese Anleitung ;) )
In den Arch Repos ist das Yubico PAM Modul bereits vorhanden, sodass wir es nicht von Git herunterladen und selbst compilieren müssen:
sudo pacman -Sy yubico-pam
Nach der Installation des PAM-Moduls wird zunächst der Yubikey fit für das HMAC-SHA1-Challenge-Response-Verfahren gemacht. Steckt euren Yubikey dazu in einen freien USB-Slot und führt folgenden Befehl aus, um euren 2. Yubikey-Slot zu konfigurieren:
(Vorsicht! Überlegt vorher noch einmal, ob ihr den zweiten Slot noch für irgendeinen Login verwendet! Der 2. Slot wird durch das folgende Kommando überschrieben!)
ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible
(mit „y“ bestätigen)
Euer Yubikey muss jetzt noch dem System bekannt gemacht werden. Die Identifizierungsdaten eures Keys werden dabei in eine Konfigurationsdatei im Home-Verzeichnis geschrieben. Legt dieses Verzeichnis an:
mkdir ~/.yubico
… und macht euren Key dem System bekannt:
ykpamcfg -2 -v
Vorsicht! Falls euer Home-Verzeichnis z.B. via encfs verschlüsselt ist, müsst ihr euch einen anderen Ort für die Konfigurationsdatei außerhalb eures Home-Verzeichnisses suchen! Wenn ihr ausgeloggt seid, kann das Modul sonst nicht auf die Konfiguration zugreifen. Befolgt in diesem Fall die dazugehörigen Schritte in der offiziellen Anleitung: „If your /home/user folder is encrypted…“
Jetzt wird das PAM-Modul aktiviert. Öffnet euch vorsichtshalber ein neues Terminal-Fenster mit Root-Zugriff im Hintergrund. Falls das PAM-Modul Ärger macht, kann es sonst sein, dass ihr euch „aussperrt“. Ein bereits geöffnetes Terminal mit Root kann dann die Rettung sein ;)
Öffnet die Datei /etc/pam.d/system-auth und fügt vor der Zeile mit „pam_unix“ folgende neue Zeile ein:
auth required pam_yubico.so mode=challenge-response
Speichert die Datei dann ab. Jetzt könnt ihr testen, ob die neue Konfiguration funktioniert: Öffnet nochmals ein neues Terminal und versucht, via „sudo -s“ Root-Rechte zu bekommen. Dabei sollten jetzt sowohl Passwort als auch der Yubikey abgefragt werden. Wenn der Yubikey nicht eingesteckt ist, sollte der Versuch fehlschlagen. Vor jedem Test muss dabei das Terminal geschlossen und wieder ein neues geöffnet werden, weil die Erlangung von Root-Rechten via sudo „gecached“ wird.
Wenn der Test mit „sudo -s“ funktioniert, könnt ihr den Test am Login für euren Desktop durchführen.
Aktuell ist PAM so konfiguriert, dass Passwort und Yubikey für einen Login vorhanden sein müssen. Es lässt sich aber auch ein anderer Modus einstellen: Wenn das „required“ in der Zeile oben durch ein „sufficient“ ausgetauscht wird, funktioniert der Login auch, wenn nur das Passwort oder der Yubikey vorhanden ist.
Das war’s auch schon.
Übrigens: Für so eine Zwei-Faktor-Authentifizierung beim PAM Login braucht man nicht zwingend einen Yubikey. Dafür reicht im Grunde auch schon ein USB-Stick aus – Auch, wenn der im Gegensatz zum Yubikey natürlich nicht fälschungssicher ist … ;)