Accéder au contenuNavigation Accéder à la page : page précédente [raccourci clavier p] / page suivante [raccourci clavier n]
documentation.suse.com / Authentification avec les modules PAM

Authentification avec les modules PAM

Date de publication : 12 déc 2024
CONTENU

Cet article décrit le concept PAM, la structure de la configuration de PAM et l'utilisation de ses outils de configuration.

MOTIF

Vous voulez savoir comment configurer un module PAM et configurer votre système pour utiliser les clés U2F.

EFFORT

La lecture de l'article prend environ 20 minutes.

CONDITIONS REQUISES
  • Pour configurer l'authentification à l'aide des clés U2F, vous devez disposer de clés YubiKeys ou de sécurité.

1 Présentation de PAM

Il n'est pas rare que les administrateurs système et les programmeurs veuillent restreindre l'accès à certaines parties du système ou limiter l'utilisation de certaines fonctions d'une application. En l'absence de module PAM, les applications doivent se réadapter chaque fois qu'un nouveau mécanisme d'authentification (par exemple, LDAP, Samba or Kerberos) est disponible sur le marché. Cependant, ce processus est long et propice aux erreurs. Aussi, pour éviter ces inconvénients, l'une des solutions est de séparer les applications du mécanisme d'authentification et de déléguer cette authentification à des modules gérés de manière centrale. Chaque fois qu'un nouveau schéma d'authentification est nécessaire, il suffit d'adapter ou de rédiger un module PAM approprié à utiliser par le programme en question.

Le concept PAM comprend :

  • Des modules PAM qui sont un ensemble de bibliothèques partagées par un mécanisme d'authentification spécifique.

  • Une pile de modules avec un ou plusieurs modules PAM.

  • Un service compatible avec PAM qui nécessite une authentification à l'aide d'une pile de modules ou de modules PAM. Un service utilise généralement un nom explicite de l'application correspondante, comme login ou su. Le nom du service other est un mot réservé aux règles par défaut.

  • Des arguments de module avec lesquels l'exécution d'un module PAM unique peut être influencée.

  • Un mécanisme évaluant chaque résultat d'une seule exécution de module PAM. Une valeur positive exécute le module PAM suivant. La façon dont une valeur négative est traitée dépend de la configuration : « aucune influence, continuer » à « arrêter immédiatement » et toute les étapes intermédiaires entre les deux sont des options valides.

2 Structure de la configuration PAM

PAM sous SLE Micro est fourni avec une configuration basée sur un répertoire. L'ensemble des fichiers de configuration sont stockés à l'emplacement /etc/pam.d. Chaque service (ou programme) qui repose sur le mécanisme PAM possède son propre fichier de configuration dans ce répertoire. Par exemple, le service pour sshd est disponible dans le fichier /etc/pam.d/sshd.

Note
Note : configuration basée sur les fichiers (/etc/pam.conf) non utilisée sous SLE Micro

La configuration de chaque service peut également être stockée à l'emplacement /etc/pam.conf. Toutefois, pour des raisons de maintenance et de convivialité, ce schéma de configuration n'est pas utilisé dans SLE Micro.

Les fichiers à l'emplacement /etc/pam.d/ définissent les modules PAM utilisés pour l'authentification. Chaque fichier est constitué de lignes, qui définissent un service et chaque ligne est constitué d'un maximum de quatre composants :

      TYPE
      CONTROL
      MODULE_PATH
      MODULE_ARGS

Les composants ont la signification suivante :

TYPE

Déclare le type de service. Les modules PAM sont traités comme des piles. Les différents types de modules ont des objectifs variés. Par exemple, un module vérifie le mot de passe, un autre vérifie l'emplacement à partir duquel a eu lieu l'accès au système et un autre lit les paramètres spécifiques à l'utilisateur. Les types de modules PAM sont au nombre de quatre :

auth

