2FA TOTP pam login für sysuser und auch via ssh

reinhard@finalmedia.de Mon 11 Jul 2022 04:12:21 AM CEST

1. Vorbereitungen

Der Artikel setzt voraus, dass du weißt, was Zweifaktor-Auth ist, dass TOTP ein Standard für ein Zeitbasiertes Einmalpasswort ist und dass du weißt, wie du deine Authenticator-App oder z.B. den Reiner SCT Authenticator verwendest.

Wir installieren zunächst global ein totp modul für pam. Es bietet sich hier der google-authenticator an, der auch unabhängig von google genutzt werden kann. Hier ist nur der Name irritierend. Zudem installieren wir qrencode, damit wir unser neu erzeugtes totp secret token bequem vom Schirm abfotografieren können.

apt-get install libpam-google-authenticator qrencode

2. TOTP Code erzeugen

Nun erzeugst du als dein Systemuser, nennen wir ihn "seppel", einen neuen Code schlicht durch Aufruf des Programms

google-authenticator

Beantworte die Fragen mit "y" und das Tool gibt dir einen schönen QR-Code für deine TOTP Applikation aus. Scanne diesen in deine Authenticator App, notiere dir auch den Code selbst und die Emergency Scratch Codes. Du kommst da aber später jederzeit wieder dran, wenn du den Befehl:

cat ~/.google_authenticator

verwendest. Denn in dieser dotfile in deinem Homeverzeichnis speichert der google-authenticator die Konfiguration. Die Datei ist auch chmod 400 (readonly).

3. PAM Modul scharfschalten

Nun kommt der kritische Part! Befolge alles sehr genau und vorsichtig, weil du dich andernfalls von deinem System aussperrst! Keine Garantie! Teste nach dieser Änderung deinen Login in einem separaten Terminal, ohne das alte Terminal. bzw. die alte aktive Session vorschnell zu schließen!!!

Wir beabeiten als root die Datei /etc/pam.d/common-auth und ergänzen dort diese zwei Zeilen am Ende(!):


# der root user braucht keinen google auth und darf daher ohne
auth sufficient pam_succeed_if.so uid < 1 quiet

# jeder andere user soll nur mit totp fortfahren
auth required pam_google_authenticator.so

Durch das Ausführen des nachfolgenden Befehls updaten wir die Config

pam-auth-update

Lass die Standardsettings aktiv und wähle OK. Damit ist die Änderung aktiv. Teste es sauber in einer separaten Session, ohne die jetzige zu beenden!

4. Nun auch keybasierten SSH Zugang um den 2FA ergänzen

Als root müssen wir dazu die Datei /etc/ssh/sshd_config bearbeiten und am Ende(!) die nachfolgenden Konfigurationszeilen anhängen. Es ist ein Beispieleintrag zum User "seppel". Wir setzen damit in der globalen Konfiguration für User (oder Gruppen) die gewünschte Authentifizierungsmethode. Natürlich musst du "seppel" durch einen (oder mehrere) wirkliche Nutzernamen ersetzen. (Für Gruppen würdest du die Direktive "Match group Gruppenname" stattdessen verwenden)


Match User seppel
        AuthenticationMethods publickey,keyboard-interactive:pam

ACHTUNG: Sehr wichtig ist das Komma(!), denn damit gilt es als verundet. Ohne das Komma würde es als ODER gelten und damit könnte der public key auth umgangen werden und es würde nur noch die pam methode verwendet werden.

Du wirst mit obigem Setting bei jedem SSH Login 1. nach dem publickey auth, und 2. nochmal zusätzlich nach deinem User-Passwort gefragt und 3. danach noch um dein aktuelles 2FA Token gebeten.

Das ist natürlich nur für echte User-Accounts sinnvoll. Automatisierte Accounts oder Scripte etc. sollten natürlich mit einem anderen User arbeiten und dann weiterhin rein keybasiert arbeiten können. (Daher auch die Match User Direktive in der sshd config).