So konfigurieren Sie die Multi-Factor-Authentifizierung unter Ubuntu 18.04

Der Autor hat die Electronic Frontier Foundation ausgewählt, um eine Spende im Rahmen der Write for zu erhalten DOnations program.

Einführung

Die Zwei-Faktor-Authentifizierung (2FA) ist eine Authentifizierungsmethode, bei der mehr als eine Information eingegeben werden muss, um sich erfolgreich bei einem Konto oder Gerät anzumelden. Zusätzlich zur Eingabe einer Kombination aus Benutzername und Kennwort muss der Benutzer in 2FA zusätzliche Informationen eingeben, z. B. ein Einmalkennwort (OTP), z. B. einen sechsstelligen Bestätigungscode.

Im Allgemeinen fordert 2FA den Benutzer auf, Informationen verschiedener Typen einzugeben:

  • Etwas, das der Benutzer kennt, wie z. B. ein Passwort

  • Etwas, das der Benutzer hat, z. B. den von einer Authentifizierungsanwendung generierten Bestätigungscode

2FA ist eine Teilmenge der Multi-Faktor-Authentifizierung (MFA), die zusätzlich zu dem, was der Benutzer weiß und was er hat, etwas erfordert, das der Benutzer ist. Dies ist der Fall bei der Biometrie, die Technologien wie Fingerabdruck oder Spracherkennung verwendet.

2FA stärkt den Authentifizierungsprozess für einen bestimmten Dienst oder ein bestimmtes Gerät: Selbst wenn das Kennwort kompromittiert würde, müsste ein Angreifer Zugriff auf das Gerät des Benutzers haben, auf dem sich die Authentifizierungs-App befindet, mit der die Sicherheitscodes generiert werden. Aus diesem Grund bieten viele Onlinedienste (including DigitalOcean) die Möglichkeit, 2FA für Benutzerkonten zu aktivieren, um die Kontosicherheit bei der Authentifizierung zu erhöhen Phase.

In diesem Handbuch konfigurieren Sie 2FA für einen Benutzer ohne Rootberechtigung in einer Ubuntu 18.04-Installation mit dem Google PAM-Modul. Da Sie 2FA für den Benutzer ohne Rootberechtigung konfigurieren, können Sie im Falle einer Sperrung weiterhin von Ihrem * root * -Konto auf den Computer zugreifen. Das Tutorial ist allgemein genug, um sowohl auf Server- als auch auf Desktop-Installationen, sowohl lokal als auch remote, angewendet zu werden.

Voraussetzungen

Bevor Sie mit diesem Handbuch beginnen, benötigen Sie Folgendes:

  • Eine Ubuntu 18.04 Server- oder Desktop-Umgebung. Wenn Sie einen Ubuntu-Server verwenden, richten Sie ihn ein, indem Sie der Anleitung Ubuntu 18.04 initial server setup folgen. Einschließlich eines Nicht-Root-Benutzers mit Sudo-Berechtigungen und einer Firewall.

  • Eine auf Ihrem Mobilgerät installierte Authentifizierungsanwendung, mit der Sie 2FA-QR-Codes scannen können, z. B. Google Authenticator oder Authy.

Schritt 1 - Installieren des Google PAM-Moduls

Um 2FA unter Ubuntu 18.04 zu konfigurieren, müssen Sie Googles PAM-Modul für Linux installieren. Das Pluggable Authentication Module (PAM) ist der Authentifizierungsmechanismus, den Linux verwendet. Mithilfe des PAM-Moduls von Google können sich Ihre Nutzer über 2FA mit von Google generierten OTP-Codes authentifizieren.

Melden Sie sich zunächst als Benutzer ohne Rootberechtigung an, den Sie in den Voraussetzungen konfiguriert haben:

ssh @

Aktualisieren Sie die Ubuntu-Repositorys, um die neueste Version des Authentifikators herunterzuladen:

sudo apt-get update

Nachdem Ihre Repositorys auf dem neuesten Stand sind, installieren Sie die neueste Version des PAM-Moduls:

