Du möchtest dein Linux-System mit einer 2-Faktoren-Authentifizierung absichern, weißt aber nicht wie? Hier zeige ich, wie ich die Zwei-Faktor-Authentifizierung (2FA) mit einem zeitbasierten Einmalpasswort (OTP) in Ubuntu 22.04 mithilfe des Google Authenticator PAM-Plugins aktiviert habe.
Achtung: Wenn du diese Änderungen während einer ssh-Sitzung vornimmst, darfst du diese Sitzung nicht schließen, da du dich sonst möglicherweise nicht mehr anmelden kannst, wenn ein Fehler aufgetreten ist.
Weitere Tipps und Tricks zu SSH findest du in meinem Online-Kurs: SSH effektiv nutzen: Tipps & Tricks für Linux-Admins
Beginnen wir nun mit der Einrichtung auf deinem Linux System.
Installiere das Google Authenticator PAM-Plugin:
sudo apt install libpam-google-authenticator
Führe den Befehl google-authenticator als der Benutzer aus, als der du dich einloggen willst:
google-authenticator -t
Die Option -t weist den Befehl an, ein zeitbasiertes OTP zu erzeugen.
Dann wird ein riesiger QR-Code angezeigt und darunter der geheime Schlüssel in Form einer Reihe von Zahlen und Großbuchstaben. Öffne deine gewünschte OTP-App, die du verwenden möchtest (z.B. Authy, FreeOTP oder Google Authenticator) und erstelle einen neuen Eintrag, indem du den QR-Code scannst. Gib alternativ den geheimen Schlüssel ein, falls du ihn nicht scannen kannst.
Nun gib den Code aus der OTP-App ein. Du kannst diesen Schritt überspringen, indem du -1 eingibst oder dem Befehl die Option -C (Großbuchstabe c) hinzufügst.
Die fünf Notfall-Codes können verwendet werden, um sich einzuloggen, wenn der von der OTP-App generierte Code aus irgendeinem Grund nicht funktioniert. Jeder dieser Codes kann nur einmal verwendet werden. Bewahre diese an einem sicheren Ort auf.
Nun beantworte die Frage, ob du deine .google_authenticator-Datei aktualisieren sollst, mit Y.
Die erstellte/aktualisierte Datei enthält den geheimen Schlüssel, die Einstellungen, die du in den folgenden Fragen angibst, und auch die Notfall-Codes. Achte darauf, dass diese Datei nur für den Benutzer lesbar ist.
Es wird noch mehrere Fragen geben, die mit Ja oder Nein beantwortet werden müssen. Du kannst die Antworten nach belieben verändern, ich verwende in der Regel für alle Antworten "Y", sofern du verstehst um was es sich dabei handelt.
Der Befehl google-authenticator akzeptiert zusätzliche Optionen, die interessant sein können. Rufe ihn mit -help auf, um sie anzuzeigen, oder sieh in der Manpage nach. So können z.B. alle oben gestellten Fragen mit den Optionen beantwortet werden. Du kannst auch das Label und den Aussteller angeben, die in der OTP-App angezeigt werden.
Hinweis: Dieser Schritt muss für jeden Benutzer wiederholt werden, um ein OTP für die Anmeldung zu erstellen.
Folgende Dateien müssen noch bearbeitet werden, damit der SSH-Daemon weiß das er nun mit dem Google Authenticator Plugin arbeiten soll.
Bearbeite die sshd pam.d Konfiguration mit nano /etc/pam.d/sshd
auth required pam_google_authenticator.so
oder wenn noch nicht alle Benutzer die 2FA eingerichtet haben mit der Option nullok zu verwenden
auth required pam_google_authenticator.so nullok
Erstelle eine neue Datei mit nano /etc/ssh/sshd_config.d/00-google-authenticator.conf
Füge folgende zeilen in die neue Datei:
KbdInteractiveAuthentication yes
PasswordAuthentication yes
Jetzt muss nur noch die Konfiguration geladen werden, indem der SSH-Daemon neu geladen wird.
systemctl restart sshd.service
Nun heisst es austesten! Dazu unterbreche auf keinen fall die aktuelle SSH Verbindung. Sondern öffne eine neue SSH Verbindung zum Server und versuche dich anzumelden! Erst bei erfolgreicher Anmeldung mit dem OTP Code kannst du sicher sein dich am System noch anmelden zu können.
Hinweis: Wenn du die ssh-Authentifizierung mit privatem/öffentlichem Schlüssel verwendest, wird keine OTP-Abfrage angezeigt. Anscheinend ist es bei dieser Methode nicht möglich, Schlüssel mit OTP zu kombinieren.