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
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.
Neueste Kommentare