sudo apt-get install libpam-google-authenticator

Dies ist ein sehr kleines Paket ohne Abhängigkeiten, daher dauert die Installation einige Sekunden. Im nächsten Abschnitt konfigurieren Sie 2FA für den Benutzer ohne Rootberechtigung auf dem System.

Schritt 2 - Konfigurieren von 2FA für einen Benutzer

Nachdem Sie das PAM-Modul installiert haben, führen Sie es aus, um einen QR-Code für den angemeldeten Benutzer zu generieren. Dadurch wird der Code erstellt, für die Ubuntu-Umgebung ist jedoch kein 2FA erforderlich, bis Sie ihn später in diesem Lernprogramm aktivieren.

Führen Sie den Befehl + google-authenticator + aus, um das PAM-Modul zu starten und zu konfigurieren:

google-authenticator

Der Befehl zeigt eine Eingabeaufforderung an, in der Sie verschiedene Konfigurationsfragen stellen. In der ersten Frage werden Sie gefragt, ob Tokens zeitbasiert sein sollen. Zeitbasierte Authentifizierungstoken laufen nach einer festgelegten Zeitspanne ab, die auf den meisten Systemen standardmäßig 30 Sekunden beträgt. Zeitbasierte Token sind sicherer als Token, die nicht zeitbasiert sind, und die meisten 2FA-Implementierungen verwenden sie. Sie können hier eine der beiden Optionen auswählen. In diesem Lernprogramm wird jedoch "+ Ja +" ausgewählt, um zeitbasierte Authentifizierungstoken zu verwenden:

OutputDo you want authentication tokens to be time-based (y/n)

Nachdem Sie diese Frage beantwortet haben, werden mehrere Zeilen auf Ihrer Konsole ausgegeben:

  • Ein QR-Code: Dies ist der Code, den Sie mit Ihrer Authentifikator-App scannen müssen. Sobald Sie es gescannt haben, verwandelt es sich sofort in ein Code-generierendes Gerät, das alle 30 Sekunden ein neues OTP erstellt.

  • Ihr geheimer Schlüssel: Dies ist eine alternative Methode zum Konfigurieren Ihrer Authentifizierungs-App. Wenn Sie eine App verwenden, die das QR-Scannen nicht unterstützt, können Sie den geheimen Schlüssel eingeben, um Ihre Authentifizierungs-App zu konfigurieren.

  • Ihr Bestätigungscode: Dies ist der erste sechsstellige Bestätigungscode, den dieser spezielle QR-Code generiert.

  • Ihre Notfall-Scratch-Codes: Mit diesen Einmal-Token, die auch als Backup-Codes bezeichnet werden, können Sie die 2FA-Authentifizierung bestehen, wenn Sie Ihr Authentifizierungsgerät verlieren. Bewahren Sie diese Codes an einem sicheren Ort auf, um eine Sperrung des Kontos zu vermeiden.

Nachdem Sie Ihre Authentifizierungs-App konfiguriert und Ihre Sicherungscodes an einem sicheren Ort gespeichert haben, werden Sie gefragt, ob Sie die Konfigurationsdatei aktualisieren möchten. Wenn Sie "+ n " wählen, müssen Sie das Konfigurationsprogramm erneut ausführen. Sie werden ` y +` eingeben, um Ihre Änderungen zu speichern und fortzufahren:

OutputDo you want me to update your "~/.google_authenticator" file (y/n)

In der nächsten Frage werden Sie gefragt, ob Sie die mehrfache Verwendung von Authentifizierungscodes nicht zulassen möchten. Standardmäßig können Sie jeden Code nur einmal verwenden, auch wenn er 30 Sekunden lang gültig ist. Dies ist die sicherste Option, da hierdurch Wiederholungsangriffe eines Angreifers verhindert werden, der es irgendwie geschafft hat, Ihren Bestätigungscode zu erfassen, nachdem Sie ihn verwendet haben. Aus diesem Grund ist es sicherer, die mehrfache Verwendung von Codes zu verbieten. Beantworten Sie + y +, um die mehrfache Verwendung desselben Tokens zu verbieten:

