Recherche de site Web

Comment configurer et utiliser PAM sous Linux


Linux-PAM (abréviation de Pluggable Authentication Modules qui a évolué à partir de l'architecture Unix-PAM) est une suite puissante de bibliothèques partagées utilisée pour authentifier dynamiquement un utilisateur auprès d'applications (ou de services). ) dans un système Linux.

Il intègre plusieurs modules d'authentification de bas niveau dans une API de haut niveau qui fournit une prise en charge de l'authentification dynamique pour les applications. Cela permet aux développeurs d'écrire des applications nécessitant une authentification, indépendamment du système d'authentification sous-jacent.

De nombreuses distributions Linux modernes prennent en charge Linux-PAM (ci-après dénommé « PAM ») par défaut. Dans cet article, nous expliquerons comment configurer le PAM avancé dans les systèmes Ubuntu et CentOS.

Avant d'aller plus loin, notez que :

  • En tant qu'administrateur système, la chose la plus importante est de maîtriser la manière dont les fichiers de configuration PAM définissent la connexion entre les applications (services) et les modules d'authentification enfichables (PAM) qui effectuent les tâches d'authentification réelles. Vous n’avez pas nécessairement besoin de comprendre le fonctionnement interne de PAM.
  • PAM a le potentiel de modifier sérieusement la sécurité de votre système Linux. Une configuration erronée peut désactiver l’accès à votre système partiellement ou complètement. Par exemple, une suppression accidentelle d'un ou plusieurs fichiers de configuration sous /etc/pam.d/* et/ou /etc/pam.conf peut vous empêcher d'accéder à votre propre système!

Comment vérifier qu'un programme est compatible PAM

Pour utiliser PAM, une application/un programme doit être « compatible PAM » ; il doit avoir été écrit et compilé spécifiquement pour utiliser PAM. Pour savoir si un programme est « PAM-aware » ou non, vérifiez s'il a été compilé avec la bibliothèque PAM à l'aide de la commande ldd.

Par exemple sshd :

sudo ldd /usr/sbin/sshd | grep libpam.so

	libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007effddbe2000)

Comment configurer PAM sous Linux

Le fichier de configuration principal de PAM est /etc/pam.conf et le répertoire /etc/pam.d/ contient les fichiers de configuration PAM pour chaque application/service compatible PAM. PAM ignorera le fichier si le répertoire existe.

La syntaxe du fichier de configuration principal est la suivante. Le fichier est constitué d'une liste de règles écrites sur une seule ligne (vous pouvez étendre les règles à l'aide du caractère d'échappement “\ ”) et les commentaires sont précédés de “# ” marques et s’étendent jusqu’à la fin suivante de la ligne.

Le format de chaque règle est une collection de jetons séparés par des espaces (les trois premiers ne sont pas sensibles à la casse). Nous expliquerons ces jetons dans les sections suivantes.

service type control-flag module module-arguments 

où :

  • service : nom réel de l'application.
  • type : type de module/contexte/interface.
  • control-flag : indique le comportement de l'API PAM si le module ne parvient pas à réussir sa tâche d'authentification.
  • module : le nom de fichier absolu ou le chemin d'accès relatif du PAM.
  • module-arguments : liste de jetons séparés par des espaces pour contrôler le comportement du module.

La syntaxe de chaque fichier dans /etc/pam.d/ est similaire à celle du fichier principal et est composée de lignes de la forme suivante :

type control-flag module module-arguments

Ceci est un exemple de définition de règle (sans arguments de module) trouvée dans le fichier /etc/pam.d/sshd, qui interdit les connexions non root lorsque /etc/nologin existe :

account required pam_nologin.so

Comprendre les groupes de gestion PAM et les indicateurs de contrôle

Les tâches d'authentification PAM sont séparées en quatre groupes de gestion indépendants. Ces groupes gèrent différents aspects de la demande d’un utilisateur typique pour un service restreint.

Un module est associé à l'un de ces types de groupes de gestion :

  • compte : fournir des services de vérification du compte : le mot de passe de l'utilisateur a-t-il expiré ? ; Cet utilisateur est-il autorisé à accéder au service demandé ?.
  • authentification : authentifier un utilisateur et configurer les informations d'identification de l'utilisateur.
  • mot de passe : sont responsables de la mise à jour des mots de passe des utilisateurs et travaillent en collaboration avec les modules d'authentification.
  • session : gérer les actions effectuées en début et en fin de session.

Les fichiers objets chargeables PAM (les modules) doivent se trouver dans le répertoire suivant : /lib/security/ ou /lib64/security selon l'architecture.

Les indicateurs de contrôle pris en charge sont :

  • requis : la panne redonne instantanément le contrôle à l'application en indiquant la nature de la panne du premier module.
  • obligatoire : tous ces modules sont requis pour réussir pour que libpam renvoie le succès à l'application.
  • suffisant : étant donné que tous les modules précédents ont réussi, la réussite de ce module entraîne un retour immédiat et réussi à l'application (l'échec de ce module est ignoré).
  • facultatif : la réussite ou l'échec de ce module n'est généralement pas enregistré.

En plus des mots-clés ci-dessus, il existe deux autres indicateurs de contrôle valides :

  • include et substack : inclut toutes les lignes du type donné du fichier de configuration spécifié comme argument de ce contrôle.

Comment restreindre l'accès root au service SSH via PAM

