Zeitbasiertes Zwei-Faktor-Login mit Gentoo

Viele Leute kennen die Zwei-Faktor-Authentisierung (etwa wissen und etwas besitzen) von den RSA-Tokens: Auf diesen Geräten erscheint in regelmäßigen Abständen eine neue Zahlenfolge, welche man bei der Anmeldung zusammen mit seinem Benutzername und seinem Kennwort eingeben muß. Ein gestohlenes Kennwort alleine genügt also für einen Angreifer nicht mehr, er muß auch im Besitz des RSA-Tokens sein, um stets eine frische gültige Nummer greifbar zu haben. Der Vorteil gegenüber einem SSH-Key ist: Wenn man in die Verlegenheit gerät, sich dringend von einem nicht vertrauenswürdigen Rechner aus einloggen zu müssen, so kann ein Angreifer darauf maximal für diese Sitzung als Trittbrettfahrer "mitschwimmen"; ein erneutes Einloggen ist nicht möglich (beim Verwenden eines SSH-Keys könnte er diesen kopieren und das Passwort abhören).
Mit freudiger Überraschung habe ich gelesen, daß Google für einige seiner Dienste ebenfalls eine Zwei-Faktor-Authentisierung optional anbietet - und daß der Quelltext hierfür verfügbar ist. Dabei behilft sich Google der Tatsache, daß viele Leute ein Smartphone besitzen; eine App hierauf dient als Ersatz für das spezialisierte RSA-Token.
Im folgenden möchte ich zeigen, wie man unter Gentoo das Google Authenticator PAM-Modul für Remote-Zugriffe (beispielsweise via ssh) einrichtet.

Zunächst muß man die Quellen für das PAM-Modul und das Setup übersetzen; hierfür habe ich ein ebuild geschrieben, welches man in sein lokales Overlay in sys-auth/google-authenticator legt. Nach der Installation muß man das PAM-Modul noch in die PAM-Regeln eintragen. Mein Ziel war es, bei Remote-Logins via ssh (wenn kein ssh-Key verwendet wird) das Modul als zusätzliche Schutzmaßnahme zu verwenden. Hierzu habe ich der Datei /etc/pam.d/system-remote-login die Zeile

auth            required        pam_google_authenticator.so

nach dem "auth include ..." hinzugefügt. Das war's schon mit der Systemkonfiguration - schreiten wir zur Einrichtung beim Useraccount. Dieser muß einen Initialschlüssel generieren, aus welchem dann zusammen mit der aktuellen Uhrzeit die Zahlencodes berechnet werden. Dazu ruft man das Programm google-authenticator auf. Dieses generiert die benötigten Daten und schreibt sie nach Rückfrage ins Homeverzeichnis. Außerdem zeigt es einen QR-Code an, welcher den Initialschlüssel repräsentiert; der QR-Code ist eine einfache Möglichkeit, den Initalschlüssel auf sein Handy zu bekommen (alternativ wird er auch textuell angezeigt, so daß man ihn abtippen kann). Desweiteren zeigt das Programm eine handvoll "emergency scratch codes" an; diese dienen als (einmaliges) Ersatz-Login, falls man sich dringend einloggen muß, sein Handy aber gerade nicht zur Hand hat.
Als letztes muß nun nur noch die entsprechende Anwendung auf dem Handy installiert werden. Android-Nutzer finden die Anwendung unter dem Name "Authenticator" im Market; alternativ können sie auch einfach diesen QR-Code scannen:

Das Programm startet man und erfaßt (entweder durch abtippen oder durch Abscannen vom Bildschirm) den Initalschlüssel - voila, das war's!