OutputDo 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)

In der nächsten Frage werden Sie gefragt, ob Authentifizierungstoken kurz vor oder nach ihrer normalen Gültigkeitsdauer akzeptiert werden sollen. Bestätigungscodes sind sehr zeitkritisch. Das bedeutet, dass Ihre Token abgelehnt werden können, wenn Ihre Geräte nicht synchronisiert sind. Mit dieser Option können Sie dieses Problem umgehen, indem Sie die Standardgültigkeitsdauer der Bestätigungscodes verlängern, sodass Ihre Authentifizierungscodes auch dann akzeptiert werden, wenn Ihre Geräte vorübergehend nicht synchron sind. Stellen Sie am besten sicher, dass auf allen Geräten die gleiche Zeit eingestellt ist, da die Auswahl von "+ yes " die Sicherheit Ihres Systems beeinträchtigt. Beantworten Sie diese Frage mit " n +", um keine Nachfrist zu setzen:

OutputBy 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)

In der letzten Frage werden Sie gefragt, ob Sie die Geschwindigkeitsbegrenzung für Anmeldeversuche aktivieren möchten. Dies erlaubt nicht mehr als drei fehlgeschlagene Anmeldeversuche alle 30 Sekunden, was eine gute Technik zur Stärkung der Sicherheit ist. Aktivieren Sie es, indem Sie auf "+ y +" antworten:

OutputIf 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)

Sie haben jetzt 2FA-Codes für den Benutzer ohne Rootberechtigung mit dem PAM-Modul konfiguriert und generiert. Nachdem Ihre Codes generiert wurden, müssen Sie 2FA in Ihrer Umgebung aktivieren.

Schritt 3 - Aktivieren von 2FA in Ubuntu

Das Google PAM-Modul generiert jetzt 2FA-Codes für Ihren Benutzer. Ubuntu weiß jedoch noch nicht, dass die Codes für die Authentifizierung des Benutzers verwendet werden müssen. In diesem Schritt aktualisieren Sie die Ubuntu-Konfiguration so, dass zusätzlich zur regulären Authentifizierungsmethode 2FA-Token erforderlich sind.

Sie haben an dieser Stelle zwei verschiedene Möglichkeiten:

  • Sie können 2FA jedes Mal benötigen, wenn sich ein Benutzer beim System anmeldet und jedes Mal, wenn ein Benutzer die Berechtigung "+ sudo +" anfordert.

  • Sie können 2FA nur während der Anmeldung benötigen, wobei nachfolgende "+ sudo +" - Authentifizierungsversuche nur das Benutzerkennwort erfordern würden.

Die erste Option ist ideal für eine freigegebene Umgebung, in der Sie möglicherweise alle Aktionen schützen möchten, für die die Berechtigung "+ sudo +" erforderlich ist. Der zweite Ansatz ist praktischer für eine lokale Desktop-Umgebung, in der Sie der einzige Benutzer auf dem System sind.

2FA für Anmelde- und Sudo-Anfragen erforderlich

Um bei der Anmeldung und bei nachfolgenden Eskalationsanforderungen von Berechtigungen zur Eingabe von 2FA aufgefordert zu werden, müssen Sie die Datei "+ / etc / pam.d / common-auth +" bearbeiten, indem Sie am Ende der vorhandenen Datei eine Zeile einfügen.

Die Datei "+ common-auth +" gilt für alle Authentifizierungsmechanismen im System, unabhängig von der verwendeten Desktopumgebung. Dies gilt auch für Authentifizierungsanforderungen, die ausgeführt werden, nachdem sich der Benutzer beim System angemeldet hat, z.

Öffnen Sie diese Datei mit dem folgenden Befehl:

sudo nano /etc/pam.d/common-auth

Fügen Sie die hervorgehobene Zeile am Ende der Datei hinzu:

/etc/pam.d/common-auth

...
# and here are more per-package modules (the "Additional" block)
session required    pam_unix.so
session optional    pam_systemd.so
# end of pam-auth-update config

