SSH-Login mit 2-Factor-Auth (Google Authenticator)
Bisher habe ich gerne One Time Passwords (TOTP, Time based One Time Password) mittels OPIE unter Debian genutzt. Leider ist OPIE in aktuellen Debianversionen nicht mehr dabei.
Als Alternative kann man das PAM-Modul “google_authenticator” verwenden. Es funktioniert zwar etwas anders als OPIE erhöht aber die Sicherheit auf ähnliche Weise. Während man bei OPIE quasi wählen kann ob man sich mit seinem normalen Password oder aber mit einem One-Time-Password anmelden möchte benötigt man beim google_authenticator stets beides.
Um das PAM Modul zu installieren kann man sich entweder den Quelltext unter http://code.google.com/p/google-authenticator/ herunterladen oder das Debian-Paket aus sid verwenden: https://packages.debian.org/sid/admin/libpam-google-authenticator
Ich nutze für diese Anleitung letztere Möglichkeit:
wget http://ftp.de.debian.org/debian/pool/main/g/google-authenticator/libpam-google-authenticator_20130529-2_amd64.deb
apt-get install libqrencode3
dpkg -i libpam-google-authenticator_20130529-2_amd64.deb
Damit ist google_authenticator installiert, fehlt noch die Konfiguration. Hierzu fügt man die folgende Zeile an den Anfang von /etc/pam.d/sshd
ein:
#/etc/pam.d/
#PAM configuration for the Secure Shell service
auth [required] pam_google_authenticator.so
Ab diesem Moment sollte man die aktuelle SSH-Sitzung auf keinen Fall beenden bis sichergestellt ist, dass das neue Modul einwandfrei funktioniert. Andernfalls verliert man die Möglichkeit sich per SSH am System anzumelden.
Fehlt noch die Benutzerkonfiguration. Hierzu ruft man zunächst für jeden Benutzer der sich per SSH am System anmelden soll den Befehl google-authenticator
auf. Dieser erstellt die Datei ~/.google_authenticator
. In dieser sind einige Notfallkennwörter und das Secret auf dessen Basis die TOTPs erzeugt werden, sowie einige Konfigurationsparameter gespeichert. Die Notfallkennwörter sollte man sich auf jeden Fall notieren und sicher verfahren.
Der google-authenticator
stellt nun einige Fragen, die in der Regel alle mit y
beantwortet werden können.
Der Befehl zeigt zudem einen QR-Code an. Mit diesem kann man seinen Account in der Google-Authenticator-App anlegen, alternativ kann man den ebenfalls angezeigten Link verwenden um zum QR-Code zu gelangen. Die entsprechende Google-Authenticator-App gibt es unter:
https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2 (Android) https://itunes.apple.com/en/app/google-authenticator/id388497605?mt=8 (iOS)
Außerdem gibt es Plugins für diverse Browser die ebenfalls die entsprechenden TOTPs generieren können.
Ist die App entsprechend eingerichtet erzeugt sie alle paar Sekunden neue TOTPs mit denen man sich per SSH anmelden kann, neben den TOTPs benötigt man weiterhin das normale SSH-Kennwort.
Den Zugang sollte man nun einmal testen (dabei die ggf. bestehende SSH-Verbindung aber auf jeden Fall geöffnet lassen, falls etwas nicht funktioniert). Der Loginvorgang sollte nun mit der Abfrage Verification code:
beginnen. Gibt man diesen korrekt ein erfolgt die Abfrage nach dem normalen SSH-Kennwort.
Klappt es nicht sollte geprüft werden ob in der Datei /etc/ssh/sshd_config
der Wert ChallengeResponseAuthentication yes
gesetzt ist. Ist dies nicht der Fall muss dies entsprechend geändert und SSH neu gestartet werden (die bereits geöffnete SSH-Verbindung bleibt hierbei bestehen).
Klappt es dann immer noch nicht sollte noch der Eintrag UseDNS no
gesetzt werden. Besser ist es jedoch den entsprechenden Rechner mit einer korrekten Reverse DNS Namensauflösung zu versehen.
Nutzt man SSH-Keys für den Login wird kein TOTP abgefragt, der Login erfolgt also wie gewohnt. Dies ist auch sinnvoll, da sonst ggf. automatisierte Scripte die sich per SSH-Key einloggen nicht mehr funktionieren würden.