Linux/Shell – 2-Faktor Authentifizierung

Shell-Zugänge für Unix/Linux-Systeme sind kritisch sofern sie nur aus Benutzername und Passwort bestehen. Auch die schlüsselbasierte Authentification ist keine Sicherheit wenn ein mobiles Gerät abhanden kommt. Jeder Unix-SysAdmin weiss um diesen Umstand und ist darob wenig erfreut. Sind die Credentials bekannt, das Passwort geknackt oder der Schlüssel in falschen Händen, stehen dem Eindringling keine Hürden mehr im Weg, sudo sei Dank, das System zu übernehmen,
Im Firmennetzwerk mag das kein grösseres Problem darstellen da die Systeme in physischer Sicherheit stehen. Erfolgt aber der Zugriff von aussen, reicht das nicht mehr. Eine einfach umzusetzende Massnahme stellt die 2-Faktor-Authentifizierung (2FA) dar. Wir beziehen ein weiteres Gerät, z.B. das Smartphone, mit ein. Die Chance, das alle Geräte abhanden kommen und entsperrt werden können ist kleiner als nur ein single Passwort zu ergattern.

Google-Authenticator und PAM

Um für login und sudo 2-Faktor-Authentifizierung zu ermöglichen ist PAM auf unixoiden zuständig. PAM – Plugable Authentication Module ist zuständig für die Authentifizierung der Benutzer. Google bietet für PAM eine Bibliothek an, welche eine 2FA durchführt.

Google-Authenticator installieren

Als erstes installierst du den Google-Authenticator aus dem App-Store für dein Smartphone (iOS oder Android). Du kannst ihn allerdings noch nicht starten.

PAM-Libraries auf deinem Linux installieren

  1. Öffne ein Terminal zu dem Unix/Linux-System welches du absichern willst
  2. Installiere die PAM-Libraries (z.B. mittes: “sudo apt  install libpam-google-authenticator”
  3. Gib dein sudo-Passwort ein
  4. Bestätige die Installation
  5. Las die Installation beenden

PAM-Konfiguration

Achtung: Nach diesem Schritt kannst du nur noch mit einem Code einloggen!

  1. Starte eine Screen-Session: “screen<ENTER>”
  2. Wechsle ins Verzeichnis “cd /etc/pam.d/common-auth”
  3. Kopiere die Datei “common-auth” nach “/tmp”
    “cp common-auth /tmp”
  4. Wir kreieren nun einen Loop der alle 10 Minuten das gesicherte “/tmp/common-auth” wieder nach “/etc/pam.d/” kopiert. Geht etwas schief, können wir nach 10 Minuten wieder “normal” einloggen

Plan B!!!

Damit wir uns nicht versehentlich ausschliessen, kommt unser Paln B ins Spiel:

Geht etwas schief, wird nach 10 Minuten das original “common-auth” nach “/etc/pam.d” zurückkopiert. Starte dies in einer “screen”-Session!

Finde folgende Zeile in der Datei “/etc/pam.d/common-auth”:

Füge die folgende Zeile oberhalb ein:

Achtung: Sobald du diese Datei speicherst, kannst du dich nicht mehr einloggen. Es ist dringend geraten, die aktuelle Session zu behalten! Oder 10 Minuten zu warten, dann kommt ja unser Plan B.

Barcode und secret Key generieren

Google-Authenticator einrichten

Starte auf deinem Smartphone die Google-Authenticator-App:

Scanne den Barcode oder trage den Schlüssel (“Your new secrete key is:”) manuel ein. Du kannst nun in einem zweiten Terminal probieren auf dein Zielsystem einzuloggen:

SSH-Konfiguration

Um die 2FA für SSH zu benutzen, passe die Datei: “/etc/pam.d/sshd” an. Füge die folgende Zeile am Dateiende dazu:

und passe die Datei “/etc/ssh/sshd_config” an:

Anstatt:

setze:

und starte den SSH-Service neu:

Log-In

Erfahre den Code auf deinem Smartphone:

Verbinde dich in einem Terminal mit deinem Linux-System:

Vergiss nicht Plan B zu beenden!

Dieser Vorgang ist für jeden berechtigten Benutzer zu wiederholen.

Fazit:

Ein kleiner Eingriff, durch den die Sicherheit für Fernzugriffe/-logins massiv gesteigert werden kann. Die Codes auf der App sind jeweils 30s gültig. Nachteil ist, dass Google Authenticator oder Authy auf dem Smartphone installiert werden müssen.

Leave a Reply