Diese Zeile teilt dem Ubuntu-Authentifizierungssystem mit, dass beim Anmelden über das Google PAM-Modul 2FA erforderlich ist. Mit der Option "+ nullok " können sich vorhandene Benutzer beim System anmelden, auch wenn sie keine 2FA-Authentifizierung für ihr Konto konfiguriert haben. Mit anderen Worten, Benutzer, die 2FA konfiguriert haben, müssen beim nächsten Anmelden einen Authentifizierungscode eingeben, während Benutzer, die den Befehl " google-authenticator +" nicht ausgeführt haben, sich nur mit ihrem Benutzernamen und Passwort anmelden können bis sie 2FA konfigurieren.

Speichern und schließen Sie die Datei, nachdem Sie die Zeile hinzugefügt haben.

2FA nur für die Anmeldung erforderlich

Wenn Sie nur bei der ersten Anmeldung am System in einer Desktop-Umgebung zur Eingabe von 2FA aufgefordert werden möchten, müssen Sie die Konfigurationsdatei für den verwendeten Desktop-Manager bearbeiten. Der Name der Konfigurationsdatei stimmt normalerweise mit dem Namen der Desktop-Umgebung überein. Beispielsweise lautet die Konfigurationsdatei für "+ gdm ", die Standard-Ubuntu-Desktop-Umgebung, die nach Ubuntu 16.04 startet, " / etc / pam.d / gdm +".

Bei einem kopflosen Server, wie einem DigitalOcean Droplet, bearbeiten Sie stattdessen die Datei "+ / etc / pam.d / common-session +". Öffnen Sie die relevante Datei basierend auf Ihrer Umgebung:

sudo nano

Fügen Sie die hervorgehobene Zeile am Ende der Datei hinzu:

/etc/pam.d/common-session

#
# /etc/pam.d/common-session - session-related modules common to all services
#
...
# # and here are more per-package modules (the "Additional" block)
session required    pam_unix.so
session optional    pam_systemd.so
# end of pam-auth-update config

Dadurch wird Ubuntu angewiesen, 2FA zu benötigen, wenn ein Benutzer über die Befehlszeile (entweder lokal oder remote über SSH) eine Verbindung zum System herstellt, jedoch nicht bei nachfolgenden Authentifizierungsversuchen, wie z. B. "+ sudo +" - Anforderungen.

Sie haben Ubuntu nun erfolgreich so konfiguriert, dass Sie entweder nur während der Anmeldung oder für jede authentifizierte Aktion, die auf dem System ausgeführt wird, zur Eingabe von 2FA aufgefordert werden. Jetzt können Sie die Konfiguration testen und sicherstellen, dass Sie zur Eingabe von 2FA aufgefordert werden, wenn Sie sich bei Ihrer Ubuntu-Installation anmelden.

Schritt 4 - Testen von 2FA

Im vorherigen Schritt haben Sie 2FA so konfiguriert, dass alle 30 Sekunden Codes generiert werden. In diesem Schritt testen Sie 2FA, indem Sie sich bei Ihrer Ubuntu-Umgebung anmelden.

Melden Sie sich zunächst bei Ihrer Ubuntu-Umgebung ab und wieder an:

ssh @

Wenn Sie die kennwortbasierte Authentifizierung verwenden, werden Sie zur Eingabe Ihres Benutzerkennworts aufgefordert:

OutputPassword:

Geben Sie Ihr Passwort ein und Sie werden aufgefordert, den 2FA-Bestätigungscode einzugeben:

OutputVerification code:

Nach Eingabe Ihres Bestätigungscodes werden Sie angemeldet:

Output@: ~#

Wenn 2FA nur für Anmeldungen aktiviert war, werden Sie erst nach Ablauf der Sitzung erneut zur Eingabe Ihrer 2FA-Codes aufgefordert, oder Sie melden sich manuell ab.

Wenn Sie 2FA über die Datei "+ common-auth +" aktiviert haben, werden Sie bei jeder Anmeldung und Anforderung von Sudo-Berechtigungen dazu aufgefordert:

