Zeitbasiertes Zwei-Faktor-Login mit Gentoo

Viele Leute ken­nen die Zwei-Fak­tor-Au­then­ti­sie­rung (etwa wis­sen und etwas be­sit­zen) von den RSA-To­kens: Auf die­sen Ge­rä­ten er­scheint in re­gel­mä­ßi­gen Ab­stän­den eine neue Zah­len­fol­ge, wel­che man bei der An­mel­dung zu­sam­men mit sei­nem Be­nut­zer­na­me und sei­nem Kenn­wort ein­ge­ben muß. Ein ge­stoh­le­nes Kenn­wort al­lei­ne ge­nügt also für einen An­grei­fer nicht mehr, er muß auch im Be­sitz des RSA-To­kens sein, um stets eine fri­sche gül­ti­ge Num­mer greif­bar zu haben. Der Vor­teil ge­gen­über einem SSH-Key ist: Wenn man in die Ver­le­gen­heit gerät, sich drin­gend von einem nicht ver­trau­ens­wür­di­gen Rech­ner aus ein­log­gen zu müs­sen, so kann ein An­grei­fer dar­auf ma­xi­mal für diese Sit­zung als Tritt­brett­fah­rer "mit­schwim­men"; ein er­neu­tes Ein­log­gen ist nicht mög­lich (beim Ver­wen­den eines SSH-Keys könn­te er die­sen ko­pie­ren und das Pass­wort ab­hö­ren).
Mit freu­di­ger Über­ra­schung habe ich ge­le­sen, daß Goog­le für ei­ni­ge sei­ner Diens­te eben­falls eine Zwei-Fak­tor-Au­then­ti­sie­rung op­tio­nal an­bie­tet - und daß der Quell­text hier­für ver­füg­bar ist. Dabei be­hilft sich Goog­le der Tat­sa­che, daß viele Leute ein Smart­pho­ne be­sit­zen; eine App hier­auf dient als Er­satz für das spe­zia­li­sier­te RSA-To­ken.
Im fol­gen­den möch­te ich zei­gen, wie man unter Gen­too das Goog­le Au­then­ti­ca­tor PAM-Mo­dul für Re­mo­te-Zu­grif­fe (bei­spiels­wei­se via ssh) ein­rich­tet.

Zu­nächst muß man die Quel­len für das PAM-Mo­dul und das Setup über­set­zen; hier­für habe ich ein ebuild ge­schrie­ben, wel­ches man in sein lo­ka­les Over­lay in sys-auth/goog­le-au­then­ti­ca­tor legt. Nach der In­stal­la­ti­on muß man das PAM-Mo­dul noch in die PAM-Re­geln ein­tra­gen. Mein Ziel war es, bei Re­mo­te-Log­ins via ssh (wenn kein ssh-Key ver­wen­det wird) das Modul als zu­sätz­li­che Schutz­maß­nah­me zu ver­wen­den. Hier­zu habe ich der Datei /etc/pam.d/sys­tem-re­mo­te-log­in die Zeile

auth            re­qui­red        pam_goog­le_au­then­ti­ca­tor.so

nach dem "auth in­clu­de ..." hin­zu­ge­fügt. Das war's schon mit der Sys­tem­kon­fi­gu­ra­ti­on - schrei­ten wir zur Ein­rich­tung beim Use­rac­count. Die­ser muß einen In­iti­al­schlüs­sel ge­ne­rie­ren, aus wel­chem dann zu­sam­men mit der ak­tu­el­len Uhr­zeit die Zah­len­codes be­rech­net wer­den. Dazu ruft man das Pro­gramm goog­le-au­then­ti­ca­tor auf. Die­ses ge­ne­riert die be­nö­tig­ten Daten und schreibt sie nach Rück­fra­ge ins Ho­me­ver­zeich­nis. Au­ßer­dem zeigt es einen QR-Code an, wel­cher den In­iti­al­schlüs­sel re­prä­sen­tiert; der QR-Code ist eine ein­fa­che Mög­lich­keit, den In­i­tal­schlüs­sel auf sein Handy zu be­kom­men (al­ter­na­tiv wird er auch tex­tu­ell an­ge­zeigt, so daß man ihn ab­tip­pen kann). Des­wei­te­ren zeigt das Pro­gramm eine hand­voll "emer­gen­cy scratch codes" an; diese die­nen als (ein­ma­li­ges) Er­satz-Log­in, falls man sich drin­gend ein­log­gen muß, sein Handy aber ge­ra­de nicht zur Hand hat.
Als letz­tes muß nun nur noch die ent­spre­chen­de An­wen­dung auf dem Handy in­stal­liert wer­den. An­dro­id-Nut­zer fin­den die An­wen­dung unter dem Name "Au­then­ti­ca­tor" im Mar­ket; al­ter­na­tiv kön­nen sie auch ein­fach die­sen QR-Code scan­nen:

Das Pro­gramm star­tet man und er­fa­ßt (ent­we­der durch ab­tip­pen oder durch Ab­scan­nen vom Bild­schirm) den In­i­tal­schlüs­sel - voila, das war's!