Le module Yubico PAM offre un moyen simple d'intégrer la YubiKey dans votre infrastructure d'authentification utilisateur existante. PAM est utilisé par GNU/Linux, Solaris et Mac OS X pour l'authentification des utilisateurs, ainsi que par d'autres applications spécialisées telles que NCSA MyProxy.
Le module fonctionne pour les systèmes multi-utilisateurs. Le mode de fonctionnement principal consiste à effectuer une validation en ligne à l'aide d'un service de validation YubiKey (tel que YubiCloud, ou un service privé configuré à l'aide du paramètre « urllist »).
Dans la version 2.6, la validation hors ligne a également été rendue possible grâce à l'utilisation du défi-réponse HMAC-SHA1 trouvé dans YubiKey 2.2 et versions ultérieures. Cela a introduit une dépendance de libykpers-1 du package ykpersonalize. Passez --without-cr
pour configure
pour éviter cette dépendance.
La communauté de développement est coordonnée via la page du projet GitHub.
Le projet est sous licence BSD. Voir le fichier COPIE pour le libellé exact. Pour toute plage d’années de droit d’auteur spécifiée comme AAAA-ZZZZ dans ce package, notez que la plage spécifie chaque année dans cet intervalle fermé.
Passez à la section suivante si vous utilisez une version packagée officielle.
Vous pouvez consulter les sources en utilisant Git avec la commande suivante :
$ git clone https://github.com/Yubico/yubico-pam.git
Cela créera le répertoire yubico-pam
.
Autoconf, automake, libtool, asciidoc, xsltproc et docbook-xsl doivent être installés pour créer une arborescence source compilable.
Générez le système de build en utilisant :
$ cd yubico-pam $ autoreconf --install
Vous devrez avoir installé libykclient (ykclient.h, libykclient.so) et libpam-dev (security/pam_appl.h, libpam.so). Cela nécessite à son tour cURL, que vous devez avoir installé, et libyubikey.
L'authentification hors ligne Challenge-Réponse nécessite libykpers-1 du projet yubikey-personalization :
Les autotests nécessitent Perl avec le module Net::LDAP::Server installé.
Le système de build utilise Autoconf pour configurer l'exécution du système de build :
./configurer
Utilisez --without-ldap pour désactiver la prise en charge de LDAP.
Ensuite, construisez le code, exécutez l'autotest et installez les binaires :
faire vérifier l'installation
Il existe déjà un paquet dans Fedora/EPEL de yubico-pam qui peut être installé en utilisant yum :
$ sudo miam install pam_yubico
Il existe un PPA (Personal Package Archive) Ubuntu pour yubico-pam qui peut être installé à l'aide des commandes suivantes sur des plates-formes Ubuntu raisonnablement modernes :
$ sudo add-apt-repository ppa:yubico/stable $ sudo apt-get mise à jour $ sudo apt-get install libpam-yubico
Consultez le fichier /usr/share/doc/libpam-yubico/README.Debian
après l'installation.
yubico-pam et les packages Yubico pris en charge ont des ports FreeBSD correspondants. Pour installer :
$ cd /usr/ports/sécurité/pam_yubico $ rendre l'installation propre
Les notes de configuration avancées sont disponibles ici.
Installez-le dans votre configuration PAM en ajoutant une ligne à un fichier approprié dans /etc/pam.d/
:
auth suffisant pam_yubico.so id=[Votre ID client API] débogage
et déplacez pam_yubico.so dans /lib/security/ (ou partout où les modules PAM se trouvent dans votre système) :
mv /usr/local/lib/security/pam_yubico.so /lib/security/
Pour plus d’informations, consultez la documentation du projet.
Les paramètres du module PAM pris en charge sont :
fichier d'authentification | Pour indiquer l'emplacement du fichier contenant les mappages des ID de jeton YubiKey avec les noms d'utilisateur. |
identifiant | Votre ID client API dans le serveur de validation Yubico. Si vous souhaitez utiliser le service YubiCloud par défaut, allez ici. |
clé | Pour indiquer votre clé client au format base64. La clé client est également connue sous le nom de clé API et assure l'intégrité de la communication entre le client (vous) et le serveur de validation. Si vous souhaitez en obtenir un à utiliser avec le service YubiCloud par défaut, allez ici. |
déboguer | pour activer la sortie de débogage. |
fichier_debug | nom de fichier dans lequel écrire le débogage, le fichier doit exister et être un fichier normal. la sortie standard est la sortie par défaut. |
toujours ok | pour permettre à toutes les tentatives d'authentification de réussir (c'est-à-dire le mode présentation). |
try_first_pass | Avant de demander à l'utilisateur son mot de passe, le module essaie d'abord le mot de passe du module empilé précédent au cas où cela satisferait également ce module. |
use_first_pass | L'argument use_first_pass force le module à utiliser un mot de passe de modules empilés précédent et n'invitera jamais l'utilisateur - si aucun mot de passe n'est disponible ou si le mot de passe n'est pas approprié, l'utilisateur se verra refuser l'accès. |
toujours_prompt | S'il est défini, n'essayez pas d'effectuer une recherche pour déterminer si l'utilisateur a configuré une YubiKey, mais demandez-en plutôt une, quoi qu'il arrive. Ceci est utile dans le cas où ldap_bind_as_user est activé mais que ce module est utilisé pour lire le mot de passe de l'utilisateur (dans un scénario d'authentification YubiKey+OTP). |
nulok | Si défini, n'échoue pas lorsqu'aucun jeton n'est déclaré pour l'utilisateur dans les fichiers de mappage d'autorisation ou dans LDAP. Cela peut être utilisé pour rendre l'authentification YubiKey facultative, sauf si l'utilisateur dispose de jetons associés. |
ldap_starttls | Si défini, émettez une commande STARTTLS sur la connexion LDAP avant de tenter de vous y lier. Il s'agit d'une configuration courante pour les serveurs qui écoutent uniquement sur le port 389 mais nécessitent toujours TLS. |
ldap_bind_as_user | S'il est défini, utilisez l'utilisateur qui se connecte pour se lier à LDAP. Cela utilisera le mot de passe fourni par l'utilisateur via PAM. Si ceci est défini, ldapdn et uid_attr doivent également être définis. L'activation de cette option entraînera l'ignorance de "ldap_bind_user" et "ldap_bind_password". |
liste d'URL | Liste des modèles d'URL à utiliser. Ceci est défini en appelant ykclient_set_url_bases. La liste doit être au format : |
URL | Cette option ne doit pas être utilisée, veuillez plutôt utiliser l'option urllist. Spécifiez le modèle d'URL à utiliser, celui-ci est défini en appelant yubikey_client_set_url_template, qui est par défaut : |
capath | spécifiez le chemin où les certificats X509 sont stockés. Ceci est requis si « https » ou « ldaps » sont utilisés respectivement dans « url » et « ldap_uri ». |
cainfo | Option permettant d'autoriser l'utilisation d'un bundle CA au lieu d'un chemin. |
procuration | spécifiez un proxy pour vous connecter au serveur de validation. Les schémas valides sont http://, https://, chaussettes4://, chaussettes4a://, chaussettes5:// ou chaussettes5h://. Socks5h demande au proxy d'effectuer la résolution DNS. Si aucun schéma ou port n'est spécifié, le port proxy HTTP 1080 sera utilisé. |
verbeux_otp | Cet argument est utilisé pour afficher l'OTP (One-Time Password) lors de sa saisie, c'est-à-dire pour activer l'écho du terminal des caractères saisis. Il est conseillé de ne pas l'utiliser si vous utilisez une authentification à deux facteurs, car cela affichera votre mot de passe à l'écran. Cela nécessite que le service utilisant le module PAM affiche les champs personnalisés. Cette option ne peut pas être utilisée avec OpenSSH. |
ldap_uri | spécifiez l'URI du serveur LDAP (par exemple ldap://localhost). |
serveur ldap | spécifiez l'hôte du serveur LDAP (le port LDAP par défaut est utilisé). Obsolète. Utilisez plutôt "ldap_uri". |
ldapdn | spécifiez le DN où les utilisateurs sont stockés (par exemple : ou=users,dc=domain,dc=com). |
ldap_clientcertfile | Le chemin d'accès à un fichier de certificat client à utiliser pour communiquer avec le serveur LDAP. Notez que cela nécessite également que « ldap_clientkeyfile » soit défini. |
ldap_clientkeyfile | Le chemin d'accès à une clé à utiliser avec le certificat client lors de la conversation avec le serveur LDAP. Notez que cela nécessite également que « ldap_clientcertfile » soit défini. |
ldap_bind_user | Utilisateur sous lequel tenter une liaison LDAP. |
ldap_bind_password | Le mot de passe à utiliser sur la liaison LDAP. |
ldap_filter | Un filtre LDAP à utiliser pour tenter de trouver le bon objet dans LDAP. Dans cette chaîne, |
fichier ldap_cacert | Fichier de certificat CA pour la connexion LDAP. |
utilisateur_attr | spécifiez l'attribut LDAP utilisé pour stocker les noms d'utilisateurs (par exemple : cn). |
yubi_attr | spécifiez l'attribut LDAP utilisé pour stocker l'ID YubiKey. |
yubi_attr_prefix | précisez le préfixe de la valeur de l'attribut LDAP, dans le cas d'un attribut générique, utilisé pour stocker plusieurs types d'identifiants. |
token_id_length | Longueur de l'ID préfixant l'OTP (c'est 12 si vous utilisez YubiCloud). |
mode | Mode de fonctionnement. Utilisez « client » pour la validation en ligne avec un service de validation YubiKey tel que YubiCloud, ou utilisez « challenge-response » pour la validation hors ligne à l'aide de YubiKeys avec les configurations Challenge-Response HMAC-SHA-1. Consultez la page de manuel ykpamcfg(1) pour plus de détails sur la configuration de la validation Challenge-Réponse hors ligne. |
chalresp_path | Répertoire utilisé pour stocker les fichiers de défi dans le cas d'une configuration à l'échelle du système (contrairement aux fichiers de défi stockés dans le répertoire personnel d'un utilisateur). Cet emplacement ne doit être lisible et accessible en écriture que par root. Reportez-vous à |
serveur_mysql | Nom d'hôte/adresse du serveur MySQL à utiliser pour le mappage. |
port_mysql | Port réseau du serveur mysql. |
utilisateur_mysql | Utilisateur pour accéder à la base de données mysql. |
mot de passe mysql | Mot de passe pour l'utilisateur MySQL. |
mysql_base de données | La base de données mysql à utiliser. |
Si vous utilisez « debug », il peut être utile de créer un fichier journal accessible en écriture :
touch /var/run/pam-debug.log
chmod go+w /var/run/pam-debug.log
Note | N'oubliez pas que l'accès physique aux systèmes permet souvent de contourner les contrôles de sécurité. Si un attaquant a un accès physique à votre système (comme un ordinateur portable laissé dans une chambre d'hôtel) et peut démarrer en mode mono-utilisateur, il peut désactiver yubico-pam dans la configuration de votre système. |
Un mappage doit être effectué entre l'ID du jeton YubiKey et l'ID utilisateur auquel il est attaché. Il existe deux manières de procéder, soit de manière centralisée dans un fichier, soit individuellement, les utilisateurs pouvant créer le mappage dans leurs répertoires personnels. Si le fichier de mappage d'autorisation centrale est utilisé, les mappages de répertoire de base d'utilisateur ne seront pas utilisés et l'inverse s'applique si des mappages de répertoire de base d'utilisateur sont utilisés, le fichier de mappages d'autorisation centrale ne sera pas utilisé.
Créez un /etc/yubikey_mappings
, le fichier doit contenir un nom d'utilisateur et l'ID du jeton YubiKey séparés par des deux-points (même format que le fichier passwd) pour chaque utilisateur que vous souhaitez autoriser à accéder au système à l'aide d'une YubiKey.
Les mappages devraient ressembler à ceci, un par ligne :
: : :…. : : :….
Ajoutez maintenant authfile=/etc/yubikey_mappings
à votre ligne de configuration PAM, cela ressemble à :
auth suffisant pam_yubico.so id=[Votre ID client API] authfile=/etc/yubikey_mappings
Chaque utilisateur crée un fichier ~/.yubico/authorized_yubikeys
dans son répertoire personnel et place le mappage dans ce fichier, le fichier ne doit avoir qu'une seule ligne :
: :
C'est à peu près le même concept que le fichier SSH approved_keys.
Vous pouvez obtenir l'ID du jeton YubiKey de plusieurs manières. La première consiste à supprimer les 32 derniers caractères de tout OTP (One Time Password) généré avec votre YubiKey. Une autre solution consiste à utiliser la calculatrice modhex.
Entrez votre YubiKey OTP et convertissez-le, votre ID de jeton YubiKey est composé de 12 caractères et répertorié comme :
Modhex codé : XXXXXXX
Vous ne savez pas ce que signifie ce dernier morceau ? Voici comment obtenir une copie de votre OTP.
Ouvrir un terminal
Appuyez sur le bouton de la YubiKey. Cela affichera un OTP dans le shell :
$ cccccccgklgcvnkcvnnegrnhgrjkhlkfhdkclfncvlgj
bash: cccccccgklgcvnkcvnnegrnhgrjkhlkfhdkclfncvlgj: command not found
Cela peut être collé dans la page Modhex_Calculator.
Cela nécessite que le module pam soit activé avec 'debug' activé. Lorsque vous êtes invité à saisir la YubiKey, appuyez sur le bouton. Le module pam imprimera les informations de débogage, y compris l'OTP et l'ID de votre jeton, sur le shell - copiez l'ID dans votre fichier de configuration et vous devriez être opérationnel.
YubiKey pour `votreutilisateur' : La conversion [pam_yubico.c:pam_sm_authenticate(867)] a renvoyé 44 octets [pam_yubico.c:pam_sm_authenticate(885)] Ignorer les 0 premiers octets. La longueur est de 44, token_id défini sur 12 et le token OTP est toujours de 32. [pam_yubico.c:pam_sm_authenticate(892)] OTP : ccccccclabcabkhbdncicglfltnukadfoifadfhhhhfe ID : cccccclabcab
Les utilisateurs avec SELinux en mode d'application (par défaut sur Fedora 17+) peuvent rencontrer des problèmes de connexion avec les services, y compris ceux validés via polkit-agent-helper-1, sshd et login.
Ceci est documenté dans Red Hat bugzilla, y compris une solution de contournement pour ssh (des fichiers équivalents pourraient être créés pour d'autres services). Les systèmes en mode « permissif » généreront des avertissements AVC mais l'authentification réussira.
Pour déterminer si SELinux applique ou non la commande sestatus
.
Si vous souhaitez utiliser la YubiKey pour vous authentifier lors des connexions à la console Linux, ajoutez ce qui suit en haut de /etc/pam.d/login
:
auth suffisant pam_yubico.so id=[Votre ID client API] débogage
Consultez les exemples d'extensions de schéma Active Directory de Michael Ludvig pour le stockage/l'association des attributs d'ID public YubiKey avec un compte d'utilisateur particulier : https://github.com/mludvig/yubikey-ldap/tree/master/microsoft-schema
créer le fichier '/etc/pam.d/openvpn' :
authentification requise pam_yubico.so ldap_uri=ldap://contoso.com debug id=[Votre ID API] 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=Service Accounts,DC=contoso,DC=com] ldap_bind_password=bind_password try_first_pass compte requis pam_yubico.so
créer le fichier 'openvpn.conf'
plugin openvpn-plugin-auth-pam.so openvpn