Ubuntu-Login mit Zwei-Faktor Authentifizierung absichern

QR-Code

Die Sicherheit von User-Accounts wird nicht nur im geschäftlichen Bereich immer wichtiger, auch private Rechner enthalten sensible Daten, die vor fremdem Zugriff geschützt werden sollten. Mit einer Zwei-Faktor Authentifizierung minimiert man auch das Risiko, durch schwache oder gerne verwendete Passwörter Hackern das Leben leicht zu machen. Die Verwendung eines One-Time-Passwords (OTP, Einmalpasswort) ist zudem eine anwenderfreundliche Methode, um etwas mehr Sicherheit zu generieren. Dies gilt nicht für den Login am Desktop, denn mit einer Live-CD kann dieser Schutz einfach ausgehebelt werden. Diese Methode ist vor allem für SSH-Remote-Verbindungen gedacht.
In diesem Beitrag beschreibe ich die Einrichtung mit dem Google Authenticator auf einem Ubuntu-System und einem Token-Generator auf einem Android Smartphone.

Hinweis: Die folgende Anleitung funktioniert nicht bei -> verschlüsseltem home-Verzeichnis, da PAM im Moment des Logins noch nicht auf die erforderlichen Daten zugreifen kann! Keine Probleme gibt es bei verschlüsselten Partitionen.

Wie funktioniert ein One-Time-Password?

Aus der Sicht des Anwenders muss zusätzlich zum Passwort ein meist 6-stelliger Zahlencode eingegeben werden, der auf einem zweiten Gerät (z.B. einem Smartphone) generiert wird und nur für kurze Zeit gültig ist.

Technisch gesehen muss sowohl das System als auch der User das OTP kennen. Bei den TAN-Listen für Online-Überweisungen hat der User eine Liste der Einmalkennwörter, die auch dem System bekannt sind. Wird eine TAN verwendet, erlischt ihre Gültigkeit und sowohl User als auch System streichen die TAN aus ihrer Liste. Problematisch dabei ist, dass diese Listen Unbefugten bekannt werden könnten. Durch eine dynamische Generierung der Einmalkennwörter wird das vermieden.

Ich beschränke mich hier auf das zeitgesteuerte Verfahren, bei dem sowohl das System als auch der Generator den Algorithmus für die Generierung besitzt, den Time-based One-time Password Algorithmus (TOTP). Wer sich mit der genauen Funktion der Passworterzeugung näher beschäftigen möchte, findet bei -> Wikipedia eine ausführliche Erläuterung dazu.

Installation auf Ubuntu 16.04

Zunächst installiert man das Paket Google-Authenticator auf dem Ubuntu-System.

:~$ sudo apt update
:~$ sudo apt-get install libpam-google-authenticaton

Konfiguration von FreeOTP

Anstelle des Google Authenticator verwende ich FreeOTP, da diese Software Opensource ist. FreeOTP kann über den Google Playstore installiert werden. Auf dem Rechnersystem wird im Terminal die Konfiguration aufgerufen mit

:~$ google-authenticator
Do you want authentication tokens to be time-based (y/n)

Da ich ein zeitbasiertes Token verwenden möchte antworte ich mit y und erhalte einen QR-Code, sowie den Secret Key und Emergency Scratch Codes.

QR-Code aus Google Authenticator
QR-Code aus Google Authenticator

Diesen Barcode scannt man mit FreeOTP auf dem Smartphone ab.

Einrichten über QR-Code
Einrichten über QR-Code

Alternativ kann man auch über Schlüssel hinzufügen den Secret Key per Hand eintragen, der unter dem Barcode angezeigt wird. Alle weiteren Fragen beantworte ich mit y.

Your new secret key is: JDQWWMEQFYA5IUDC
Your verification code is 068129
Your emergency scratch codes are:
  41853321
  88357914
  80763204
  70520773
  60960856

Do you want me to update your "/home/impuscatura/.google_authenticator" file (y/n)

Do you want to disallow multiple uses of the same authentication<br>token? This restricts you to one login about every 30s, but it increases<br>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) y

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. <br>Do you want to enable rate-limiting (y/n) y

Die im home-Verzeichnis jetzt liegende Datei .google-authenticator sollte man zusätzlich als Kopie auf einem sicheren Speicher aufbewahren. Hier sind sowohl der Secret Key als auch die Emergency Scratch Codes enthalten.

OTP aktivieren

Um beim allen Authentifizierungsvorgängen die Abfrage des OTP zu aktivieren, editiert man die Datei common-auth.

:~$ sudo nano /etc/pam.d/common-auth

Hier wird nun der Authenticator mit auth required pam_google_authenticator.so nullok als erste (!) Authentifizierungsregel eingefügt.

# here are the per-package modules (the "Primary" block)
auth    required        pam_google_authenticator.so nullok
auth    [success=1 default=ignore]      pam_unix.so nullok_secure
# here's the fallback if no module succeeds

Das nullok sorgt dafür, dass sich andere User, die noch keine Zwei-Faktor-Authentifizierung konfiguriert haben trotzdem einloggen können.

sudo ohne OTP

Da in der Datei common-auth festgelegt wurde, dass sofern konfiguriert jede Authentifizierung mit einem OTP erfolgen muss, wird auch bei einem sudo-Kommando das Einmalpasswort verlangt. Auf Dauer stört das ungemein. Das kann verhindert werden, indem man die Datei /etc/pam.d/sudo editiert. Dort wird mit @include common-auth die Konfiguration aus der Datei common-auth eingebunden. Diese Zeile wird daher auskommentiert und der Inhalt der common-auth wird ohne die Zeile

auth    required    pam_google_authenticator.so    nullok 

dort eingefügt.

OTP beim Login aushebeln

Bootet man mit einer Live-CD, lässt sich die Zeile aus der common-auth einfach wieder entfernen und damit die Zwei-Faktor-Authentifizierung umgehen bzw. abschalten

Zum Thema Zwei-Faktor Authentifizierung für SSH gibt es eine Vielzahl von Artikeln im Netz, so dass ich hier auf -> Thomas Krenn und das Ubuntu -> Wiki verweisen kann.

Buy Me a Coffee at ko-fi.com

You May Also Like

2 Comments

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Aus persönlichen Gründen...

... kann ich den Blog im Moment leider nicht wie gewohnt betreuen und Anfragen zeitnah beantworten. Lediglich die technische Funktionalität versuche ich aufrecht zu erhalten. Sollte es trotzdem was Neues hier geben, dann schreibe ich eine Info in die Telegram-Gruppe.


In der Telegram-Gruppe können Sie sich weiterhin mit anderen Lesern von Împuşcătura austauschen.

Zur Telegram-Gruppe