2-Faktor-Authentifizierung mit dem Smartphone

Aus LinuxUser 11/2020

2-Faktor-Authentifizierung mit dem Smartphone

© ThomasKoschnick, 123RF

Doppelt sicher

Mithilfe einer Zwei-Faktor-Authentifizierung lässt sich die Anmeldung an einem System ohne großen Aufwand deutlich besser absichern.

Wenn zwischen einem Angreifer und einem Benutzerkonto als einziger Schutz nur ein Passwort steht, macht das sicherheitsbewusste Administratoren nervös – zu Recht. Zwar lassen sich starke Passwörter erzwingen, doch Sorglosigkeit kann man nicht verbieten. Es ist deshalb sinnvoll, auf eine Zwei-Faktor-Authentifizierung umzusteigen. Dabei bleibt das Passwort als ein Faktor der Authentifizierung erhalten, aber ein zweites Element kommt hinzu.

In diesem Artikel zeigen wir, wie Sie beim Login neben dem Passwort zusätzlich ein Einmalpasswort verlangen, das eine App auf dem Smartphone des Benutzers erzeugt. Das Verfahren wurde von der Initiative For Open Authentication (OATH) erdacht und ist seit 2011 ein IETF-Standard.

Vorarbeiten

In unserem Testaufbau arbeiten wir mit Ubuntu 20.04, das Vorgehen ist aber auf anderen Distributionen sehr ähnlich. Es gibt einen Linux-Client und einen Server. Auf dem Server, der in unserem Beispiel influx heißt, gibt es das Konto des Benutzers bob. Bob meldet sich bisher ausschließlich per Passwort an. Sie wollen Bobs Konto aber nun auf eine Zwei-Faktor-Authentifizierung umstellen.

Dazu installieren Sie auf Bobs Client zuerst das Authentifizierungsmodul (Listing 1, erste Zeile). Dann loggen Sie sich als bob ein und starten das Modul (zweite Zeile).

Listing 1

$ sudo apt install libpam-google-authenticator
$ google-authenticator

Das Modul fragt Sie zunächst, ob die Authentifizierung zeitbasiert erfolgen soll. Es will also wissen, ob auf den beteiligten Systemen die identische Uhrzeit (bezogen auf UTC) herrscht. Das können Sie bejahen: Alle halbwegs aktuellen Systeme synchronisieren heute die Uhrzeit über das Network Time Protocol (NTP).

Danach erscheint ein QR-Code (Abbildung 1), den Sie mit einer OTP-App scannen, die Sie auf Ihrem Smartphone installieren. Davon gibt es eine Fülle; Sie können jede App verwenden, die das TOTP-Protokoll nutzt. Großer Beliebtheit erfreut sich etwa die App Google Authenticator, die aber nicht quelloffen ist.

Abbildung 1: Den von Google Authenticator erzeugten QR-Code scannen Sie mit einer OTP-App wie FreeOTP.

Abbildung 1: Den von Google Authenticator erzeugten QR-Code scannen Sie mit einer OTP-App wie FreeOTP.

Für unser Beispiel installieren wir die von Red Hat entwickelte App FreeOTP, die es für iOS [1] und Android [2] gibt (Abbildung 2). Nachdem Sie den Code gescannt haben, erscheint eine neue Schaltfläche in der App, über die Sie jederzeit ein Einmalpasswort erzeugen können, das dann 30 Sekunden lang gilt.

Abbildung 2: Im Gegensatz zu Google Authenticator ist das von Red Hat entwickelte FreeOTP eine quelloffene Anwendung.

Abbildung 2: Im Gegensatz zu Google Authenticator ist das von Red Hat entwickelte FreeOTP eine quelloffene Anwendung.

Legen Sie das Smartphone nun zunächst zur Seite, und kehren Sie zurück auf die Konsole. Unterhalb des QR-Codes aus Abbildung 1 finden Sie noch eine Reihe sogenannter Emergency Scratch Codes. Falls Sie Ihr Smartphone verlieren sollten, können Sie sich mit diesen Codes noch einloggen, um einen neuen QR-Code zu generieren und damit von vorn anzufangen. Jeder der Emergency Scratch Codes lässt sich nur einmal benutzen. Speichern Sie diese Codes an einem sicheren Ort.

Jetzt stellt Ihnen Google Authenticator noch eine Reihe von Sicherheitsfragen, die Sie alle getrost mit y beantworten können (Abbildung 3). Es geht dabei darum, die Anzahl der Logins pro Zeitintervall zu begrenzen, aber gleichzeitig eine gewisse Toleranz für Zeitunterschiede zwischen Client und Server zu gewährleisten.

Abbildung 3: Alle von Google Authenticator gestellten Fragen k&ouml;nnen Sie mit <code>y</code> beantworten.

Abbildung 3: Alle von Google Authenticator gestellten Fragen können Sie mit y beantworten.

Diese Schritte müssen Sie für jeden Benutzer auf dem System vornehmen, der die Zwei-Faktor-Authentifizierung verwenden soll. Auf der Client-Seite sind damit alle Arbeiten erledigt; es geht auf dem Server weiter.

PAM anpassen

Um den Zugriff per Zwei-Faktor-Authentifizierung zu aktivieren, müssen Sie noch zwei Konfigurationsdateien anpassen, wofür Sie Root-Rechte benötigen.

Den Anfang macht die Datei /etc/ssh/sshd_config. Finden Sie darin die beiden Zeilen, die mit UsePAM und ChallengeResponseAuthentication beginnen, und stellen Sie sicher, dass beide auf yes enden (Listing 2).

Listing 2

UsePAM yes
[...]
ChallengeResponseAuthentication yes

