Zwei-Faktor Authenticator für ssh

Nachdem ich meinen vServer gerade upgegraded habe und ihn dafür leider neu aufsetzen musste, hab ich die Gelegenheit genutzt um mittels PAM eine 2-Faktor Authentifizierung beim Zugriff über SSH zu realisieren. Das ganze funktioniert sehr ähnlich zur 2-Faktor Authentifizierung bei Google und anderen Services, man kann sogar den Google Authenticator benutzen da dieser gültige One-Time Passwörter nach RFC 6238 erzeugt. Also auf ins Vergnügen:

Zuerst installiert man das Paket libpam-google-authenticator (ab Ubuntu 12.04 in den Repositories) etwa so:

sudo apt-get install libpam-google-authenticator

Nun kann man für jeden User der Zwei-Faktor Authentifizierung verwenden will ein Shared-Secret erstellen. Dieses „Geheimnis“ wird anschließend mit einem zweiten Gerät geteilt, woraufhin basierend auf der Zeit und dem Geheimnis ein Einmalpasswort erzeugt werden kann. Das Shared-Secret wird ganz einfach mit einem Aufruf von google-authenticator erstellt. Das Programm fragt auch noch ein paar Einstellungen ab:

  • Sollen die Einmalpasswörter zeitbasiert sein? — Ja
  • Soll die .google-authenticator Datei mit dem neuen Geheimnis upgedated werden? — Ja
  • Sollen mehrere Logins mit dem gleichen Token verboten werden. Dadurch können unter Umständen Man-In-The-Middle Attacken unterbunden werden, aber es kann auch nur noch ein Login / 30 s erfolgen. — Wie man will.
  • Soll die Gültigkeit der Einmalpasswörter von 1:30 min auf 4 Minuten erhöht werden. Das kann hilfreich sein, wenn Smartphone und Server einen großen Zeitunterschied aufweisen. — Wie man will, am besten NTP verwenden.
  • Rate-Limiting aktivieren um die Anzahl an Logins Versuchen auf maximal 3 / 30 Sekunden zu reduzieren — Wie man will.

2-Faktor Authentifizierung PAM Ubuntu

Das Programm erzeugt gleich am Anfang einen großen QR-Code, der mithilfe der Google Authenticator App am Smartphone gescannt werden kann. Außerdem werden Notfallcodes erzeugt, diese sollte man sich unbedingt notieren, da man sich sonst unter Umständen bei Verlust des Authenticators nicht mehr am Server einloggen kann.

Anschließend muss man den SSH-Dienst so konfigurieren, dass dieser für die Authentifizierung PAM (Pluggable Authentication Modules) verwendet und außerdem Challenge Response Passwörter zulässt. Dazu stellt man sicher, dass in der Datei /etc/ssh/sshd_config folgende Werte gesetzt sind:

ChallengeResponseAuthentication yes
UsePAM yes

Eine weitere Konfigurationsdatei muss noch angepasst werden. In der /etc/pam.d/sshd fügt man ganz am Anfang folgende Zeile ein:

auth required pam_google_authenticator.so nullok
Das nullok am Ende bewirkt, dass man sich auch noch mit Benutzern einloggen kann, die die 2-Faktor Authentifizierung nicht aktiviert haben.

Schlußendlich muss der SSH-Dienst noch neugestartet werden:

sudo service ssh restart

Jetzt sollte man die aktuelle SSH-Verbindung auf keinen Fall trennen, sondern sich sicherheitshalber ein zusätzliches mal am Server einloggen um zu testen, ob die Authentifizierung tatsächlich funktioniert. Klappt alles, hat man nun seinen SSH-Dienst um einiges besser abgesichert! Gutes gelingen!

Comments are closed.