MFA on Linux: TOTP & U2F (Artikel 318)
Implementierung von Multi-Faktor-Authentifizierung (MFA) unter Linux. Erfahren Sie alles über zeitbasierte Einmalpasswörter (TOTP) und Hardware-Token via U2F/FIDO2.
# Multi-Faktor-Authentifizierung: Die zweite Mauer
TL;DR / Management Summary Ein gestohlenes Passwort oder ein geleakter SSH-Key sind in Enterprise-Umgebungen ein GAU. Multi-Faktor-Authentifizierung (MFA) ist der einzige effektive Schutz gegen Identitätsdiebstahl. Wir integrieren TOTP (Software-Token wie Google Authenticator) und U2F/FIDO2 (Hardware-Token wie YubiKeys) direkt in den Linux-Login-Prozess (PAM). Ziel ist es, dass ein Login nur dann erfolgreich ist, wenn der Admin etwas weiß (Passwort) und etwas besitzt (Smartphone oder Hardware-Key).
# 1. Einführung & Architektur
Wie der zweite Faktor in Linux einzieht.
MFA wird als zusätzliches Modul in den PAM-Stack (Artikel 317) eingehängt. Erst wenn beide Module (Passwort + Token) Erfolg melden, wird der Zugriff gewährt.
# Die MFA-Optionen (Mermaid)
graph TD
A[User Login Attempt] --> B[Factor 1: Password / SSH Key]
B -->|Success| C{Factor 2 Choice}
C -->|Option A: TOTP| D[Google Authenticator / Authy]
C -->|Option B: FIDO2| E[Hardware Key: YubiKey / SoloKey]
D -->|Verify Code| F[Access Granted]
E -->|Physical Touch| F
B -->|Fail| G[Access Denied]
# 2. Praxis: SSH mit Google Authenticator (TOTP)
Sicherheit für Remote-Admins.
# Schritt 1: Pakete installieren
sudo apt install libpam-google-authenticator # Debian
sudo dnf install google-authenticator # RHEL
# Schritt 2: Token generieren (pro User)
google-authenticator
# Beantworten Sie die Fragen mit 'y'. Scannen Sie den QR-Code mit Ihrem Smartphone.
# Schritt 3: PAM konfigurieren (/etc/pam.d/sshd)
Fügen Sie die Zeile am Anfang hinzu:
auth required pam_google_authenticator.so
# Schritt 4: SSH konfigurieren (/etc/ssh/sshd_config)
KbdInteractiveAuthentication yes
# Falls SSH-Keys genutzt werden (beides verlangen!):
AuthenticationMethods publickey,keyboard-interactive
# 3. Hardware-Sicherheit: U2F/FIDO2
Kryptografie zum Anfassen.
U2F ist resistent gegen Phishing, da der Key nur mit der echten Gegenstelle spricht.
# Einrichtung via pam_u2f
- Paket:
pam_u2finstallieren. - Key registrieren:
mkdir ~/.config/Yubico pamu2fcfg > ~/.config/Yubico/u2f_keys - PAM:
auth required pam_u2f.soin die gewünschte Config (z.B.sudo) eintragen.
# 4. Day-2 Operations: Backup-Codes & Notfall
Wenn das Handy im See landet.
MFA kann den Admin aussperren.
- Best Practice: Generieren Sie bei der Einrichtung von TOTP immer Backup-Codes und speichern Sie diese im Firmen-Safe.
- Admin-Zugang: Hinterlegen Sie einen “Emergency-Host” im RZ, der nur via physischer Konsole und lokalem Root-Passwort (ohne MFA) erreichbar ist.
# 5. Troubleshooting & “War Stories”
Wenn die Uhrzeit alles bricht.
# Story 1: “Der Time-Drift Fail”
Symptom: Der User gibt den absolut korrekten Code aus der App ein, aber Linux meldet “Invalid Code”. Ursache: TOTP basiert auf der aktuellen Uhrzeit (Time-based). Wenn die Uhr des Servers mehr als 30-60 Sekunden von der Uhr des Smartphones abweicht, passen die Codes nicht mehr zusammen. Lösung: Aktivieren Sie NTP auf dem Server (siehe Artikel 334).
# Story 2: “SSH-Key vs. MFA”
Symptom: Der Admin hat MFA für SSH konfiguriert, wird aber beim Login mit SSH-Key nie nach dem Code gefragt.
Ursache: Standardmäßig beendet SSH den Auth-Vorgang nach einem erfolgreichen Key-Login. Der PAM-Stack für auth wird dann oft übersprungen.
Lösung: Nutzen Sie AuthenticationMethods publickey,keyboard-interactive in der sshd_config, um beide Faktoren nacheinander zu erzwingen.
# 6. Fazit & Empfehlung
- Standard: Nutzen Sie TOTP für alle SSH-Zugänge. Es kostet nichts und ist einfach auszurollen.
- Hochsicherheit: Nutzen Sie FIDO2/YubiKeys für Sudo-Befehle und lokale Logins auf Admin-Laptops.
- Benutzerfreundlichkeit: Aktivieren Sie MFA erst nach einer Ankündigungsfrist und einem Test-Zeitraum im
optionalModus.
# Anhang: Cheatsheet
| Aufgabe | Tool / Befehl |
|---|---|
| TOTP Init | google-authenticator |
| U2F Key registrieren | pamu2fcfg |
| MFA für Sudo | /etc/pam.d/sudo anpassen |
| Notfall-Codes finden | ~/.google_authenticator (erste Zeilen) |
| SSH Auth Methoden | `sshd -T |
| Hardware Token Test | `lsusb |
| PAM Modul Pfad | /lib/security/ |