Centos – SSH – Two-Factor Authentication mit Google Authenticator

Two-Factor Authentication erhöht die Sicherheit der Benutzerautorisierung. Hierbei wird außer dem Passwort ein zusätzlicher Code verlangt. Dieser Code wird bei jedem Login neu generiert und ist nur einmal verwendbar. Mit diesem Verfahren können wir den Login per SSH zusätzlich absichern. Dazu verwenden wir das Open Source Tool Google Authenticator.

Als erstes installieren wir alle nötigen Develop-Pakete und den gcc auf unserem Server.

yum install pam-devel gcc

Für diese Art der Authentikation ist es zwingend notwendig, dass unsere Serverzeit aktuell ist. Um das zu erreichen installieren wir ntpd und binden diesen in den Systemstart ein. Anschliessend starten wir ntpd um die genaue Zeit von einem Zeitserver zu erhalten.

yum install ntp

#CentOS 6
chkconfig ntpd on
service ntpd start


#CentOS 7
systemctl enable ntpd
systemctl start ntpd

Installation des Google Authenticator

Nun laden und entpacken wir den Source-Code des google-authenticator PAM-Modules.

cd /opt/
wget https://google-authenticator.googlecode.com/files/libpam-google-authenticator-1.0-source.tar.bz2
tar -xvf libpam-google-authenticator-1.0-source.tar.bz2
cd libpam-google-authenticator-1.0

Anschliessend wir dieser kompiliert und installiert.

make
make install

Nun ist unser PAM-Modul einstatzbereit und wir können google-authenticator starten.

google-authenticator

Dann folgt ein etwas längerer Dialog. Die Notfall-Codes sollte man an einer sicheren Stelle verwahren. Ein QR-CODE zum einscannen wird erstellt und ist entweder gleich von der Konsole oder unter einem generierten Link abrufbar.

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

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/root@der-linux-admin.de%3Fsecret%3D35JP121123IZCY7YE

Your new secret key is: C5JPC2OHXIZCY7YE
Your verification code is 349721
Your emergency scratch codes are:
63334430
92223417
30123476
14553321
29642321

Do you want me to update your "/root/.google_authenticator" file (y/n) y

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, 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) y

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

Zum Aktivieren des Google Authenticators für SSH Logins muss das PAM-Modul in die Konfiguration vom PAM eingebunden werden. Dazu editieren wir die Datei /etc/pam.d/sshd und fügen ganz oben folgende Zeile ein.

auth required pam_google_authenticator.so
#%PAM-1.0

## Google Authenticators
auth required pam_google_authenticator.so

auth required pam_sepermit.so
auth substack password-auth
auth include postlogin
account required pam_nologin.so
account include password-auth
password include password-auth
# pam_selinux.so close should be the first session rule
#session required pam_selinux.so close
#session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
#session required pam_selinux.so open env_params
session optional pam_keyinit.so force revoke
session include password-auth
session include postlogin

Anschliessend muss noch in der Datei /etc/ssh/sshd_config der Wert ChallengeResponseAuthentication von no auf yes geändert werden.

ChallengeResponseAuthentication yes

Nach dem Speichern müssen wir den SSH Dienst neu starten und der Google Authenticator verrichtet nun seinen Dienst.

#CentOS 6
service sshd restart

#CentOS 7
systemctl restart sshd

Bei einem SSH-Login wird nun zunächst der Verification Code gefragt anschliessend geht es weiter mit dem üblichen Passwort.

Verification code:
Password:

Die passende App fürs Mobiltelefon oder Tablet gibt im Appstore bei Google oder Apple.

Achtung

Bei der Implentierung ist etwas Vorsicht geboten denn es kann passieren, dass man sich vom System aussperrt :) Daher empfehle ich mit einen Root-User parallel eingeloggt zu bleiben um im Notfall das Modul wieder zu dekativieren. Weiterhin kann man auch den Login per ssh-key aktivieren um im Notfall wieder Zugang zum System zu erlangen.

Weitere Informationen gibt es auf den Projektseiten des Google-Authenticator.  Informationen wie man die App auf dem Smartphone oder Tablet installiert gibt es auf der Seite vom Google-Support.

Das Tutorial wurde für CentOS 7 und CentOS 6 getestet. Andere Distributionen haben das PAM-Modul eventuell bereits in Ihrem Repo enthalten.

Ein Kommentar

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.