Vérifiez l'authenticité de l'utilisateur, généralement en demandant un mot de passe. Cependant, l'authentification peut également être effectuée avec une carte à puce ou à l'aide de la biométrie (par exemple, empreintes digitales ou scan de l'iris).

account

Les modules de ce type contrôlent si l'utilisateur dispose d'une autorisation générale pour utiliser le service demandé. Il peuvent, par exemple, vérifier que personne ne se connecte avec le nom d'utilisateur d'un compte ayant expiré.

password

Ce type de module a pour but d'autoriser la modification d'un jeton d'authentification. Il s'agit généralement d'un mot de passe.

session

Les modules de ce type sont responsables de la gestion et de la configuration des sessions utilisateur. Ils sont lancés avant et après l'authentification pour consigner les tentatives de connexion et configurer l'environnement spécifique de l'utilisateur.

CONTROL

Indique le comportement d'un module PAM. Chaque module peut avoir les indicateurs de contrôle suivants :

required

L'exécution d'un module portant cet indicateur doit avoir réussi pour que l'authentification puisse se poursuivre. En cas d'échec d'un module doté de l'indicateur required, tous les autres modules ayant le même indicateur sont traités avant que l'utilisateur reçoive un message l'informant de l'échec de la tentative d'authentification.

requisite

Le traitement des modules ayant cet indicateur doit également avoir réussi, plus ou moins comme pour un module doté de l'indicateur required. Par contre, en cas d'échec, l'utilisateur en est immédiatement averti et aucun autre module n'est traité. En cas de réussite, les autres modules sont ensuite traités, comme tout autre module doté de l'indicateur required. L'indicateur requisite peut être utilisé comme filtre de base pour vérifier certaines conditions fondamentales pour une authentification correcte.

sufficient

Après la réussite du traitement d'un module portant cet indicateur, l'application à l'origine de la demande reçoit immédiatement un message lui confirmant cette réussite et aucun autre module n'est traité, à condition qu'il n'y a pas eu d'échec précédemment d'un module ayant l'indicateur required. L'échec d'un module doté de l'indicateur sufficient n'a pas de conséquence directe, dans le sens où les modules ultérieurs sont traités dans leur ordre respectif.

optional

L'échec ou la réussite d'un module portant cet indicateur n'a pas de conséquence directe. Cela peut s'avérer pratique pour les modules dont la seule fonctionnalité est d'afficher un message (par exemple, pour avertir l'utilisateur de l'arrivée d'un message), sans exécuter d'autre action.

include

Lorsque cet indicateur est attribué, le fichier indiqué en argument est inséré à cet endroit.

MODULE_PATH

Contient le nom de fichier complet d'un module PAM. Il ne doit pas nécessairement être spécifié de manière explicite. Si le module se trouve dans le répertoire par défaut /lib/security (pour toutes les plates-formes 64 bits prises en charge par SLE Micro, le répertoire est /lib64/security).

MODULE_ARGS