Danach editieren Sie, ebenfalls als Root, die Datei /etc/pam.d/sshd. Weit oben in der Datei steht die Zeile @include common-auth. Fügen Sie dahinter die Zeile auth required pam_google_authenticator.so ein, sodass die Abfolge wie in Listing 3 aussieht.

Listing 3

[...]
@include common-auth
auth required pam_google_authenticator.so
[...]

Nun starten Sie den SSH-Dienst mit dem Kommando systemctl restart ssh einmal durch. Beim nächsten Login-Versuch per SSH (Abbildung 4) fragt der Server jetzt nicht mehr nur das Benutzerpasswort ab (Password: im Screenshot), sondern auch das Einmalpasswort (Verification Code:), das Sie per App erzeugen.

Abbildung 4: Der Anmeldedialog fragt neben dem Benutzerpasswort (<code>Password:</code>) nun auch das Einmalpasswort (<code>Verification Code:</code>) ab.

Abbildung 4: Der Anmeldedialog fragt neben dem Benutzerpasswort (Password:) nun auch das Einmalpasswort (Verification Code:) ab.

Login auf der Konsole

Die Änderungen, die Sie bisher vorgenommen haben, gelten nur für den Zugriff per SSH. Möchten Sie die Zwei-Faktor-Authentifizierung nicht nur für den entfernten Login aktivieren, sondern auch für den lokalen, ändern Sie dazu die Datei /etc/pam.d/login (Listing 4).

Listing 4

[...]
@include common-auth
session optional pam_motd.so noupdate
# diese Zeile einfuegen:
auth required pam_google_authenticator.so
[...]

Es genügt, hinter der Zeile @include common-auth die Zeile auth required pam_google_authenticator.so einzufügen. Die im Listing vorhandene Zeile session optional pam_motd.so noupdate dient zur Anzeige von Benachrichtigungen (Message of the Day) und ist nicht auf jedem System vorhanden.

Window-Manager GDM

Falls Ihr System Gnome als grafische Benutzeroberfläche nutzt, können Sie auch hier die Zwei-Faktor-Authentifizierung beim Login aktivieren. Sie nehmen dazu dieselbe Änderung wie im vorigen Abschnitt noch einmal vor, nur in einer anderen Datei: der /etc/pam.d/gdm-password (Listing 5). Nach einem Neustart fragt auch Gnome den zweiten Faktor beim Login mit ab.

Listing 5

[...]
@include common-auth
# diese Zeile einfuegen:
auth required pam_google_authenticator.so
[...]

Passwortlose Anmeldung

Lassen Sie uns noch einmal zum Login per SSH zurückkommen. Viele Benutzer bevorzugen den passwortlosen Zugang per Public-Key-Authentifizierung. Dazu gibt der Benutzer bob auf seinem Client das Kommando ssh-keygen -t rsa -b 4096 ein, um ein Schlüsselpaar zu generieren (Abbildung 5).

Abbildung 5: F&uuml;r das passwortlose Login erzeugt Bob auf seinem Client ein Schl&uuml;sselpaar.

Abbildung 5: Für das passwortlose Login erzeugt Bob auf seinem Client ein Schlüsselpaar.

Danach genügt das Kommando ssh-copy-id bob@influx, gefolgt von der Eingabe des aktuellen Passworts, und Bob kann sich fortan ohne Passworteingabe auf unserem Beispiel-Server influx anmelden. Auch diese Art des Logins lässt sich mit der Zwei-Faktor-Authentifizierung kombinieren.

Dazu ändern Sie zwei Konfigurationsdateien auf dem Server, die Sie bereits kennengelernt haben. Öffnen Sie zunächst die /etc/ssh/sshd_config, und geben Sie am Dateiende folgende Zeile ein:

AuthenticationMethods publickey,keyboard-interactive

Die zweite Datei, die Sie bearbeiten müssen, ist wieder die /etc/pam.d/sshd. Hier deaktivieren Sie die Zeile @include common-auth, indem Sie ihr ein Hash-Zeichen (#) voranstellen:

#@include common-auth

Starten Sie anschließend den SSH-Dienst mit dem Kommando systemctl restart ssh neu. Wenn Bob sich nun auf dem Server einloggt, muss er zwar kein Passwort eingeben, wohl aber das Einmalpasswort aus der Smartphone-App.

Fazit

Sicherheit ist keine Hexerei. Wie Sie gesehen haben, lässt sich schon mit einfachen Mitteln die Anmeldung an einem System mithilfe einer Zwei-Faktor-Authentifizierung deutlich besser absichern. Das bietet einen erhöhten Schutz gegen unerwünschte Besucher, selbst wenn der Anwender ein schwaches Passwort wählt. (jlu)

Glossar

UTC

Coordinated Universal Time / Temps universel coordonné. Weltzeit für einheitliche Zeitangaben, entspricht MEZ – 1 beziehungsweise der früheren Greenwich Mean Time (GMT). Coordinated bedeutet, dass UTC Schwankungen der Erdrotation durch gelegentliche Schaltsekunden ausgleicht.

OTP

One-time Password. Ein Einmalkennwort gilt nur für eine einzige Verwendung und kann kein zweites Mal benutzt werden.

TOTP

Time-based One-time Password Algorithmus. Verfahren zum Erzeugen von zeitlich limitierten Einmalkennwörtern auf Basis des Keyed-Hash Message Authentication Code (HMAC).

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 11/2020 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

1 Kommentar
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Stephan
5 Jahre her

Zu erwähnen wäre noch, dass sowohl google-authenticator-libpam als auch google-authenticator Open Source sind und eine Apache-2.0 License haben.

Nach oben