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