OpenSSH mit Two-Factor-Authentication absichern

Vor einiger Zeit hatte ich einmal einen Artikel zur Absicherung von OpenSSH veröffentlicht. Jeder hat da ja so seine eigene Philosophie. Während die einen auf Authentisierung via Schlüsseldateien schwören, setzen andere zusätzliche Maßnahmen wie Port-Knocking oder vorgeschaltete VPNs ein, um den kostbaren Systemzugang abzusichern.

Ich bin da hingegen von der einfachen Sorte. Die Gefahr, den privaten Schlüssel für den Login zu verlieren oder in einer dringenden Situation nicht verfügbar zu haben, ist mir persönlich zu hoch - trotz entsprechender Vorkehrungen. Deshalb habe ich mich bisher auf meine starken Passwörter verlassen. Doch warum nicht ein wenig Sicherheit einführen, wenn es einfach und sinnvoll ist?

Das dachte ich mir zumindest, als ich hörte, dass es zum Google Authenticator auch ein passendes PAM gibt. PAM steht hierbei für Pluggable Authentication Modules, die es unter Linux ermöglichen, eigene Authentisierungsmechanismen für den Systemlogin einzubinden. Also machte ich mich an die Arbeit und kümmerte mich um die Installation. Dabei hatte ich das Ziel, als Systembetreiber entscheiden zu können, welche Nutzer die Zwei-Faktor-Authentisierung nutzen müssen. Die einzelnen Schritte sind ziemlich einfach. So ziemlich jeder Linux-Admin sollte in der Lage sein, sie nachzuverfolgen.

Als erstes sollte man natürlich die Google Authenticator App aus dem App-Store seiner Wahl laden - zum Beispiel aus dem Google Play Store oder dem Apple iTunes Store. Sollte man weder Android-Smartphone noch iPhone besitzen, muss man die Hoffnung trotzdem nicht gleich aufgeben. Die ganze Codegenerierung basiert auf dem RFC-6238, in dem der relativ simple Time-based One-Time Password Algorithmus (TOTP) beschrieben ist.

Als nächstes sollte man sein System vorbereiten. Die Installation der folgenden Bibliothek ist zwar nicht zwingend erforderlich, sie vereinfacht jedoch die Nutzung, da man seinen geheimen Schlüssel später nicht abtippen braucht, sondern einfach einen QR-Code abscannen kann:

1
sudo apt-get install libqrencode3

Als nächstes ladet ihr das Google-Authenticator Modul herunter und installiert es:

1
2
3
4
5
cd ~

wget http://ftp.us.debian.org/debian/pool/main/g/google-authenticator/libpam-google-authenticator_20130529-2_amd64.deb

sudo dpkg -i ./libpam-google-authenticator_20130529-2_amd64.deb

Da ich möchte, dass sich nur eine bestimmte Gruppe von Nutzern per Zwei-Faktor-Authentisierung einloggen muss, lege ich mir vorher noch die entsprechende Gruppe "google-auth" im System an:

1
sudo groupadd google-auth

Nun solltet ihr OpenSSH mitteilen, dass die Zwei-Faktor-Authentisierung genutzt werden soll. Dazu öffnet ihr die Datei "/etc/ssh/sshd_conf" und tragt dort folgende Zeile ein:

1
ChallengeResponseAuthentication yes

Anschließend müsst ihr dem System noch mitteilen, dass das entsprechende PAM genutzt werden soll. Dazu öffnet ihr die Datei "/etc/pam.d/sshd" und tragt dort folgendes mit ein (ich habe es unter die restlichen "auth"-Einträge geschrieben):

1
2
auth [success=1 default=ignore] pam_succeed_if.so user notingroup google-auth
auth required pam_google_authenticator.so

Die erste der beiden Zeilen prüft, ob der Nutzer, der sich gerade einloggen möchte, in der Gruppe "google-auth" befindet. Ist das der Fall, so wird der nächste "auth"-Eintrag berücksichtigt. Befindet er sich hingegen nicht in der Gruppe, so sorgt "success=1" dafür, dass der nächst folgende "auth"-Eintrag einfach ignoriert wird.

Jetzt müsst ihr nur noch OpenSSH neu starten. Bleibt danach jedoch am besten noch eingeloggt. Sollte bis hier hin etwas schief gelaufen sein, wäre es schlecht, wenn ihr euch den SSH-Zugang versperrt. So könnt ihr im Problemfall die bisherigen Änderungen rückgängig machen:

1
sudo /etc/init.d/ssh restart

Öffnet am besten einen neuen Terminal und versucht, ob ihr euch immernoch normal per SSH einloggen könnt. Klappt das? Sehr gut! Dann könnt ihr mit den folgenden Schritten weitermachen. 🙂

Bittet die Nutzer, die die Zwei-Faktor-Authentisierung nutzen sollen, sich einzuloggen und folgenden Befehl auszuführen:

1
google-authenticator

Nach dem Ausführen des Befehls wird ein riesiger QR-Code angezeigt, den ihr mit der Google Authenticator App abscannen könnt. Alternativ könnt ihr händisch den "secret key" in die App eintippen. Ihr solltet euch zudem unbedingt die "emergency scratch codes" an einem sicheren Ort notieren. Das sind Einmal-Zugangscodes, die ihr verwenden könnt, falls ihr eure Google Authenticator App verloren haben solltet.

Euch werden zudem ein paar Fragen gestellt, die die Sicherheit des Verfahrens betreffen. Folgendermaßen würde ich an dieser Stelle antworten:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Do you want me to update your "~/.google_authenticator" file (y/n) y

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y

By default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n) n

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n) y

Damit habt ihr es fasst geschafft. Der letzte Schritt ist es, den Nutzer, der die Zwei-Faktor-Authentisierung nutzen soll, in die Gruppe "google-auth" aufzunehmen - dabei muss "<username>" durch den Namen des Nutzers ersetzt werden:

1
sudo usermod -a -G google-auth <username>

Nun könnt ihr in einem neuen Terminal versuchen, euch mit dem jeweiligen Nutzer einzuloggen. Sollte auch das immernoch funktionieren, seid ihr fertig! Ihr habt erfolgreich eine Zwei-Faktor-Authentisierung in OpenSSH eingerichtet und diese für einen eurer Nutzer aktiviert. 🙂

Zweifache Grüße, Kenny

Schreibe einen Kommentar

Um Ihnen beim weiteren Kommentieren auf dieser Webseite die erneute Eingabe Ihrer Daten zu ersparen, wird beim Absenden Ihres Kommentars ein Cookie an Ihren Browser gesendet und von diesem gespeichert. Mit dem Absenden eines Kommentars auf dieser Webseite stimmen Sie der Speicherung und Übertragung dieses Cookies explizit zu.

Pflichtfelder sind mit * markiert.