Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03145.jsonl.gz/1641

Mo, 12. April 2021, Lioh Möller
Inspiriert durch den tollen Vortrag von Florian Winkler auf den Grazer Linuxtagen wird im Folgenden die Einrichtung einer 2-Faktor-Authentifizierung für SSH Logins unter Debian GNU/Linux 10 beschrieben.
Zunächst müssen die entsprechenden Pakete installiert werden:
sudo apt install libpam-google-authenticator qrencode
qrencode wird dabei zur Generierung des QR-Codes verwendet, welcher später mithilfe einer Authenticator-App der Wahl gescannt werden kann. Das eigentliche Authenticator-Paket trägt zwar Google im Namen, ist allerdings universell einsetzbar und als Freie Software verfügbar.
Nach der Installation kann der Benutzer, welcher sich via SSH mit 2-Faktor-Authentifizierung anmelden soll, den google-authenticator konfigurieren:
google-authenticator
Direkt nach dem Start wird eine URL zu dem generierten QR-Code, der passende Secret-Key sowie einige Recovery-Codes angezeigt, die man allesamt an einem sicheren Ort aufbewahren sollte.
Sofern qrencode wie zuvor beschrieben installiert wurde, wird auch der QR-Code im Terminal angezeigt, der sich nun mit einer Authenticator-App wie FreeOTP+ einscannen lässt.
Daraufhin wird man mit einigen sicherheitsrelevanten Fragen konfrontiert, die man nach Best-Practice wie folgt beantworten sollte:
Do 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) y By default, a new token is generated every 30 seconds by the mobile app. 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. This allows for a time skew of up to 30 seconds between authentication server and client. If you experience problems with poor time synchronization, you can increase the window from its default size of 3 permitted codes (one previous code, the current code, the next code) to 17 permitted codes (the 8 previous codes, the current code, and the 8 next codes). This will permit for a time skew of up to 4 minutes between client and server. Do you want to do so? (y/n) n 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. Do you want to enable rate-limiting? (y/n) y
Damit ist die Einrichtung des Authenticators bereits abgeschlossen. Um diesen für SSH-Logins nutzen zu können, sind noch einige kleinere Vorbereitungen nötig. Da wir nur noch Key-Based-Authentication zulassen möchten, muss vorab der SSH Public-Key, mit dem der Zugriff erfolgen soll, in die Datei ~/.ssh/authorized_keys eingetragen werden. Alternativ kann dieser vom Client aus mit dem Befehl ssh-copy-id auf das Zielsystem, auf dem der google-authenticator aktiviert wurde, kopiert werden:
ssh-copy-id user@host
Daraufhin müssen in der Datei /etc/ssh/sshd_config die folgenden Parameter angepasst werden:
PasswordAuthentication no PermitRootLogin no ChallangeResponseAuthentication yes AuthenticationMethods publickey,keyboard-interactive
Alternativ lässt sich die 2-Faktor Authentifizierung mittels einer Match-Direktive auch nur für einzelne Benutzer aktivieren. Lediglich ChalangeResponseAuthentication muss dabei ausserhalb des Match-Abschnittes konfiguriert werden:
ChallangeResponseAuthentication yes Match User lioh PasswordAuthentication no AuthenticationMethods publickey,keyboard-interactive
Nun wird die SSH-Konfiguration neu eingelesen:
service sshd reload
Zusätzlich muss die Datei /etc/pam.d/sshd bearbeitet werden, sodass der Authenticator verwendet wird.
Dazu trägt man am Anfang der Datei vor @include common-auth folgende Zeile ein:
auth sufficient pam_google_authenticator.so
Damit ist die Installation bereits abgeschlossen. Beim nächsten Login via SSH mit dem Benutzerkonto, für das der google-authenticator konfiguriert wurde, muss der Verification code aus der Authenticator-App eingegeben werden.
Danksagung: Vielen Dank an Florian für seinen Vortrag und die Hilfe beim Debuggen von PAM.