Mobile Geräte benötigen ein Plus an Sicherheit, sollen die darauf gespeicherten Daten nicht in unbefugte Hände gelangen. Deswegen sichern Sie den Zugang am besten mit einem zweiten Faktor in Form eines YubiKeys ab.
Bislang melden Sie sich als Benutzer nur mit der Kombination aus Nutzername und Passwort am System an. Daneben stehen weitere Schnittstellen zur Verfügung, etwa via Smartcard [1], SSH-Key [2] oder gegenüber einem LDAP-Server ([3],[4]). Dagegen hat sich das Anmeldung per Fingerabdruck [5], via GPG-Key oder Personalausweis [6] bislang noch nicht durchgesetzt.
Bei den meisten gängigen Verfahren beruht die Überprüfung Ihrer Identität auf nur einem einzigen Faktor, der Kombination aus Nutzername (Login) und Passwort beziehungsweise Schlüssel. Das genügt in vielen Fällen, nicht aber für die Sicherheit mobiler Geräte sowie sicherheitskritischer Zugänge. Insbesondere die verteilte Rechenpower verkürzt das Knacken von Passworten immer mehr, sodass ein schlichtes Verlängern des Passworts das Ganze nur etwas nach hinten schiebt.
Hier kann nur ein zweiter Faktor Abhilfe schaffen, der weitere Zugangsinformationen über einen zusätzlichen Kanal bereitstellt. Das Verfahren ähnelt der PIN/TAN-Nutzung, wie Sie es vom Onlinebanking her kennen. Als Authentifizierungstoken kommt hier der YubiKey des skandinavischen Herstellers Yubico [7] zum Einsatz, der bereits in unterschiedlichen Szenarien hervorragende Dienste leistete ([8], [9], [10], [11]).
Welches konkrete Modell Sie verwenden, spielt hier keine Rolle. Das Token generiert dynamische Einmalpassworte (One Time Password, OTP), welche das Phishing – also das Ausspähen und Abfangen von Zugangsdaten – sinnlos machen. Große Portale wie beispielsweise Google und Owncloud [12] unterstützen das Token als Authentifizierungsmethode seit Längerem.
Kasten: Einstieg in PAM
Als zentrales Authentifizierungssystem unter Linux dient PAM [23]. Es entscheidet darüber, ob Sie Zugang zum System erhalten oder nicht. PAM steht für Pluggable Authentication Modules und beschreibt sich selbst als “flexibler Mechanismus zur Authentifizierung von Benutzern”. Die verfügbaren Verfahren zur Authentifizierung stehen als separate Module bereit, die Sie nach Bedarf mit einem Dienst (Service) verbinden.
PAM gibt es nicht nur für Linux und Solaris, sondern auch als OpenPAM [24] für diverse BSD-Derivate sowie Mac OS X ab 10.6 “Snow Leopard” [25]. Für Debian/Ubuntu heißen die entsprechenden Pakete libpam-modules, libpam-modules-bin, libpam-runtime und libpam0g. Der verwendete Mechanismus hat sich bislang bewährt. Er gilt als sicher, zuverlässig und flexibel.
Das machen sich auch die Anwendungen zunutze, die auf PAM aufbauen: Sie greifen auf die Module zurück, die Sie in der PAM-Konfiguration unter /etc/pam.d/ eintragen und aktivieren (Listing 1). So muss nicht jede Applikation die benötigten Mechanismen zur Authentifizierung nochmals neu entwickeln. PAM verteilt die Überprüfung auf verschiedene Dateien – im Prinzip eine Datei pro Programm, Werkzeug oder Dienst – und gibt Ihnen damit den Freiraum, deren Nutzung nach Bedarf zu justieren.
Listing 1
# ls /etc/pam.d atd common-session gdm-autologin ppp chfn common-session-noninteractive gdm-welcome samba chpasswd cron login sshd chsh cups newusers su common-account gdm other sudo common-auth gdm3 passwd xscreensaver common-password gdm3-autologin polkit-1 #
Zwei-Faktor-Authentifizierung
Der YubiKey folgt einem einfachen Prinzip: Die von Ihrem Token generierte Zeichenkette wird von einem Authentifizierungssystem auf Gültigkeit überprüft. Liefert dieses eine positive Rückmeldung, gilt die Zeichenkette als OTP für eine Anmeldung und die Authentifizierungsschritte somit als erfolgreich. Als Authentifizierungssystem existieren aktuell fünf Varianten.
Bei Variante 1, dem YubiCloud-Dienst des Herstellers Yubico, erfolgt die Abfrage via Internet als HTTP(S)-Request. Die lokale Basis dafür bildet das PAM-Modul libpam-yubico. Variante 2 nutzt ebenfalls dieses PAM-Modul, aber im Modus HMAC-SHA1 [13] zur lokalen Authentifizierung über ein kryptografisches Hash-Verfahren. Variante 3 nennt sich YubiHSM und entspricht Variante 1, kommt aber in Form zusätzlicher Hardware, die Sie über die USB-Schnittstelle an das (lokale) Authentifizierungssystem anstecken.
Variante 4 heißt YubiX, entspricht ebenfalls Variante 1, und kommt als vorkonfigurierte virtuelle Maschine, die bereits alle Komponenten zur Authentifizierung umfasst und somit als Teil Ihrer eigenen lokalen Infrastruktur [14] dienen kann. Variante 5 stellt das PAM-Modul YubiPAM [15], das Ihnen eine lokale Authentifizierung auf dem System ermöglicht und keine externen Dienste zur Überprüfung benötigt.
Die Varianten 1, 2, 4 und 5 lassen sich kostenfrei nutzen, die ersten drei beziehen Sie von der Webseite des Herstellers beziehungsweise über die Paketverwaltung des Systems. Variante 5 steht als Quellcode auf Github bereit. Für Variante 3 fallen hingegen Kosten von rund 650 Euro für die Crypto-Hardware an.
Da sich Variante 3 eher nicht für Endanwender rechnet und Variante 4 sich noch im Test befindet, betrachten wir nachfolgend nur die Varianten 1, 2 und 5. Die Einrichtung erfolgte auf Debian “Wheezy”. Für Fedora gibt es eine schon etwas ältere, ausführliche Beschreibung ([16],[17]), die uns plausibel erscheint.
Variante 1
Das PAM-Modul libpam-yubico liegt als separates Paket in den Repositories der Distributionen. Dieses Modul pflegt der Hersteller Yubico eigenständig. Es prüft die Gültigkeit des erzeugten OTPs über eine Kommunikation mit der YubiCloud, also dem Yubico-eigenen cloudbasierten Validierungsdienst. Das PAM-Modul und die YubiKeys sind im Auslieferungszustand so konfiguriert, dass sie mit diesem Dienst kommunizieren. Das vereinfacht die Benutzung erheblich und führt sehr schnell zu einem Erfolgserlebnis und höherer Sicherheit.
Bitte beachten Sie aber, dass die vorgestellte Einrichtung und nachfolgende Nutzung im Alltag eine stabile Internetverbindung benötigt. Über diesen Kanal prüft der Yubico-Authentifizierungsserver die Validität des vom YubiKey generierten OTPs als zweiten Faktor. Führen Sie die vorgestellten Schritte ohne bestehende Internet-Verbindung aus, können Sie sich nicht auf dem System anmelden. Halten Sie daher während der Konfiguration eine zusätzliche Root-Shell offen, um die Einstellungen im Bedarfsfall zurücksetzen zu können, falls bei den Experimenten etwas schiefgeht.
Zunächst einmal benötigen Sie die YubiKey-ID, also die ersten zwölf Zeichen des OTPs, das Ihr YubiKey erzeugt. Diese ID erhalten Sie, indem Sie durch den Druck auf den YubiKey-Knopf ein OTP erzeugen und in einem Texteditor ausgeben lassen.
Im zweiten Schritt ordnen Sie den YubiKey einem bestimmten Benutzer (Login) zu. Das geschieht entweder über einen Eintrag im Home-Verzeichnis des Benutzers oder (besser) zentral über die Datei /etc/yubikey_mappings. Dort erfolgt die Zuordnung der YubiKeys mittels einer Liste von durch Doppelpunkte getrennte Felder. Feld 1 nimmt den Benutzernamen auf, ab Feld 2 folgt die ID des jeweiligen YubiKeys. Listing 2 zeigt das Vorgehen für den Benutzer frank.
Listing 2
# touch /etc/yubikey_mappings # echo frank:ccccccbevgvr >> /etc/yubikey_mappings
Im dritten Schritt benötigen Sie ein zusätzliches Geheimnis, das Sie der ID Ihres YubiKeys zuordnen und damit die Abfrage bei Yubico zusätzlich absichern. Diesen sogenannten API-Key erzeugen Sie über den Upgrade-Service von Yubico [18]. Im Formular auf der Webseite tragen Sie im oberen Feld als Referenz Ihre Mailadresse ein, im unteren Feld ein OTP Ihres YubiKeys. Ein Klick auf den Knopf Get API Key erzeugt dann eine Service-ID sowie das zusätzliche Geheimnis (Abbildung 1). Jedes dieser Paare aus Service-ID und Geheimnis ist einzigartig. Aus Sicherheitsgründen empfiehlt sich, es nur einmal zu nutzen und pro Dienst beziehungsweise Server jeweils ein separates Paar zu verwenden.
Im vierten Schritt melden Sie sich als Benutzer root an und installieren falls noch nicht vorhanden über die Paketverwaltung das Paket libpam-yubico (bei Debian/Ubuntu) beziehungsweise yubico-pam (bei Fedora) nach. Danach konfigurieren Sie das neue PAM-Modul und verbinden es mittels Service-ID und zusätzlichem Geheimnis in Form von Parametern. Sie lösen das mit dem Kommando dpkg-reconfigure libpam-yubico aus.
Im entsprechenden Dialog (Abbildung 2) tragen Sie als Parameter zunächst die Service-ID und das Geheimnis ein. Zusätzlich benötigt das PAM-Modul die Information, wo Sie die Zuordnung zwischen Benutzer und YubiKey hinterlegt haben. Dazu ergänzen Sie den Parameter authfile=/etc/yubikey_mappings und bestätigen den Dialog.
Anschließend aktivieren Sie das neue PAM-Modul. Abbildung 3 zeigt das Dialogfenster nach dem (automatischen) Aufruf von pam-auth-update. Es listet die bereits verfügbaren PAM-Module und deren Status auf. Mit der Leertaste schalten Sie das entsprechende Modul ein beziehungsweise wieder aus.
Als Ergebnis erhalten Sie einen zusätzlichen Eintrag in /etc/pam.d/common-auth (Abbildung 4). Dieser besagt, dass das Modul pam_yubico.so erforderlich ist (required), im Client-Modus arbeitet (client) und diesen Schritt überspringt, sofern bereits eine Authentifizierung über eine vorherige Ebene im PAM-Stack erfolgreich war (try_first_pass).

