Das Yubico PAM-Modul bietet eine einfache Möglichkeit, den YubiKey in Ihre bestehende Benutzerauthentifizierungsinfrastruktur zu integrieren. PAM wird von GNU/Linux, Solaris und Mac OS X zur Benutzerauthentifizierung sowie von anderen Spezialanwendungen wie NCSA MyProxy verwendet.
Das Modul funktioniert für Mehrbenutzersysteme. Der primäre Betriebsmodus besteht darin, eine Online-Validierung mithilfe eines YubiKey-Validierungsdienstes durchzuführen (z. B. YubiCloud oder einen privaten Dienst, der mit dem Parameter „urllist“ konfiguriert wurde).
In Version 2.6 wurde die Offline-Validierung auch durch die Verwendung von HMAC-SHA1 Challenge-Response ermöglicht, das in YubiKey 2.2 und höher zu finden ist. Dadurch wurde eine Abhängigkeit von libykpers-1 vom ykpersonalize-Paket eingeführt. Übergeben Sie --without-cr
an configure
um diese Abhängigkeit zu vermeiden.
Die Koordination der Entwickler-Community erfolgt über die GitHub-Projektseite.
Das Projekt steht unter einer BSD-Lizenz. Den genauen Wortlaut finden Sie in der Datei KOPIEREN. Beachten Sie für jeden in diesem Paket als YYYY-ZZZZ angegebenen Copyright-Jahrsbereich, dass der Bereich jedes einzelne Jahr in diesem geschlossenen Intervall angibt.
Fahren Sie mit dem nächsten Abschnitt fort, wenn Sie eine offizielle Paketversion verwenden.
Sie können die Quellen mit Git mit dem folgenden Befehl auschecken:
$ Git-Klon https://github.com/Yubico/yubico-pam.git
Dadurch wird das Verzeichnis yubico-pam
erstellt.
Autoconf, Automake, libtool, asciidoc, xsltproc und docbook-xsl müssen installiert sein, um einen kompilierbaren Quellbaum zu erstellen.
Generieren Sie das Build-System mit:
$ cd yubico-pam $ autoreconf --install
Sie müssen libykclient (ykclient.h, libykclient.so) und libpam-dev (security/pam_appl.h, libpam.so) installiert haben. Es erfordert wiederum cURL, das Sie installiert haben müssen, und libybikey.
Für die Challenge-Response-Offline-Authentifizierung ist libykpers-1 aus dem yubikey-personalization-Projekt erforderlich:
Für die Selbsttests ist Perl mit installiertem Modul Net::LDAP::Server erforderlich.
Das Build-System verwendet Autoconf, um den Build-Systemlauf einzurichten:
./konfigurieren
Verwenden Sie --without-ldap, um die LDAP-Unterstützung zu deaktivieren.
Erstellen Sie dann den Code, führen Sie den Selbsttest durch und installieren Sie die Binärdateien:
make check install
In Fedora/EPEL gibt es bereits ein Paket von yubico-pam, das mit yum installiert werden kann:
$ sudo yum installiere pam_yubico
Es gibt ein Ubuntu PPA (Personal Package Archive) für yubico-pam, das mit den folgenden Befehlen auf halbwegs modernen Ubuntu-Plattformen installiert werden kann:
$ sudo add-apt-repository ppa:yubico/stable $ sudo apt-get update $ sudo apt-get install libpam-yubico
Sehen Sie sich nach der Installation die Datei /usr/share/doc/libpam-yubico/README.Debian
an.
yubico-pam und die unterstützenden Yubico-Pakete verfügen über entsprechende FreeBSD-Ports. Zur Installation:
$ cd /usr/ports/security/pam_yubico $ Make Install Clean
Erweiterte Konfigurationshinweise finden Sie hier.
Installieren Sie es in Ihrem PAM-Setup, indem Sie einer entsprechenden Datei in /etc/pam.d/
eine Zeile hinzufügen:
Authentifizierung ausreichend pam_yubico.so id=[Ihre API-Client-ID] debuggen
und verschieben Sie pam_yubico.so nach /lib/security/ (oder dorthin, wo sich PAM-Module in Ihrem System befinden):
mv /usr/local/lib/security/pam_yubico.so /lib/security/
Weitere Informationen finden Sie in der Projektdokumentation.
Unterstützte PAM-Modulparameter sind:
Authentifizierungsdatei | Um den Speicherort der Datei anzugeben, die die Zuordnungen von YubiKey-Token-IDs zu Benutzernamen enthält. |
Ausweis | Ihre API-Client-ID im Yubico-Validierungsserver. Wenn Sie den Standard-YubiCloud-Dienst verwenden möchten, klicken Sie hier. |
Schlüssel | Zur Angabe Ihres Client-Schlüssels im Base64-Format. Der Client-Schlüssel wird auch als API-Schlüssel bezeichnet und sorgt für Integrität in der Kommunikation zwischen dem Client (Ihnen) und dem Validierungsserver. Wenn Sie eines zur Verwendung mit dem Standard-YubiCloud-Dienst erwerben möchten, klicken Sie hier. |
debuggen | um die Debug-Ausgabe zu aktivieren. |
debug_file | Dateiname, in den das Debug geschrieben werden soll. Die Datei muss vorhanden und eine reguläre Datei sein. stdout ist Standard. |
Immer ok | um sicherzustellen, dass alle Authentifizierungsversuche erfolgreich sind (auch Präsentationsmodus genannt). |
try_first_pass | Bevor der Benutzer zur Eingabe seines Passworts aufgefordert wird, versucht das Modul zunächst das Passwort des vorherigen gestapelten Moduls, falls dieses auch die Anforderungen dieses Moduls erfüllt. |
use_first_pass | Das Argument use_first_pass zwingt das Modul dazu, ein vorheriges Kennwort für gestapelte Module zu verwenden, und fordert den Benutzer niemals dazu auf. Wenn kein Kennwort verfügbar oder das Kennwort nicht geeignet ist, wird dem Benutzer der Zugriff verweigert. |
immer_prompt | Wenn diese Option festgelegt ist, versuchen Sie nicht, eine Suche durchzuführen, um festzustellen, ob der Benutzer einen YubiKey konfiguriert hat, sondern fordern Sie stattdessen auf jeden Fall zur Eingabe eines YubiKey auf. Dies ist nützlich, wenn ldap_bind_as_user aktiviert ist, dieses Modul jedoch zum Lesen des Benutzerkennworts verwendet wird (in einem YubiKey+OTP-Authentifizierungsszenario). |
nullok | Wenn diese Option festgelegt ist, tritt kein Fehler auf, wenn in den Autorisierungszuordnungsdateien oder im LDAP keine Token für den Benutzer deklariert sind. Dies kann verwendet werden, um die YubiKey-Authentifizierung optional zu machen, es sei denn, der Benutzer verfügt über zugehörige Token. |
ldap_starttls | Wenn festgelegt, geben Sie einen STARTTLS-Befehl an die LDAP-Verbindung aus, bevor Sie versuchen, eine Bindung herzustellen. Dies ist ein gängiges Setup für Server, die nur Port 389 überwachen, aber dennoch TLS benötigen. |
ldap_bind_as_user | Wenn festgelegt, wird die Benutzeranmeldung zum Binden an LDAP verwendet. Dabei wird das vom Benutzer über PAM bereitgestellte Passwort verwendet. Wenn dies festgelegt ist, müssen auch ldapdn und uid_attr festgelegt werden. Wenn Sie dies aktivieren, werden „ldap_bind_user“ und „ldap_bind_password“ ignoriert |
URL-Liste | Liste der zu verwendenden URL-Vorlagen. Dies wird durch den Aufruf von ykclient_set_url_bases festgelegt. Die Liste sollte das folgende Format haben: |
URL | Diese Option sollte nicht verwendet werden. Bitte verwenden Sie stattdessen die Option „urllist“. Geben Sie die zu verwendende URL-Vorlage an. Diese wird durch Aufrufen von yubikey_client_set_url_template festgelegt. Der Standardwert lautet: |
kapath | Geben Sie den Pfad an, in dem X509-Zertifikate gespeichert werden. Dies ist erforderlich, wenn „https“ oder „ldaps“ in „url“ bzw. „ldap_uri“ verwendet werden. |
cainfo | Option, um die Verwendung eines CA-Bundles anstelle eines Pfads zuzulassen. |
Proxy | Geben Sie einen Proxy an, um eine Verbindung zum Validierungsserver herzustellen. Gültige Schemata sind http://, https://, Socks4://, Socks4a://, Socks5:// oder Socks5h://. Socks5h fordert den Proxy auf, die DNS-Auflösung durchzuführen. Wenn kein Schema oder Port angegeben ist, wird der HTTP-Proxy-Port 1080 verwendet. |
verbose_otp | Dieses Argument wird verwendet, um das OTP (One-Time Password) bei der Eingabe anzuzeigen, dh um das Terminal-Echo der eingegebenen Zeichen zu ermöglichen. Es wird davon abgeraten, dies zu verwenden, wenn Sie eine Zwei-Faktor-Authentifizierung verwenden, da dadurch Ihr Passwort auf dem Bildschirm angezeigt wird. Dazu muss der Dienst das PAM-Modul verwenden, um benutzerdefinierte Felder anzuzeigen. Diese Option kann nicht mit OpenSSH verwendet werden. |
ldap_uri | Geben Sie den LDAP-Server-URI an (z. B. ldap://localhost). |
ldapserver | Geben Sie den LDAP-Server-Host an (der Standard-LDAP-Port wird verwendet). Veraltet. Verwenden Sie stattdessen „ldap_uri“. |
ldapdn | Geben Sie den DN an, in dem die Benutzer gespeichert sind (z. B. ou=users,dc=domain,dc=com). |
ldap_clientcertfile | Der Pfad zu einer Client-Zertifikatdatei, die bei der Kommunikation mit dem LDAP-Server verwendet werden soll. Beachten Sie, dass hierfür auch „ldap_clientkeyfile“ festgelegt werden muss. |
ldap_clientkeyfile | Der Pfad zu einem Schlüssel, der mit dem Client-Zertifikat verwendet werden soll, wenn mit dem LDAP-Server kommuniziert wird. Beachten Sie, dass hierfür auch „ldap_clientcertfile“ festgelegt werden muss. |
ldap_bind_user | Der Benutzer, der eine LDAP-Bindung als versuchen soll. |
ldap_bind_password | Das für die LDAP-Bindung zu verwendende Passwort. |
ldap_filter | Ein LDAP-Filter, mit dem versucht wird, das richtige Objekt in LDAP zu finden. In dieser Zeichenfolge wird |
ldap_cacertfile | CA-Zertifikatdatei für die LDAP-Verbindung. |
user_attr | Geben Sie das LDAP-Attribut an, das zum Speichern von Benutzernamen verwendet wird (z. B.:cn). |
yubi_attr | Geben Sie das LDAP-Attribut an, das zum Speichern der YubiKey-ID verwendet wird. |
yubi_attr_prefix | Geben Sie das Präfix des LDAP-Attributwerts an, wenn es sich um ein generisches Attribut handelt, das zum Speichern verschiedener ID-Typen verwendet wird. |
token_id_length | Länge der ID, die dem OTP vorangestellt wird (dies ist 12, wenn die YubiCloud verwendet wird). |
Modus | Funktionsweise. Verwenden Sie „Client“ für die Online-Validierung mit einem YubiKey-Validierungsdienst wie YubiCloud oder „Challenge-Response“ für die Offline-Validierung mit YubiKeys mit HMAC-SHA-1 Challenge-Response-Konfigurationen. Weitere Informationen zur Konfiguration der Offline-Challenge-Response-Validierung finden Sie in der Manpage ykpamcfg(1). |
chalresp_path | Verzeichnis, das bei einer systemweiten Konfiguration zum Speichern der Challenge-Dateien verwendet wird (im Gegensatz zur Speicherung der Challenge-Dateien im Home-Verzeichnis eines Benutzers). Dieser Speicherort sollte nur für Root lesbar und beschreibbar sein. Weitere Informationen zu einem solchen Setup finden Sie unter |
mysql_server | Hostname/Adresse des MySQL-Servers, der für die Zuordnung verwendet werden soll. |
mysql_port | Netzwerkport des MySQL-Servers. |
mysql_user | Benutzer für den Zugriff auf die MySQL-Datenbank. |
mysql_password | Passwort für den MySQL-Benutzer. |
mysql_database | Die zu verwendende MySQL-Datenbank. |
Wenn Sie „Debug“ verwenden, kann es hilfreich sein, eine von allen Benutzern beschreibbare Protokolldatei zu erstellen:
touch /var/run/pam-debug.log
chmod go+w /var/run/pam-debug.log
Notiz | Bitte bedenken Sie, dass der physische Zugriff auf Systeme häufig die Umgehung von Sicherheitskontrollen ermöglicht. Wenn ein Angreifer physischen Zugriff auf Ihr System hat (z. B. einen in einem Hotelzimmer zurückgelassenen Laptop) und im Einzelbenutzermodus booten kann, kann er yubico-pam in Ihrer Systemkonfiguration deaktivieren. |
Es muss eine Zuordnung zwischen der YubiKey-Token-ID und der Benutzer-ID vorgenommen werden, an die sie angehängt ist. Dafür gibt es zwei Möglichkeiten: entweder zentral in einer Datei oder individuell, wobei Benutzer die Zuordnung in ihren Home-Verzeichnissen erstellen können. Wenn die zentrale Berechtigungszuordnungsdatei verwendet wird, werden die Benutzer-Home-Verzeichniszuordnungen nicht verwendet. Das Gegenteil gilt: Wenn Benutzer-Home-Verzeichniszuordnungen verwendet werden, wird die zentrale Berechtigungszuordnungsdatei nicht verwendet.
Erstellen Sie eine /etc/yubikey_mappings
. Die Datei muss einen Benutzernamen und die durch Doppelpunkte getrennte YubiKey-Token-ID enthalten (gleiches Format wie die passwd-Datei) für jeden Benutzer, den Sie mit einem YubiKey auf das System zulassen möchten.
Die Zuordnungen sollten wie folgt aussehen, eine pro Zeile:
: : :…. : : :….
Fügen Sie nun authfile=/etc/yubikey_mappings
zu Ihrer PAM-Konfigurationszeile hinzu, sodass es wie folgt aussieht:
Authentifizierung ausreichend pam_yubico.so id=[Ihre API-Client-ID] authfile=/etc/yubikey_mappings
Jeder Benutzer erstellt eine ~/.yubico/authorized_yubikeys
-Datei in seinem Home-Verzeichnis und platziert die Zuordnung in dieser Datei. Die Datei darf nur eine Zeile enthalten:
: :
Dies ist weitgehend das gleiche Konzept wie die SSH-authorized_keys-Datei.
Sie können die YubiKey-Token-ID auf verschiedene Arten erhalten. Eine besteht darin, die letzten 32 Zeichen eines mit Ihrem YubiKey generierten OTP (One Time Password) zu entfernen. Eine andere Möglichkeit besteht darin, den Modhex-Rechner zu verwenden.
Geben Sie Ihr YubiKey-OTP ein und konvertieren Sie es. Ihre YubiKey-Token-ID besteht aus 12 Zeichen und wird wie folgt aufgeführt:
Modhex-codiert: XXXXXXX
Sie sind sich nicht sicher, was dieser letzte Teil bedeutete? So erhalten Sie eine Kopie Ihres OTP.
Öffnen Sie ein Terminal
Drücken Sie die Taste des YubiKey. Es wird ein OTP in die Shell ausgegeben:
$ cccccccgklgcvnkcvnnegrnhgrjkhlkfhdkclfncvlgj
bash: cccccccgklgcvnkcvnnegrnhgrjkhlkfhdkclfncvlgj: command not found
Dies kann in die Seite Modhex_Calculator eingefügt werden.
Dazu muss das Pam-Modul aktiviert und „Debug“ aktiviert sein. Wenn Sie nach dem YubiKey gefragt werden, drücken Sie die Taste. Das Pam-Modul gibt Debug-Informationen, einschließlich OTP und ID Ihres Tokens, an die Shell aus. Kopieren Sie die ID in Ihre Konfigurationsdatei, und schon kann es losgehen.
YubiKey für „IhrBenutzer“: [pam_yubico.c:pam_sm_authenticate(867)] conv hat 44 Byte zurückgegeben [pam_yubico.c:pam_sm_authenticate(885)] Die ersten 0 Bytes werden übersprungen. Die Länge beträgt 44, token_id ist auf 12 und Token-OTP immer 32. [pam_yubico.c:pam_sm_authenticate(892)] OTP: ccccccclabcabkhbdncicglfltnukadfoifadfhhhhfe ID: cccccclabcab
Benutzer mit SELinux im Erzwingungsmodus (die Standardeinstellung bei Fedora 17+) können Anmeldeprobleme bei Diensten haben, einschließlich der über polkit-agent-helper-1, sshd und login validierten Dienste.
Dies ist in Red Hat Bugzilla dokumentiert, einschließlich einer Problemumgehung für SSH (Äquivalente Dateien könnten für andere Dienste erstellt werden). Systeme im „permissiven“ Modus generieren AVC-Warnungen, die Authentifizierung ist jedoch erfolgreich.
Um festzustellen, ob Sie SELinux erzwingen oder nicht, führen Sie den Befehl sestatus
aus.
Wenn Sie den YubiKey zur Authentifizierung bei Linux-Konsolenanmeldungen verwenden möchten, fügen Sie oben in /etc/pam.d/login
Folgendes hinzu:
Authentifizierung ausreichend pam_yubico.so id=[Ihre API-Client-ID] debuggen
Sehen Sie sich Michael Ludvigs Beispiele für Active Directory-Schemaerweiterungen für die Speicherung/Zuordnung von YubiKey-Attributen öffentlicher ID zu einem bestimmten Benutzerkonto an: https://github.com/mludvig/yubikey-ldap/tree/master/microsoft-schema
Datei „/etc/pam.d/openvpn“ erstellen:
Authentifizierung erforderlich pam_yubico.so ldap_uri=ldap://contoso.com debug id=[Ihre API-ID] yubi_attr=YubiKeyID ldapdn=DC=contoso,DC=com ldap_filter=(&(sAMAccountName=%u)(objectClass=user)(memberOf=CN=somegroup,DC=contoso,DC=com)) [ldap_bind_user=CN=binduser,OU=Dienstkonten,DC=contoso,DC=com] ldap_bind_password=bind_password try_first_pass Konto erforderlich pam_yubico.so
Datei „openvpn.conf“ erstellen
Plugin openvpn-plugin-auth-pam.so openvpn