Output@: ~# sudo -s

sudo password for :



root@:

In diesem Schritt haben Sie bestätigt, dass Ihre 2FA-Konfiguration wie erwartet funktioniert. Wenn Sie in dieser Phase nicht zur Eingabe Ihrer Bestätigungscodes aufgefordert wurden, kehren Sie zu Schritt 3 des Lernprogramms zurück und bestätigen Sie, dass Sie die richtige Ubuntu-Authentifizierungsdatei bearbeitet haben.

Schritt 5 - Verhindern einer 2FA-Sperre

Für den Fall, dass ein Telefon verloren geht oder gelöscht wird, ist es wichtig, über geeignete Sicherungsmethoden zu verfügen, um den Zugriff auf Ihr 2FA-fähiges Konto wiederherzustellen. Wenn Sie 2FA zum ersten Mal konfigurieren, stehen Ihnen einige Optionen zur Verfügung, um sicherzustellen, dass Sie nach einer Sperrung eine Wiederherstellung durchführen können:

  • Speichern Sie eine Sicherungskopie Ihrer geheimen Konfigurationscodes an einem sicheren Ort. Sie können dies manuell tun, aber einige Authentifizierungs-Apps wie Authy bieten Funktionen für den Sicherungscode.

  • Speichern Sie Ihre Wiederherstellungscodes an einem sicheren Ort, auf den außerhalb Ihrer 2FA-fähigen Umgebung zugegriffen werden kann.

Wenn Sie aus irgendeinem Grund keinen Zugriff auf Ihre Sicherungsoptionen haben, können Sie zusätzliche Schritte ausführen, um den Zugriff auf Ihre 2FA-fähige lokale Umgebung oder den Remote-Server wiederherzustellen.

Schritt 6 - Wiederherstellung nach einer 2FA-Sperre in einer lokalen Umgebung (optional)

Wenn Sie physischen Zugriff auf den Computer haben, können Sie in den Rettungsmodus booten, um 2FA zu deaktivieren. Der Rettungsmodus ist ein target-Typ (ähnlich einem runlevel) in Linux, der zum Ausführen von Verwaltungsaufgaben verwendet wird. Sie müssen einige Einstellungen in GRUB, dem Standard-Bootloader in Ubuntu, bearbeiten, um in den Rettungsmodus zu gelangen.

Um auf GRUB zuzugreifen, müssen Sie zuerst Ihren Computer neu starten:

reboot

Stellen Sie sicher, dass der Eintrag * Ubuntu * markiert ist, wenn das GRUB-Menü angezeigt wird. Dies ist der Standardname bei einer 18.04-Installation. Er kann jedoch abweichen, wenn Sie ihn nach der Installation manuell geändert haben.

image: https://assets.digitalocean.com/articles/CART-64052/grub_menu.png [Das Standard-GRUB-Menü in Ubuntu 18.04]

Drücken Sie anschließend die Taste "+ e +" auf Ihrer Tastatur, um die GRUB-Konfiguration zu bearbeiten, bevor Sie Ihr System starten.

image: https://assets.digitalocean.com/articles/CART-64052/grub_edit.png [Die GRUB-Konfigurationsdatei im Bearbeitungsmodus]

Scrollen Sie in der angezeigten Datei nach unten, bis Sie eine Zeile sehen, die mit "+ linux " beginnt und mit " $ vt_handoff " endet. Gehen Sie zum Ende dieser Zeile und fügen Sie " systemd.unit = rescue.target " hinzu, wobei Sie sicherstellen, dass zwischen " $ vt_handoff " und " systemd.unit = rescue.target +" ein Leerzeichen bleibt. Dadurch wird Ihr Ubuntu-Rechner angewiesen, in den Rettungsmodus zu booten.

image: https://assets.digitalocean.com/articles/CART-64052/grub_rescue.png [Bearbeiten der GRUB-Konfigurationsdatei zur Aktivierung des Wartungsmodus]

