Debian Squeeze: SSH zwei Stufenauthentifizierung mit google-authenticator

Ich habe vor ein paar Tagen mit dem Artikel „Google macht SSHD sicher“ über einen Artikel aus meinem Feedreader berichtet. Nun habe ich das ganze selbst ausgetestet und bin begeistert.

The Google Authenticator project includes implementations of one-time passcode generators for several mobile platforms, as well as a pluggable authentication module (PAM). One-time passcodes are generated using open standards developed by the Initiative for Open Authentication (OATH) (which is unrelated to OAuth).

These implementations support the HMAC-Based One-time Password (HOTP) algorithm specified in RFC 4226 and the Time-based One-time Password (TOTP) algorithm currently in draft.

Vorab zur Information:
– In den Sourcen des Modules für PAM gibt es keinerlei Kontaktaufnahme zu einem Google-Server
– Der einzige Aufruf befindet sich in der Datei ./google-authenticator.c um einen QR-Code zu generieren, dazu später mehr
– Die Androidapp nimmt kein Kontakt in das Netz auf, das einzige was sie möchte ist vibrieren.
– Wenn kein Zugang zu dem Smartphone besteht hat man noch Emergency Scratchcodes.
– Die Software ist eine Erweiterung der Sicherheit des sshd und es sollte nicht sonst ein passwortloser Login erlaubt werden

Ich gehe davon aus, dass der openssh-server und Compiler installiert sind.

root@xbmc:~/# mkcd ga
 root@xbmc:~/ga# aptitude install mercurial libpam0g-dev -y
 root@xbmc:~/ga# hg clone  google-authenticator
 cd google-authenticator/libpam/
 root@xbmc:~/ga/google-authenticator/libpam# make
 root@xbmc:~/ga/google-authenticator/libpam# make install

cp pam_google_authenticator.so /lib/security
 cp google-authenticator /usr/local/bin
 sudo chmod 755 /lib/security/pam_google_authenticator.so 
 /usr/local/bin/google-authenticator

Da wir uns nicht als root per ssh anmelden, so etwas gehört sich nicht, nehmen wir substitude user und wechseln den Account zur generieren des Codes:

root@xbmc:~/ga/google-authenticator/libpam# su seraphyn
 seraphyn@xbmc:/root/ga/google-authenticator/libpam$ google-authenticator
 https://www.google.com/chart?chs=200x200&chld=ETCETCETCETC
 Your new secret key is: BLABLABLABLA
 Your verification code is NUMBERSNUMBERSNUMBERS
 Your emergency scratch codes are:
 MORENUMBERS

Do you want me to update your "~/.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
 seraphyn@xbmc:/root/ga/google-authenticator/libpam$ exit

Nicht vergessen die ganze Ausgabe abzuspeichern, denn die URL und vor allen die Codes werden später noch gebraucht.
Ich gehe nicht davon aus, dass auf einem Server eine GUI ist.

Jetzt müssen nur noch der SSH-Server und PAM konfiguriert werden um Google Authentication zu nutzen.
In der Datei /etc/pam.d/sshd muss noch pam_google_authenticator.so hinzugefügt werden:

# /etc/default/locale, so read that as well.
 auth required pam_env.so envfile=/etc/default/locale
 auth required pam_google_authenticator.so

und in der Datei /etc/ssh/sshd_config das Challenge-Response-Verfahren aktiviert werden:

# Change to yes to enable challenge-response passwords (beware issues with
 # some PAM modules and threads)
 ChallengeResponseAuthentication yes

Nach der Installation von Google Authenticator auf Android startet man diesen.
Wenn man die aus der Shell generiert URL in seinem Desktopbrowser aufruft bekommt man einen QR-Code, welcher mit dem auf Android installiertem Google Authenticator per Menü > Scan account barcode ausgelesen wird.
Der 6stellige Code generiert sich alle 30 Sekunden neu und man kann in Ruhe die App auflassen und sich davon überzeugen ツ
Auf der Maschine die nun pam-google-authenticator nutzt kann der SSH-Server neu gestartet werden.
Beim erneuten Einloggen erscheint nun:

Verification code:
 Password:

Als erstes soll man den auf dem Smartphone angegebenen Code eingeben, danach das normale Passwort.
Wenn nun das Smartphone nicht vorhanden ist, dann kann einer der 6 emergency scratch codes genommen werden.

Achtung: Falls der User keinen generierten Schlüssel in seinem $HOME hat (.google_authenticator) wird dieser nicht der Zweistufenauthenifizierung unterzogen.

3 Gedanken zu „Debian Squeeze: SSH zwei Stufenauthentifizierung mit google-authenticator“

Kommentare sind geschlossen.