Contient une liste d'options séparées par des espaces pour influencer le comportement d'un module PAM, telles que debug (active le débogage) ou nullok (autorise l'utilisation de mots de passe vides).

En outre, des fichiers de configuration globale existent pour les modules PAM sous /etc/security. Ces fichiers définissent le comportement exact de ces modules (par exemple, pam_env.conf et time.conf). Chaque application qui utilise un module PAM invoque un ensemble de fonctions PAM. Ces fonctions traitent ensuite les informations des différents fichiers de configuration et renvoient les résultats à l'application qui a initié la demande.

Pour simplifier la création et la maintenance des modules PAM, des fichiers de configuration par défaut communs pour les types auth, account, password et les modules session ont été introduits. Ceux-ci sont récupérés à partir de la configuration PAM de chaque application. Les mises à jour des modules de configuration globale PAM dans common-* sont donc propagées dans tous les fichiers de configuration PAM sans que l'administrateur ne doive mettre à jour chaque fichier de configuration PAM.

Les fichiers de configuration globale PAM sont gérés à l'aide de l'outil pam-config. Cet outil ajoute automatiquement de nouveaux modules à la configuration, modifie la configuration des modules existants ou supprime des modules (ou des options) des configurations. L'intervention manuelle dans la gestion des configurations PAM est réduite au minimum ou n'est plus nécessaire.

2.1 Exemple de configuration PAM

Pour illustrer un exemple de cas d'utilisation réel de la configuration PAM, la configuration de sshd a été utilisée dans cette section :

Exemple 1 : Configuration PAM de sshd (/etc/pam.d/sshd)
#%PAM-1.0 1
auth     requisite      pam_nologin.so                              2
auth     include        common-auth                                 3
account  requisite      pam_nologin.so                              2
account  include        common-account                              3
password include        common-password                             3
session  required       pam_loginuid.so                             4
session  include        common-session                              3
session  optional       pam_lastlog.so   silent noupdate showfailed 5

1

Déclare la version de ce fichier de configuration pour PAM 1.0. Il s'agit simplement d'une convention, mais elle pourrait être utilisée à l'avenir pour vérifier la version.

2

Vérifie si le paramètre /etc/nologin existe. S'il existe, seul l'utilisateur root est autorisé à se connecter.

3

Fait référence aux fichiers de configuration de quatre types de modules : common-auth, common-account, common-password et common-session. Ces quatre fichiers détiennent la configuration par défaut de chaque type de module.

4

Définit l'attribut de processus UID de connexion pour le processus qui a été authentifié.

5

Affiche des informations concernant la dernière connexion d'un utilisateur.

En incluant les fichiers de configuration au lieu d'ajouter chaque module séparément à sa configuration PAM respective, vous obtenez automatiquement une configuration PAM mise à jour lorsqu'un administrateur modifie les valeurs par défaut.

Le premier fichier inclus (common-auth) invoque des modules du type auth : pam_env.so, pam_gnome_keyring.so et pam_unix.so. Reportez-vous à l'Exemple 2, « Configuration par défaut pour la section auth (common-auth) ». N'oubliez pas que les modules peuvent différer en fonction de votre installation.

Exemple 2 : Configuration par défaut pour la section auth (common-auth)
auth  required  pam_env.so                   1
auth  optional  pam_gnome_keyring.so         2
auth  required  pam_unix.so  try_first_pass 3

1

pam_env.so charge /etc/security/pam_env.conf pour définir les variables d'environnement comme spécifié dans ce fichier. Cela peut être utilisé pour définir la valeur appropriée pour la variable DISPLAY. Le module pam_env connaît en effet l'emplacement à partir duquel la connexion est exécutée.

2

pam_gnome_keyring.so vérifie le nom de connexion et le mot de passe de l'utilisateur par rapport aux informations disponibles dans le trousseau de clés GNOME

3

pam_unix vérifie le nom de connexion et le mot de passe de l'utilisateur par rapport aux informations disponibles dans /etc/passwd et /etc/shadow.

La pile tout entière des modules auth est traitée avant que sshd ne soit informé de la réussite ou non de la connexion. Le traitement de tous les modules de la pile ayant l'indicateur de contrôle required doit avoir réussi avant que sshd reçoive un message concernant le résultat positif. En cas d'échec de l'un des modules, le reste de la pile continue à être traité et ce n'est qu'à ce moment-là que sshd est averti de ce résultat négatif.

Dès que le traitement de tous les modules de type auth a réussi, une autre instruction d'inclusion est traitée (dans le cas présent, il s'agit de l'Exemple 3, « Configuration par défaut pour la section account (common-account) »). common-account ne contient qu'un seul module, pam_unix. Si pam_unix renvoie un résultat indiquant que l'utilisateur existe, sshd reçoit un message de réussite et la pile suivante de modules (password) est traitée.

Exemple 3 : Configuration par défaut pour la section account (common-account)
account  required  pam_unix.so  try_first_pass

Une fois encore, la configuration PAM de sshd implique seulement une instruction d'inclusion faisant référence à la configuration par défaut des modules password dans common-password. L'exécution de ces modules doit avoir réussi (indicateurs de contrôle requisite et required) chaque fois que l'application demande de modifier un jeton d'authentification.

Le changement d'un mot de passe ou d'un autre jeton d'authentification requiert un contrôle de sécurité. Ce contrôle est réalisé avec le module. pam_cracklib. Le module pam_unix utilisé par la suite transfère les anciens et les nouveaux mots de passe à partir de pam_cracklib, de sorte que l'utilisateur n'a pas besoin de se réauthentifier après avoir modifié le mot de passe. Grâce à cette procédure, il est impossible d'éviter les contrôles effectués par pam_cracklib. Chaque fois que le type account ou auth est configuré pour signaler que des mots de passe ont expiré, les modules password doivent également être utilisés.

Comme étape finale, les modules de type session (compilés dans le fichier common-session), sont appelés pour configurer la session selon les paramètres de l'utilisateur en question. Le module pam_limits charge le fichier /etc/security/limits.conf, ce qui peut définir des limites d'utilisation pour certaines ressources système. Le module pam_unix est à nouveau traité. Le module pam_umask peut être utilisé pour définir le masque de création du mode fichier. Étant donné que ce module porte l'indicateur optional, un échec de ce module n'affectera pas la réussite de l'ensemble de la pile de modules de session. Les modules session sont appelés une deuxième fois lorsque l'utilisateur se déconnecte.

3 Configuration des modules PAM

Certains modules PAM peuvent être configurés. Les fichiers de configuration se trouvent à l'emplacement /etc/security. Cette section décrit brièvement les fichiers de configuration relatifs à l'exemple sshd : pam_env.conf et limits.conf.

3.1 pam_env.conf

pam_env.conf peut servir à définir un environnement standardisé pour les utilisateurs qui est paramétré chaque fois que le module pam_env est invoqué. Grâce à lui, prédéfinissez les variables d'environnement à l'aide de la syntaxe suivante :

VARIABLE  [DEFAULT=VALUE]  [OVERRIDE=VALUE]
VARIABLE

Nom de la variable d'environnement à définir.

[DEFAULT=<value>]

Valeur VALUE par défaut que l'administrateur souhaite définir.

[OVERRIDE=<value>]

Valeurs pouvant faire l'objet d'une requête et qui sont définies par pam_env, ce qui écrase la valeur par défaut.

Un exemple d'utilisation classique de pam_env est l'adaptation de la variable DISPLAY qui est modifiée chaque fois qu'une connexion est exécutée à distance. Il est présenté dans l'Exemple 4, « pam_env.conf ».

Exemple 4 : pam_env.conf
REMOTEHOST  DEFAULT=localhost          OVERRIDE=@{PAM_RHOST}
DISPLAY     DEFAULT=${REMOTEHOST}:0.0  OVERRIDE=${DISPLAY}

La première ligne définit la valeur de la variable REMOTEHOST sur localhost. Cette valeur est utilisée chaque fois que pam_env ne parvient pas à déterminer d'autre valeur. La variable DISPLAY contient alors la valeur REMOTEHOST. Pour plus d'informations, reportez-vous aux commentaires à l'emplacement /etc/security/pam_env.conf.

3.2 limits.conf

Vous pouvez définir des limites système pour un utilisateur ou un groupe dans le fichier limits.conf qui est lu par le module pam_limits. Ce fichier permet de définir soit des limites strictes (qui ne doivent absolument pas être dépassées), soit des limites souples (qui peuvent être dépassées temporairement). Pour plus d'informations sur la syntaxe et les options, reportez-vous aux commentaires à l'emplacement /etc/security/limits.conf.

4 Configuration de PAM à l'aide de pam-config

L'outil pam-config vous aide à configurer les fichiers de configuration PAM globaux (/etc/pam.d/common-*) et plusieurs configurations d'application sélectionnées. Pour obtenir une liste des modules pris en charge, utilisez la commande pam-config --list-modules. La commande pam-config permet de gérer vos fichiers de configuration PAM. Ajoutez de nouveaux modules à vos configurations PAM, supprimez d'autres modules ou modifiez les options de ces modules. Lors de la modification des fichiers de configuration PAM globaux, aucune adaptation manuelle de la configuration PAM pour des applications individuelles n'est requise.

Un cas d'utilisation simple de pam-config implique les tâches suivantes :

  1. Générer automatiquement une nouvelle configuration PAM de type Unix. Laissez la commande pam-config créer la configuration la plus simple possible que vous pourrez étendre ultérieurement. La commande pam-config --create crée une configuration d'authentification Unix simple. Les fichiers de configuration préexistants non conservés par pam-config sont écrasés, mais des copies de sauvegarde sont conservées en tant que *.pam-config-backup.

  2. Ajouter une nouvelle méthode d'authentification. L'ajout d'une nouvelle méthode d'authentification (par exemple, LDAP) à votre pile de modules PAM se résume à une commande pam-config --add --ldap simple. LDAP est ajouté chaque fois que nécessaire dans tous les fichiers de configuration PAM common-*-pc.

  3. Ajouter le débogage à des fins de test. Pour vous assurer que la nouvelle procédure d'authentification fonctionne comme prévu, activez le débogage pour toutes les opérations liées à PAM. La commande pam-config --add --ldap-debug active le débogage pour les opérations PAM liées à LDAP.

  4. Interroger votre configuration. Avant d'appliquer définitivement votre nouvelle configuration PAM, vérifiez qu'elle contient toutes les options que vous souhaitiez ajouter. La commande pam-config --query --MODULE liste le type et les options du module PAM interrogé.

  5. Supprimer les options de débogage. Terminez en supprimant l'option de débogage de votre configuration lorsque vous êtes entièrement satisfait des performances de celle-ci. La commande pam-config --delete --ldap-debug désactive le débogage pour l'authentification LDAP. Si vous aviez ajouté des options de débogage pour d'autres modules, utilisez des commandes similaires pour les désactiver.

Pour plus d'informations sur la commande pam-config et les options disponibles, reportez-vous à la page de manuel de pam-config(8).

5 Configuration manuelle de PAM

Si vous préférez créer ou gérer manuellement vos fichiers de configuration PAM, veillez à désactiver pam-config pour ces fichiers.

Lorsque vous créez vos fichiers de configuration PAM à partir de zéro à l'aide de la commande pam-config --create, des liens symboliques sont créés entre les fichiers common-* et common-*-pc. pam-config modifie uniquement les fichiers de configuration common-*-pc. La suppression de ces liens symboliques désactive effectivement pam-config, car pam-config ne fonctionne que sur les fichiers common-*-pc et ces fichiers ne sont pas appliqués sans les liens symboliques.

Avertissement
Avertissement : pensez à inclure pam_systemd.so dans la configuration

Si vous créez votre propre configuration PAM, veillez à inclure pam_systemd.so configuré avec l'option session optional. Ne pas inclure pam_systemd.so peut entraîner des problèmes en raison de limites de tâches systemd. Pour plus d'informations, reportez-vous à la page du manuel de pam_systemd.so.

6 Configuration de SLE Micro pour exiger des clés U2F pour la connexion locale

Pour renforcer la sécurité lors de la connexion locale à SLE Micro, vous pouvez configurer l'authentification à deux facteurs à l'aide de la structure pam-u2f et de la fonction U2F sur les clés YubiKeys et les clés de sécurité.

Pour configurer U2F sur votre système SLE Micro, vous devez associer votre clé à votre compte sur SLE Micro. Ensuite, configurez votre système pour utiliser la clé. La procédure est décrite dans les sections suivantes.

6.1 Association de la clé U2F à votre compte

Pour associer votre clé U2F à votre compte, procédez comme suit :

  1. Connectez-vous à votre machine.

  2. Insérez votre clé U2F.

  3. Créez un répertoire pour la configuration de la clé U2F :

    > sudo mkdir -p ~/.config/Yubico
  4. Exécutez la commande pamu2fcfg qui génère des lignes de configuration :

    > sudo pamu2fcfg > ~/.config/Yubico/u2f_keys
  5. Lorsque votre périphérique commence à clignoter, appuyez sur le contact en métal pour confirmer l'association.

Nous vous recommandons d'utiliser un périphérique de sauvegarde U2F, que vous pouvez configurer en exécutant les commandes suivantes :

  1. Exécutez :

    > sudo pamu2fcfg -n >> ~/.config/Yubico/u2f_keys
  2. Lorsque votre périphérique commence à clignoter, appuyez sur le contact en métal pour confirmer l'association.

Vous pouvez déplacer le fichier de sortie de l'emplacement par défaut vers un répertoire qui nécessite l'autorisation sudo pour modifier le fichier afin d'améliorer la sécurité. Par exemple, déplacez-le dans le répertoire /etc. Pour ce faire, procédez comme suit :

  1. Créez un répertoire dans /etc :

    > sudo mkdir /etc/Yubico
  2. Déplacez le fichier créé :

    > sudo mv ~/.config/Yubico/u2f_keys /etc/Yubico/u2f_keys
Note
Note : placement des clés u2f_keys à un emplacement autre que celui par défaut

Si vous déplacez le fichier de sortie vers un autre répertoire que celui par défaut ($HOME/.config/Yubico/u2f_keys), vous devez ajouter le chemin d'accès au fichier /etc/pam.d/login comme décrit à la Section 6.2, « Mise à jour de la configuration PAM ».

6.2 Mise à jour de la configuration PAM

Après avoir créé la configuration des clés U2F, vous devez ajuster la configuration PAM sur votre système.

  1. Ouvrez le fichier /etc/pam.d/login.

  2. Ajoutez la ligne auth required pam_u2f.so au fichier comme suit :

    #%PAM-1.0
    auth      include    common-auth
    auth      required   pam_u2f.so
    account   include    common-account
    password  include    common-password
    session   optional   pam_keyinit.so revoke
    session   include    common-session
    #session  optional   pam_xauth.so
  3. Si vous avez placé le fichier u2f_keys à un autre emplacement que $HOME/.config/Yubico/u2f_keys, vous devez utiliser l'option authfile dans le fichier PAM /etc/pam.d/login comme suit :

    #%PAM-1.0 
    auth     requisite pam_nologin.so 
    auth     include   common-auth
    auth  required pam_u2f.so authfile=<PATH_TO_u2f_keys>
    ...

    <PATH_TO_u2f_keys> est le chemin absolu du fichier u2f_keys.