Vorwort:

Je intensiver ich an meinen Servern arbeite, desto sicherer müssen sie für mich sein.
Angefangen mit einem Telegram-Bot, der mir Notifications schickt, wenn sich jemand an meinem System anmeldet, bis hin zur Zwei-Faktor Authentifizierung, mit hinterlegtem SSH-Key und Passphrase. Ist das wirklich alles notwendig? Nicht unbedingt, doch Spaß an der Freude und Paranoia gehen hier Hand in Hand.

Für das folgende Szenario ist es besonders wichtig, dass bei allen beteiligten Komponenten die Uhrzeit so genau wie möglich übereinstimmt. Denn zu jeder Uhrzeit ist ein anderer, errechneter Token notwendig und zu verwenden. Deshalb empfiehlt es sich die Zeit mittels NTP zu synchronisieren.

Zusätzlich muss bedacht werden, dass hier eine Gefahr besteht sich auszusperren.

Im folgenden Artikel erkläre ich, wie ich das umgesetzt habe.

Schritt 1 – SSH Key

Hier gibt es mehrere Methoden. Ich erkläre wie es über einen Linux Client funktioniert.

Natürlich geben wir eine Passphrase an, um die Sicherheit nochmals zu erhöhen.
Der Key ist nun generiert und muss auf den Server übertragen werden. Das geht wie folgt.

Folgendes wird ausgegeben:

Auf dem Server wurde jetzt die Datei .ssh/authorized_keys erzeugt.

Die Authentifizierung via SSH Key sollte nun funktionieren.
Im Anschluss noch testen mittels:

Nun kann der Login mittels Passwort deaktiviert werden. Dazu in der /etc/ssh/sshd_config die Einstellung PasswordAuthentication yes zu PasswordAuthentication no ändern und den SSH Server neu starten /etc/init.d/ssh restart.

Schritt 2 – Google Authenticator

Auf dem Server wird folgender Befehl ausgeführt, um den Google Authenticator zu installieren.

Nun muss die Konfigurationsdatei des SSH-Servers angepasst werden.

Dort die Zeile ChallengeResponseAuthentication no durch ChallengeResponseAuthentication yes ersetzen. Außerdem muss UsePAM auf yes stehen.
ACHTUNG: Hier kommt nun die Eigenheit des Public-Keys ins Spiel. Falls KEIN Key verwendet wird, kann folgende Zeile ignoriert werden, andernfalls unbedingt einfügen:
AuthenticationMethods publickey,keyboard-interactive

Im Anschluss folgende Datei anpassen:

Den Eintrag @include common-auth auskommentieren
#@include common-auth
Somit wird bei der Anmeldung nicht noch zusätzlich nach einem Passwort gefragt.
Und am Ende der Datei folgendes eintragen:
#Google Authenticator
auth required pam_google_authenticator.so
Optional kann noch nullok am Ende der Zeile hinzugefügt werden, dadurch kann sich auch noch ohne Authenticator authentifiziert werden. Aber natürlich mit SSH-Key und Passphrase

Nun den SSH-Server neustarten - /etc/init.d/ssh restart

Nun muss der Google Authenticator mit dem Benutzer aufgerufen werden, mit man sich authentifizieren will.

Nun wird folgendes ausgeben:

Der QR-Code kann dann über die Smartphone App (erhältlich für iOS und Android) eingelesen werden. Nach dem Scan erscheint schon der Token.

Falls der QR-Code zu groß für das Fenster ist, kann auch die Eingabe des „secret key“ erfolgen. Außerdem sind fünf Notfall Codes verfügbar, die man sich aufschreiben und benutzen kann, wenn man das Smartphone verliert oder es gerade nicht griffbereit hat.

Um die Konfiguration abzuschließen, die restlichen Fragen mit y beantworten.

Nun ist die Konfiguration abgeschlossen. Um jetzt in das System zu gelangen muss der SSH-Key hinterlegt, die dazugehörige Passphrase bekannt und der Token vorhanden sein.

Viel Spaß beim Ausprobieren.

Sven Singer

Sven Singer

System Engineer

Sven ist unter den Kollegen dafür bekannt alle Probleme „glatt zu ziehen“. War in seinem ersten Leben Fliesenleger: manche Dinge lassen einen nie mehr los. Beschützt alles was ihm lieb und teuer ist. Das gilt nicht nur für seinen 3er BMW, sondern auch für die Daten in der Cloud.

Gefällt dir der Artikel? Bitte teile ihn!
Share on Facebook6Share on Google+0Share on LinkedIn0Email this to someoneTweet about this on Twitter