1. Einleitung
Ein YubiKey ist ein Hardware-Sicherheitstoken, der zur Zwei-Faktor-Authentifizierung (2FA) und zur Stärkung der Sicherheit von Online-Konten verwendet wird. Entwickelt von der Firma Yubico, handelt es sich um einen kleinen, physischen USB-Token, der eine Vielzahl von Authentifizierungsmethoden unterstützt.
Die grundlegende Funktion besteht darin, dass der YubiKey nach dem Einstecken in einen USB-Anschluss eine einmalige Passwortkombination generiert und an den Computer sendet. Diese Passwortkombination kann dann als zweiter Faktor für die Authentifizierung auf verschiedenen Online-Plattformen oder Diensten verwendet werden.
Es gibt verschiedene Modelle von YubiKey, die unterschiedliche Authentifizierungsmethoden unterstützen, darunter TOTP (Time-based One-Time Password), FIDO U2F (Universal 2nd Factor), FIDO2, Smart Card und mehr. Einige Modelle verfügen auch über NFC (Near Field Communication), was es ermöglicht, den YubiKey drahtlos mit unterstützenden Geräten zu verwenden.
Die Verwendung von YubiKey bietet eine zusätzliche Sicherheitsebene, da selbst wenn ein Angreifer das Passwort kennt, er ohne den physischen YubiKey keinen Zugriff auf das Konto erhält. Dies macht den YubiKey zu einer effektiven Methode, um die Sicherheit von Online-Konten zu erhöhen.
Und man kann sich nicht nur mit einem YubiKey am Rechner anmelden, sondern selbst ein sudo kann damit zusätzlich gesichert werden.
Inhalt
2. Yubikey Unterstützung installieren
Damit unter Debian der YubiKey überhaupt funktioniert, müssen einige Pakete installiert werden, falls nicht schon geschehen:
$ sudo apt install libyubikey-udev libyubikey0 yubico-piv-tool yubikey-agent yubikey-luks yubikey-manager yubikey-manager-qt yubikey-personalization yubioath-desktop pcscd
Folgende Pakete werden installiert:
libyubikey-udev | Dieses Paket enthält die notwendigen udev-Regeln (Device Manager für den Linux-Kernel), um sicherzustellen, dass der YubiKey ordnungsgemäß erkannt und zugänglich ist, wenn er an einen USB-Anschluss angeschlossen wird. |
libyubikey0 | Diese Bibliothek bietet Funktionen und Schnittstellen, die es Softwareanwendungen ermöglichen, YubiKey-Geräte zu erkennen, mit ihnen zu interagieren und verschiedene YubiKey-spezifische Funktionen zu nutzen. |
yubico-piv-tool | PIV steht für “Personal Identity Verification”, und die PIV-Tools werden verwendet, um mit den PIV-Funktionalitäten von YubiKey-Geräten zu interagieren. Zu den Funktionen gehören das Erstellen von Zertifikatanforderungen, das Generieren von Schlüsselpaaren, das Signieren von Daten und das Durchführen von Zwei-Faktor-Authentifizierung mit PIV. |
yubikey-agent | Der “yubikey-agent” ist besonders nützlich in Kombination mit SSH (Secure Shell). Mit diesem Agenten kann der YubiKey verwendet werden, um sich bei SSH-Servern anzumelden, ohne jedes Mal dein Passwort eingeben zu müssen. Der YubiKey agiert dabei als Hardware-Token für die Zwei-Faktor-Authentifizierung. |
yubikey-luks | Dient zur Entschlüsselung von LUKS-verschlüsselten Laufwerken und sich zu authentifizieren. Das bedeutet, dass der YubiKey als zusätzlicher Faktor für die Entschlüsselung eines verschlüsselten Laufwerks dient, und er muss physisch vorhanden sein, um auf die verschlüsselten Daten zuzugreifen. |
yubikey-manager | Der “YubiKey Manager” ist eine Softwareanwendung von Yubico, die es Benutzern ermöglicht, verschiedene Aspekte ihrer YubiKey-Geräte zu verwalten und zu konfigurieren. Diese Befehlszeilenversion bietet eine textbasierte Schnittstelle und ermöglicht fortgeschrittenen Benutzern die Konfiguration ihres YubiKey über die Befehlszeile. |
yubikey-manager-qt | Die grafische Benutzeroberfläche (Qt-Version) bietet eine benutzerfreundliche grafische Umgebung für die Konfiguration (siehe yubikey-manager) des YubiKey. |
yubikey-personalization | Ein Befehlszeilentool, das von Yubico bereitgestellt wird und es Benutzern ermöglicht, verschiedene Konfigurationen und Personalisierungen auf YubiKey-Geräten vorzunehmen. Mit diesem Tool können Benutzer spezifische Einstellungen anpassen und Funktionen aktivieren oder deaktivieren. |
yubioath-desktop | Eine Desktop-Anwendung, die dazu dient, Zeitbasierte Einmalpasswörter (TOTP) auf einem Computer zu generieren und zu verwalten. TOTP sind Passcodes, die sich alle 30 Sekunden ändern und als zusätzlicher Authentifizierungsfaktor in Verbindung mit Diensten verwendet werden können, die TOTP unterstützen. |
pcscd | “pcscd” steht für “PC/SC Daemon” und ist ein Daemon-Prozess (Hintergrundprozess) auf Linux-Systemen, der mit der PC/SC-Schnittstelle (Personal Computer/Smart Card) interagiert. PC/SC ist eine Standardschnittstelle für die Kommunikation zwischen einem Computer und Smartcards oder anderen kartenbasierten Sicherheitsgeräten. |
Es werden natürlich nicht immer alle Pakete unbedingt benötigt. Wer zum Beispiel seine Festplatte nicht verschlüsseln möchte, benötigt auch das Paket yubikey-luks nicht. Aber es kann nicht schaden, alle Pakete zu installieren. So ist man für alle Fälle gerüstet.
3. YubiKey dem User zuordnen
Der YubiKey nutzt PAM unter Debian. Die einzelnen Module findet man unter /etc/pam.d. Damit der YubiKey funktioniert, muss die FIDO2 Funktion aktiviert, bzw. konfiguriert sein.
PAM steht für “Pluggable Authentication Modules” (Steckbare Authentifizierungsmodule) und ist ein Authentifizierungs-Framework für Linux-Systeme. Es bietet eine standardisierte Schnittstelle, die es ermöglicht, verschiedene Authentifizierungsmodule nahtlos in das Authentifizierungssystem des Betriebssystems zu integrieren.
Es wird empfohlen, einen zweiten YubiKey zu nutzen als Backup. Sollte der Haupt-YubiKey verloren, oder kaputt gehen, hat man einen Ersatz und kann sich weiterhin anmelden, bzw. die entsprechenden Dienste nutzen.
- Konsole öffnen (nicht als root!).
- YubiKey in einen freien USB Port stecken.
- Verzeichnis erstellen:
mkdir -p ~/.config/Yubico - Schlüssel aus YubiKey auslesen und speichern:
pamu2fcfg > ~/.config/Yubico/u2f_keys- Es wird jetzt normalerweise nach der FIDO2 PIN gefragt. Diese Eingeben und durch <ENTER> bestätigen.
- Die LED am YubiKey blinkt nun. Den Kontakt mit der blinkenden LED kurz berühren.
Damit ist der erste YubiKey eingelesen. Für ein Backup folgen noch folgende Schritte:
- YubiKey gegen Backup YubiKey austauschen.
- Folgendes eingeben:
pamu2fcfg -n >> ~/.config/Yubico/u2f_keys- Damit wird ein weiterer Schlüssel in diese Datei geschrieben.
4. sudo mit dem YubiKey absichern
4.1 YubiKey zwingend vorausgesetzt
Es gibt zwei Möglichkeiten, den YubiKey einzusetzen. Entweder als optionale Möglichkeit der Authentifizierung, oder als zwingend vorausgesetzte Variante. Wird er nur optional eingesetzt, wird beim fehlen einfach das Passwort abgefragt. Steckt der YubiKey im Rechner, wird dieser Weg benutzt.
Hier spielt daher die Reihenfolge der Einträge in der /etc/pam.d/sudo eine Rolle. Möchte man den Rechner so absichern, dass ohne YubiKey ein sudo nicht mehr funktioniert, so erfolgt der Eintrag von auth required pam_u2f.so NACH @include common-auth. Dazu wird die Datei /etc/pam.d/sudo editiert:
$ sudo vi /etc/pam.d/sudo
Dort den Eintrag @include common-auth suchen und danach die Zeile auth required pam_u2f.so eintragen:
... @include common-auth auth required pam_u2f.so ...
Zusätzlich kann man noch die Standardmeldung, wenn der YubiKey benutzt wird, ändern. Anstatt des englischen Standard Textes kann ein beliebiger eigener Text verwnedet werden. Dazu muss der Eintrag noch erweitert werden, und würde dann so aussehen:
... @include common-auth auth required pam_u2f.so cue [cue_prompt="YubiKey berühren für sudo"] ...
Wenn der Eintrag entsprechend vorgenommen worden ist, die Datei lediglich speichern, aber noch nicht schließen. Sollte hier ein Fehler passiert, oder ggf. das notwendige Paket nicht installiert sein, schließt man sich vom Befehl sudo aus. Daher die Datei noch offen halten!
4.2 YubiKey optional nutzen
Soll der YubiKey nur als praktischer Ersatz genutzt werden, weil man sich zum Beispiel das eintippen eines Passworts sparen möchte, sieht die Reihenfolge und Parametrisierung etwas anders aus. Zu beachten ist, dass hier der YubiKey nicht der Sicherheit gilt, sondern nur der Bequemlichkeit!
Auch hier muss die Datei /etc/pam.d/sudo editiert werden:
$ sudo vi /etc/pam.d/sudo
Anstatt required, wird nun sufficient eingesetzt. Auch wird die Reihenfolge umgedreht. Macht man dies nicht, wird erst das Passwort abgefragt und dann darf man noch einmal den YubiKey betätigen, was so ja keinen Sinn macht:
... auth sufficient pam_u2f.so @include common-auth ...
Hier kann ebenfalls der Standardtext bei Abfrage geändert werden, indem der Eintrag cue [cue_prompt="YubiKey berühren für sudo"] hinzugefügt wird:
... auth sufficient pam_u2f.so cue [cue_prompt="YubiKey berühren für sudo"] @include common-auth ...
4.3 Test mit YubiKey
Als nächstes eine weitere Konsole öffnen, und die andere Konsole mit dem offenen Editor der Datei /etc/pam.d/sudo weiter offen lassen. Dort dann folgendes eingeben:
$ sudo echo "Test erfolgreich"
Nach absenden des Befehls sollte auf dem Bildschirm entweder die Passwortabfrage und/oder eine Meldung erscheinen, die zum berühren des YubiKey auffordert und die LED blinken. Dies ist abhängig, ob required, oder sufficient genutzt wird. Berührt man nun die kupferfarbene Platte sollt die Meldung “Test erfolgreich” erscheinen.
Sollte irgend eine Fehlermeldung kommen, dann unbedingt noch einmal in dem anderen Konsolenfenster kontrollieren, ob alles richtig eingetragen wurde. Ansonsten die Änderungen rückgängig machen und analyiseren, ob ggf. vergessen worden ist, eines der oben genanten Pakete zu installieren.
Ansonsten kann jetzt der Editor geschlossen werden.
5. Weitere Superuser Befehle
Aber nicht nur der sudo Befehl kann auf diese Weise abgesichert werden. Folgende weitere PAM Module existieren:
| runuser | /etc/pam.d/runuser |
| runuser -l | /etc/pam.d/runuser-l |
| su | /etc/pam.d/su |
| su -l | /etc/pam.d/su-l |
| sudo | /etc/pam.d/sudo |
| sudo -i | /etc/pam.d/sudo-i |
Auch hier, wird einfach nur folgender Eintrag unter der Zeile @include common-auth eingefügt:
... @include common-auth auth required pam_u2f.so cue [cue_prompt="YubiKey berühren für sudo"] ...
Ebenso wie bei dem sudo Befehl, kann hier ebenfalls der Parameter sufficient durch required ersetzt werden. Aber auch hier gilt, dass required einen YubiKey voraus setzt und bei sufficient der YubiKey optional anstatt einem Passwort genutzt werden kann. Und das die Reihenfolge beachtet werden muss, siehe dazu weiter oben Kapitel 4.1.
6. Anmeldung sichern
6.1 Grafischer Login mit GDM
Das Verfahren ist wieder gleich, den oben genannten. Nur das hier jetzt die Datei /etc/pam.d/gdm-password angepasst werden muss.
Datei /etc/pam.d/gdm-password editieren:
$ sudo vi /etc/pam.d/gdm-password
Und dort den Eintrag auth required pam_u2f.so unter der Zeile @include common-auth hinzufügen:
... @include common-auth auth required pam_u2f.so ...
6.2 Text Login sichern
Auf Servern, wo möglicherweise keine grafische Oberfläche installiert wurde, kann auch der TTY Terminal Login abgesichert werden. Die dafür notwendige Datei ist /etc/pam.d/login. Diese muss auch entsprechend editiert werden:
... @include common-auth auth required pam_u2f.so ...
7. Fazit
Der Einsatz eines YubiKey zur Absicherung von PAM-Modulen unter Linux, sowohl für sudo-Befehle als auch für die grafische Anmeldung, bietet eine effektive zusätzliche Sicherheitsebene. Durch die Integration des YubiKey in die PAM-Authentifizierungspfade wird der Zugriff auf privilegierte Aktionen und Benutzerkonten an die physische Anwesenheit des YubiKey geknüpft. Dies erschwert unbefugten Zugriff erheblich und trägt dazu bei, die Integrität des Systems zu wahren. Die sorgfältige Konfiguration der PAM-Module, einschließlich sudo oder der grafischen Anmeldung, gewährleistet eine reibungslose Integration des YubiKeys, und regelmäßige Überprüfungen sind entscheidend, um die Sicherheit aufrechtzuerhalten. Zusammenfassend bietet die Kombination von YubiKey und PAM-Modulen unter Linux eine robuste Sicherheitsmaßnahme zur Absicherung von privilegierten Zugriffen und schützt das System vor unautorisierten Aktivitäten.
Quellen:
https://www.yubico.com/der-yubikey/?lang=de
https://support.yubico.com/hc/en-us/articles/360016649099-Ubuntu-Linux-Login-Guide-U2F
https://support.yubico.com/hc/en-us/articles/360016649039-Installing-Yubico-Software-on-Linux
