Linux-Login mit Yubikey 2FA
Im Artikel SSH-Keys mit Yubikey hatte ich erläutert, wie man einen SSH-Key mit einem Yubikey1 absichert/ersetzt. Aber natürlich kann man auch die Anmeldung am Rechner mit einem Yubikey absichern.
Es gibt verschiedene Verfahren um einen Yubikey als zweiten Faktor in den Loginvorgang einzubinden. Ich nutze das Challenge-Response-Verfahren2 auf HMAC-SHA1-Basis3 im Zusammenspiel mit libpam-yubikey
4. Das Verfahren hat - im Gegensatz zum sog. client
Verfahren - den Vorteil offline zu funktionieren.
Damit man den Yubikey in diesem Verfahren nutzen kann, muss einer der beiden Slots für dieses Verfahren eingerichtet werden. Im Auslieferungszustand bietet sich hier Slot 2 an, da er unbenutzt ist. Hierzu kann das Kommandozeilentool yubikey-personalization
oder das Yubikey Personalization Tool mit GUI5. Ich werde hier die Kommandozeilenvariante nutzen.
Die Installation erfolgt einfach mittels:
apt install yubikey-personalization libpam-yubikey
Die Konfiguration des Slots 2 des Yubikey erfolgt mit dem Befehl:
ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible
Die bisherige Konfiguration des Slot 2 (sofern vorhanden), wird hierbei überschrieben.
Nun legen wir ein Verzeichnis für unsere Challenge-Response-Datei an und exportieren diese:
mkdir ~/.yubico
ykpamcfg -2 -v
Der Output sollte wie folgt aussehen:
Stored initial challenge and expected response in '/home/gpkvt/.yubico/challenge-123456'.
Der Pfad und die Zahl am Ende des Dateinamens variiert natürlich.
Nun müssen wir nur noch PAM6 zu konfigurieren. Hierzu öffnen wir ein Terminal mit root
-Rechten.
Das root
-Terminal sollte auch bis zum erfolgreichen Test der Anmeldung offen bleiben, damit man ggf. nötige Anpassungen bzw. die Entfernung des Yubikey-Moduls bei Problemen weiterhin vornehmen kann.
Zum Aktivieren des libpam-yubikey
-Moduls editieren wir die Datei /etc/pam.d/common-auth
(als root
) und fügen folgende Zeile am Ende der Datei ein und speichern diese:
auth required pam_yubico.so mode=challenge-response
In einem neuen Terminal geben wir den Befehl su $(id -nu)
ein. Die Kennwortabfrage beantworten wir mit unserem normalen Benutzerkennwort. Der Yubikey sollte hierbei kurz aufleuchten und die Anmeldung erfolgreich vollzogen werden. Nun wiederholen wir diesen Vorgang aber ziehen zuvor den Yubikey aus dem Rechner. Das Resultat sollte su: Authentication failure
lauten.
Klappt beides, war der Vorgang erfolgreich. Wenn nicht, können wir der pam_yubico.so
-Zeile in /etc/pam.d/common-auth
ein debug
hintenanstellen. Danach geben wir die folgenden Befehle ein:
touch /var/run/pam-debug.log
chmod go+w /var/run/pam-debug.log
Wenn wir nun erneut mittels su $(id -nu)
einen Anmeldevorgang durchführen, wird das Logfile gefüllt und gibt uns hoffentlich einen Hinweis, wo das Problem liegt.
Schaffen wir es nicht das Problem zu beheben, müssen wir die pam_yubico.so
-Zeile natürlich unbedingt entfernen (über das offengehaltene root
-Terminal), da sonst kein Login am Rechner mehr möglich sein wird.