/etc/pam.d/common-auth.” width=”300″ height=”63″ />
Abbildung 4: Modulkonfiguration in/etc/pam.d/common-auth. Die drei letzten Parameter bezeichnen die oben genannte Service-ID (id), das zusätzliche Geheimnis (key) sowie die Zuordnung zur Authorisierungsdatei (authfile). Weitere Parameter, wie beispielsweise die Angabe eines LDAP-Servers oder eines eigenen Diensts zur Authentifizierung, dokumentieren die Manpage und das Handbuch zum Modul ausführlich [19].
Von nun an benötigen alle PAM-basierten Logins – und damit jeder Benutzer auf dem System – den eigenen, vorab konfigurierten, zusätzlichen YubiKey zur Authentifizierung als zweiten Schlüssel. Listing 3 zeigt, wie sich dadurch der Anmeldedialog im Terminal erweitert.
Listing 3
$ su Yubikey for `root': Passwort: [...]
Kasten: Login via SSH
Der SSH-Dialog bietet nur ein Eingabefeld oder einen Prompt, in dem Sie normalerweise nur das Passwort eingeben. In der beschriebenen Einstellung ist auch dieser Zugang bereits mittels YubiKey-OTP abgesichert. Daher tragen Sie am Prompt zuerst das Passwort (ohne [Eingabe]) ein und direkt danach Ihr YubiKey-OTP. PAM nimmt die Eingabe im Hintergrund wieder auseinander und prüft beide Teile auf Korrektheit. Eine ausführliche Besprechung der Absicherung von SSH finden Sie im zweiten Teil unserer YubiKey-Serie in LU 10/2012 [9].
Authentifizierung mit Fallback
Die vorgestellte Methode hängt vom Yubico-Authentifizierungsdienst ab und funktioniert deshalb nur online. Das sperrt Sie vom System aus, wenn Sie offline sind. Sie können PAM jedoch auch so einstellen, dass es eine Art Fallback gibt. Allerdings senkt dies das Sicherheitsniveau und stellt streng genommen keine Zwei-Faktor-Authentifizierung mehr dar. PAM bietet vier verschiedene Möglichkeiten zur Modulsteuerung, die Sie in der Konfigurationsdatei für den entsprechenden Dienst vornehmen [20]:
requisite: Die Authentifizierung über das Modul muss funktionieren, im Fehlerfall werden keine weiteren Module abgearbeitet (notwendige Vorbedingung).required: Die Authentifizierung über das Modul muss funktionieren, im Fehlerfall werden weitere Module abgearbeitet (notwendige Bedingung)sufficient: Klappt die Authentifizierung über das Modul, genügt das, es werden keine weiteren Module abgearbeitet (hinreichende Bedingung).optional: Das Ergebnis der Authentifizierung über das Modul findet keine Beachtung, es sei denn, es ist das einzige für einen Typ.
requisite ist etwas strikter als required, führt aber in unserem Fall zum gleichen Ergebnis. Konfigurieren Sie das Modul pam_yubico hingegen als sufficient statt als required oder requisite, führt das zu mehreren Effekten.
Haben Sie Ihren YubiKey nicht zur Hand oder besteht keine Internetverbindung, schlägt die Validierung des YubiKey-OTPs fehl (Stufe 1). Daraufhin wechselt PAM zum nächsten Modul, pam_unix, und prüft in Stufe 2 nur das Passwort auf Gültigkeit. Geben Sie dieses korrekt ein, können Sie sich damit wie gewohnt auf dem System anmelden, auch offline.
Besteht eine Internetverbindung, kann sich ein Fremder mithilfe des YubiKeys als Sie ausgeben und sich so erfolgreich auf dem System authentifizieren. Aufgrund des sufficient überspringt PAM daraufhin Stufe 2, verlangt also kein zusätzliches Passwort.
Variante 2
Bei HMAC-SHA1 handelt es sich um einen Keyed-Hash Message Authentication Code auf der Basis von SHA1 . Dieses Verfahren nutzen beispielsweise auch SSH und SSL/TLS zur sicheren Datenübertragung im Internet. Diese Variante können Sie auch zur Authentifizierung mit Ihrem YubiKey kombinieren.
Neben dem YubiKey benötigen Sie dazu wieder das PAM-Modul libpam-yubico. Die Administration erfolgt dabei nicht zentral, sondern Sie hinterlegen zusätzlich in Ihrem Home-Verzeichnis eine Datei, die das Challenge-Response-Paar auf der Basis von HMAC-SHA1 für Ihren YubiKey beinhaltet.
Um den YubiKey für das Verfahren HMAC-SHA1 zu konfigurieren, nutzen Sie dessen Slot 2, der im Auslieferungszustand nicht belegt ist. Sie verändern Slot 1 nicht und erhalten sich damit die Voreinstellung, über diesen mit der YubiCloud zu kommunizieren. Während für Slot 1 ein einfacher Druck auf den Knopf auf dem YubiKey genügt, erreichen Sie Slot 2 mit einem Druck von drei bis vier Sekunden Dauer.
Die Einstellung erfolgt über das Personalisierungsprogramm, das Sie im Paket yubikey-personalization-gui erhalten. In dessen Benutzeroberfläche (Abbildung 5) wählen Sie in der Menüleiste zunächst den Challenge-Response-Mode aus und danach den Slot 2. Als HMAC-SHA1 Parameters setzen Sie das Eingabefeld auf Variable input. Über den Schalter Generate erzeugen Sie anschließend das benötigte Challenge-Response-Geheimnis. Mittels Write Configuration schreiben Sie die Daten auf Slot 2 des YubiKeys. Das Programm quittiert den Erfolg in Form einer Statusmeldung und eines grünen Häkchens in der Box Results.

Abbildung 5: Das YubiKey-Personalisierungsprogramm signalisiert die erfolgreiche Konfiguration des YubiKey-Slots 2 für HMAC-SHA1.
Im nächsten Schritt verbinden Sie den YubiKey mit Ihrem Benutzernamen. Über das Programm ykpamcfg speichern Sie die initiale Challenge-Response im Verzeichnis .yubico. Mit dem Aufrufparameter -2 steuern Sie den im ersten Schritt konfigurierten Slot 2 an und erhalten über -v (“verbose”) eine ausführlichere Ausgabe (Listing 4). Das Ergebnis legt das Programm in einer Datei namens challenge-Nummer ab. Dabei leitet sich die Ziffernkombination Nummer aus der Seriennummer des YubiKeys ab.
Listing 4
$ ykpamcfg -2 -v Firmware version 2.2.3 Sending 63 bytes HMAC challenge to slot 2 Reading response... Sending 63 bytes HMAC challenge to slot 2 Reading response... Stored initial challenge and expected response in '/home/frank/.yubico/challenge-1308156'.
Im letzten dritten Schritt konfigurieren Sie PAM entsprechend und ändern den Eintrag in der Datei /etc/pam.d/common-auth wie in Listing 5 gezeigt. Hier kommt es auf den Modus zur Authentifizierung an, den Sie auf mode=challenge-response setzen.
Listing 5
[...] auth required pam_yubico.so mode=challenge-response [...]
Vor dem Login stecken Sie den YubiKey in einen USB-Slot des Rechners. Während der Authentifizierung sendet das PAM-Modul eine Anfrage an den YubiKey und vergleicht das erhaltene Ergebnis mit dem bisher gespeicherten Challenge-Response-Paar. Bei identischer Kennung verläuft die Authentifizierung erfolgreich. Die Abfrage erfolgt automatisch, Sie müssen also keinen Knopf auf dem YubiKey drücken.
Variante 5
Das Projekt YubiPAM [15] stellt eine komplette Kette zur lokalen Authentifizierung bereit. YubiPAM existiert bislang nur als Quellcode und findet sich auch noch in keiner Distribution.
Der Eigenbau erfordert zunächst das Anpassen des Makefiles via Autoconf [21] – auf Debian “Wheezy” funktioniert es nicht out-of-the-box – und anschließend das Übersetzen des Quellcodes gemäß der Beschreibung [22]. Danach legen Sie mit dem Personalisierungsprogramm einen neuen Schlüssel in Slot 2 des YubiKeys ab und merken sich den dazugehörigen AES-Schlüssel (Secret key (16 bytes hex)) für später.
Nun binden Sie das vorher übersetzte PAM-Modul in die PAM-Konfiguration ein (Listing 6). Auch hier gilt wieder, dass der YubiKey alleiniges Authentifikationsmerkmal sein kann. Zur Erhöhung der Sicherheit tauschen Sie sufficient gegen required beziehungsweise requisite aus (siehe Abschnitt “Authentifizierung mit Fallback” oben).
Listing 6
[...] auth sufficient pam_yubikey.so [...]
Als nächsten Schritt tragen Sie einen Benutzer in die noch leere Liste der gültigen YubiKeys in der Textdatei /etc/yubikey ein. Diese Liste beinhaltet verschlüsselte Inhalte, unter anderem den vorab gemerkten AES-Schlüssel. Weil sie sicherheitsrelevant ist, dürfen andere Benutzern sie nicht lesen können.
Das verwendete Kommando ykpasswd stammt aus dem Quellcode-Fundus von YubiPAM und entsteht bei der Übersetzung quasi nebenher. Es verwendet die Optionen -a (füge Benutzer hinzu), -u (Benutzername/Login), -k (AES-Schlüssel) und -o (YubiKey-OTP). Letzteres erhalten Sie, indem Sie ein OTP für Slot 2 erzeugen und den Knopf auf dem YubiKey drei bis vier Sekunden drücken. Listing 7 zeigt den Ablauf beispielhaft.
Listing 7
# ykpasswd -a -u frank -k AES-Schlüssel -o OTP Adding Yubikey entry for frank Using public UID: 00 00 00 00 00 00 Using private UID: 00 00 00 00 00 00 Completed successfully.
Abschließend überprüfen Sie mit dem Kommando ykvalidate, ob die Authentifizierung klappt. Auch dieses Programm stammt aus den Quellen von YubiPAM. Der Parameter -u zeigt auf den Benutzernamen (Login), der zweite beinhaltet ein gültiges OTP (Listing 8). Die Rückmeldung OTP is VALID dokumentiert den Erfolg, sodass nun darüber eine Anmeldung mit höherer Sicherheit klappt.
Listing 8
# ykvalidate -u frank OTP frank: OTP is VALID.
Fazit
Alle drei vorgestellten Verfahren ergänzen den bisher üblichen Prozess zur Authentifizierung um einen zweiten Faktor. Alle Verfahren sind mehrbenutzerfähig, auch wenn die Implementierung jeweils einem unterschiedlichen Konzept folgt (lokale/zentrale Administration). Bei Variante 5 müssen sich alle Dienste, die auf die Authentifizierung der Benutzer zurückgreifen, in der Gruppe yubiauth für das Modul YubiPAM befinden, damit sie darauf zugreifen können.
Variante 1 lässt sich am leichtesten einrichten, setzt aber den Zugriff auf die YubiCloud voraus und schränkt damit die Benutzung des Systems auf Bereiche mit Internetzugang ein. Variante 2 und 5 passen für autarke Systeme und heben die Abhängigkeit vom Yubico-Authentifizierungsserver auf.
Unsere Präferenz für mobile Geräte liegt bei Variante 2, da dieses Verfahren entsprechend den Debian-Richtlinien auf bestehende Pakete aufsetzt. Variante 1 und 5 hinken da zu gleichen Teilen hinterher – erstere ist paketiert, aber nicht autark, letztere hingegen autark aber nicht paketiert. Egal, welche Variante Sie einsetzen – der YubiKey belohnt Sie in jedem Fall mit einem Plus an Sicherheit.
Danksagung
Der Autor bedankt sich bei Werner Heuser und Wolfram Eifler für deren kritische Hinweise und Anregungen im Vorfeld dieses Artikels.
Infos
[1] “GNU/Linux smartcard logon using PAM-PKCS11”: http://www.gooze.eu/de/howto/gnu-linux-smartcard-logon-using-pam-pkcs11
[2] PAM über SSH-Keys: http://pam-ssh.sourceforge.net/
[3] Debian-Paket libpam-ldap: https://packages.debian.org/wheezy/libpam-ldap
[4] LDAP und PAM verbinden: https://wiki.debian.org/LDAP/PAM
[5] Fprint: http://www.freedesktop.org/wiki/Software/fprint/
[6] “Die Technik des elektronischen Personalausweises”: Jörg Schilling, Vortrag im Rahmen der Chemnitzer Linux-Tage 2014, http://chemnitzer.linux-tage.de/2014/de/vortraege/detail/221
[7] Yubico: http://www.yubico.com
[8] Sichere Authentifikation mit dem YubiKey (Teil 1): Frank Hofmann, Thomas Osterried, “Ausbuchstabiert”, LU 09/2012, S. 18, https://www.linux-community.de/25925
[9] Sichere Authentifikation mit dem YubiKey (Teil 2): Frank Hofmann, Thomas Osterried, “Schlüsselerlebnisse”, LU 10/2012, S. 68, https://www.linux-community.de/25961
[10] YubiKey Neo als NFC-Authentifizierungs-Tag: Werner Heuser, Frank Hofmann, “Angestrichen”, LU 07/2014, S. 82, https://www.linux-community.de/32134
[11] Apache-Webzugang mit dem YubiKey absichern (PDF): Werner Heuser, Frank Hofmann, “Aufgeschlossen”, UpTimes 01/2014, S. 16, https://www.guug.de/uptimes/2014-1/uptimes_2014-01.pdf
[12] “Two-factor authentication for ownCloud using one-time passwords (OTP) from Yubikey”: http://www.sj-vs.net/two-factor-authentication-for-owncloud-using-one-time-passwords-otp-from-yubikey/
[13] YubiKey HMAC-SHA1: https://www.yubico.com/products/services-software/personalization-tools/challenge-response/
[14] Fertige VMs zur lokalen Authentifizierung: http://opensource.yubico.com/yubix-vm/
[15] YubiPAM auf Github: https://github.com/firnsy/yubipam/
[16] “Enable Yubikey Authentication on Fedora 14”: http://blog.fpmurphy.com/2010/11/enable-yubikey-authentication-on-fedora-14.html
[17] “Using Yubikeys with Fedora”: https://fedoraproject.org/wiki/Using_Yubikeys_with_Fedora
[18] Yubico Upgrade Service: https://upgrade.yubico.com/getapikey/
[19] Yubico Pluggable Authentication Module: http://opensource.yubico.com/yubico-pam/
[20] PAM im Linux-Wiki: http://linuxwiki.de/PAM
[21] “Unable to run autoconf on configure.ac”: https://bbs.archlinux.org/viewtopic.php?pid=1258673
[22] “Yubikey Authentication on Linux”: http://blog.rootshell.be/2009/03/27/yubikey-authentication-on-linux/
[23] Linux-PAM: http://www.linux-pam.org
[24] OpenPAM: http://en.wikipedia.org/wiki/OpenPAM
[25] “Challenge response authentication (on Mac OS X)”: https://github.com/Yubico/yubico-pam/wiki/ChallengeResponse-%28on-Mac-OS-X%29