Nachdem Sie die Änderungen vorgenommen haben, speichern Sie die Datei mit der Tastenkombination "+ Strg + X ". Ihr Computer wird neu gestartet und Sie befinden sich in einer Befehlszeile. Drücken Sie " Enter", um in den Rettungsmodus zu gelangen.

image: https://assets.digitalocean.com/articles/CART-64052/rescue_mode.png [Eingabeaufforderung für den Befehlszeilen-Wartungsmodus in Ubuntu 18.04]

Öffnen Sie im Rettungsmodus die Konfigurationsdatei für Google Authenticator. Diese befindet sich im Home-Verzeichnis des gesperrten Benutzers:

nano /home//.google-authenticator

Die erste Zeile in dieser Datei ist der geheime Schlüssel des Benutzers, mit dem eine Authentifizierungs-App konfiguriert wird.

Sie haben jetzt zwei Möglichkeiten:

  • Sie können den geheimen Schlüssel kopieren und Ihre Authentifikator-App konfigurieren.

  • Wenn Sie von einem leeren Blatt ausgehen möchten, können Sie die Datei "+ ~ / .google-authenticator" vollständig löschen, um 2FA für diesen Nutzer zu deaktivieren. Nachdem Sie sich erneut als Nicht-Root-Benutzer angemeldet haben, können Sie 2FA erneut konfigurieren und einen brandneuen geheimen Schlüssel erhalten.

In beiden Fällen können Sie mithilfe des GRUB-Bootloaders eine Wiederherstellung nach einem 2FA-Lockout in einer lokalen Umgebung durchführen. Im nächsten Schritt werden Sie eine 2FA-Sperre in einer Remote-Umgebung aufheben.

Schritt 7 - Wiederherstellung nach einer 2FA-Sperre in einer Remote-Umgebung (optional)

Wenn Ihr Nicht-Root-Sudoer-Konto auf einem Remotecomputer gesperrt ist, können Sie mit dem Benutzer * root * 2FA vorübergehend deaktivieren oder 2FA neu konfigurieren.

Beginnen Sie, indem Sie sich mit dem Benutzer * root * bei Ihrem Computer anmelden:

ssh root@

Öffnen Sie nach der Anmeldung die Einstellungsdatei für Google Authenticator, die sich im Home-Verzeichnis des gesperrten Nutzers befindet:

sudo nano /home//.google_authenticator

Die erste Zeile in dieser Datei ist der geheime Schlüssel des Benutzers, den Sie zum Konfigurieren einer Authentifizierungs-App benötigen.

Sie haben jetzt zwei Möglichkeiten:

  • Wenn Sie ein neues oder gelöschtes Gerät einrichten möchten, können Sie mit dem geheimen Schlüssel Ihre Authentifizierungs-App neu konfigurieren.

  • Wenn Sie von einem leeren Blatt aus starten möchten, können Sie die Datei "+ / home //. Google_authenticator +" vollständig löschen, um 2FA für diesen Nutzer zu deaktivieren. Nachdem Sie sich als Nicht-Root-Benutzer angemeldet haben, können Sie 2FA erneut konfigurieren und erhalten einen brandneuen geheimen Schlüssel.

Bei beiden Auswahlmöglichkeiten konnten Sie mithilfe des Benutzers * root * eine Wiederherstellung nach einer 2FA-Sperre in einer lokalen Umgebung durchführen.

Fazit

In diesem Tutorial haben Sie 2FA auf einem Ubuntu 18.04-Computer konfiguriert. Mit 2FA, das in Ihrer Umgebung konfiguriert wurde, haben Sie Ihrem Konto eine zusätzliche Sicherheitsebene hinzugefügt und Ihr System sicherer gemacht. Zusätzlich zu Ihrer herkömmlichen Authentifizierungsmethode müssen Sie einen zusätzlichen Bestätigungscode eingeben, um sich anzumelden. Auf diese Weise kann sich ein Angreifer, der Ihre Anmeldeinformationen erhalten hat, nicht ohne diesen zusätzlichen Bestätigungscode in Ihrem Konto anmelden.