À titre d'exemple, nous configurerons comment utiliser PAM pour désactiver l'accès des utilisateurs root à un système via SSH et les programmes de connexion. Ici, nous souhaitons désactiver l'accès de l'utilisateur root à un système, en limitant l'accès aux services de connexion et sshd.

Nous pouvons utiliser le module /lib/security/pam_listfile.so qui offre une grande flexibilité pour limiter les privilèges de comptes spécifiques. Ouvrez et modifiez le fichier du service cible dans le répertoire /etc/pam.d/ comme indiqué.

sudo vim /etc/pam.d/sshd
OR
sudo vim /etc/pam.d/login

Ajoutez cette règle dans les deux fichiers.

auth    required       pam_listfile.so \
        onerr=succeed  item=user  sense=deny  file=/etc/ssh/deniedusers

Expliquer les jetons dans la règle ci-dessus :

  • auth : est le type de module (ou le contexte).
  • obligatoire : est un indicateur de contrôle qui signifie que si le module est utilisé, il doit réussir ou le résultat global sera un échec, quel que soit l'état des autres modules.
  • pam_listfile.so : est un module qui fournit un moyen de refuser ou d'autoriser des services basés sur un fichier arbitraire.
  • onerr=succeed : argument du module.
  • item=user : argument de module qui spécifie ce qui est répertorié dans le fichier et doit être vérifié.
  • sense=deny : argument du module qui spécifie l'action à entreprendre s'il est trouvé dans le fichier, si l'élément n'est PAS trouvé dans le fichier, alors l'action inverse est demandée.
  • file=/etc/ssh/deniedusers : argument de module qui spécifie un fichier contenant un élément par ligne.

Ensuite, nous devons créer le fichier /etc/ssh/deniedusers et y ajouter le nom root :

sudo vim /etc/ssh/deniedusers

Enregistrez les modifications et fermez le fichier, puis définissez les autorisations requises dessus :

sudo chmod 600 /etc/ssh/deniedusers

À partir de maintenant, la règle ci-dessus demandera à PAM de consulter le fichier /etc/ssh/deniedusers et de refuser l'accès aux services SSH et de connexion à tout utilisateur répertorié.

Comment configurer Advanced PAM sous Linux

Pour écrire des règles PAM plus complexes, vous pouvez utiliser des control-flags valides sous la forme suivante :

type [value1=action1 value2=action2 …] module module-arguments

valueN correspond au code retour de la fonction invoquée dans le module pour lequel la ligne est définie. Vous pouvez trouver les valeurs prises en charge dans le Guide de l'administrateur PAM en ligne. Une valeur spéciale est par défaut, ce qui implique que toutes les valeurs N ne sont pas mentionnées explicitement.

L'actionN peut prendre l'une des formes suivantes :

  • ignorer : si cette action est utilisée avec une pile de modules, l'état de retour du module ne contribuera pas au code retour obtenu par l'application.
  • mauvais : indique que le code retour doit être considéré comme une indication de l'échec du module. Si ce module est le premier de la pile à échouer, sa valeur d'état sera utilisée pour celle de l'ensemble de la pile.
  • mourir : équivalent à mauvais mais peut mettre fin à la pile de modules et PAM revenir immédiatement à l'application.
  • ok : cela indique à PAM que l'administrateur système pense que ce code retour doit contribuer directement au code retour de la pile complète de modules.
  • done : équivalent à ok mais peut mettre fin à la pile de modules et PAM revenir immédiatement à l'application.
  • N (un entier non signé) : équivalent à ok mais peut sauter par-dessus les N modules suivants dans la pile.
  • Réinitialiser : cette action efface toute la mémoire de l'état de la pile de modules et redémarre avec le module empilé suivant.

Chacun des quatre mots-clés : obligatoire ; requis; suffisant; et facultatif, ont une expression équivalente en termes de syntaxe [...], qui vous permet d'écrire des règles plus compliquées et ce sont :

  • obligatoire : [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
  • requis : [success=ok new_authtok_reqd=ok ignore=ignore default=die]
  • suffisant : [success=done new_authtok_reqd=done default=ignore]
  • facultatif : [success=ok new_authtok_reqd=ok default=ignore]

Ce qui suit est un exemple d'un système CentOS 7 moderne. Considérons ces règles du fichier PAM /etc/pam.d/postlogin :

#%PAM-1.0
This file is auto-generated.
User changes will be destroyed the next time authconfig is run.
session     [success=1 default=ignore] pam_succeed_if.so service !~ gdm* service !~ su* quiet
session     [default=1]   pam_lastlog.so nowtmp showfailed
session     optional      pam_lastlog.so silent noupdate showfailed

Voici un autre exemple de configuration du fichier PAM /etc/pam.d/smartcard-auth :

#%PAM-1.0
This file is auto-generated.
User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        [success=done ignore=ignore default=die] pam_pkcs11.so nodebug wait_for_card
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

password    required      pam_pkcs11.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

Pour plus d'informations, consultez la page de manuel pam.d :

man pam.d 

Enfin, une description complète de la syntaxe du fichier de configuration et de tous les modules PAM peut être trouvée dans la documentation de Linux-PAM.

Résumé

PAM est une puissante API de haut niveau qui autorise les programmes qui s'appuient sur l'authentification des utilisateurs authentiques pour les applications d'un système Linux. C’est puissant mais très difficile à comprendre et à utiliser.

Dans cet article, nous avons expliqué comment configurer les fonctionnalités avancées de PAM dans Ubuntu et CentOS. Si vous avez des questions ou des commentaires à partager, utilisez le formulaire de commentaires ci-dessous.