Comprendre PAM et NSS

21

Au cours des derniers jours, j'ai mis en place un système Linux avec authentification LDAP et tout fonctionne bien, mais il y a encore quelque chose que je ne peux pas vraiment comprendre concernant NSS et PAM, également après de nombreuses recherches.

Citant:

NSS permet aux administrateurs de spécifier une liste de sources où les fichiers d'authentification, les noms d'hôte et d'autres informations seront stockés et recherchés

et

PAM est un ensemble de bibliothèques qui fournissent une plate-forme d'authentification configurable pour les applications et le système d'exploitation sous-jacent

Ce que je ne comprends pas, c'est comment PAM et NSS fonctionnent et interagissent ensemble. Dans ce livre, l'architecture est assez bien expliquée: je configure PAM à utiliser pam_ldappour les comptes LDAP et pam_unixpour les comptes locaux, puis je configure nsswitch.confpour récupérer les informations des fichiers locaux et LDAP.

Si j'ai bien compris, LDAP est utilisé deux fois: d'abord pam_ldappar NSS qui est lui-même appelé depuis pam_unix. Est-ce correct? LDAP est-il vraiment utilisé deux fois? Mais pourquoi dois-je configurer à la fois NSS et PAM? Mon explication est que PAM effectue des tâches différentes de NSS et qu'il est utilisé par d'autres programmes. Mais, alors, il devrait être possible d'utiliser uniquement NSS ou uniquement PAM, comme je l'ai lu dans cette page .

J'ai donc expérimenté un peu et j'ai d'abord essayé de supprimer LDAP de nsswitch.conf(et l'authentification s'est arrêtée pour fonctionner comme si seul pam_ldap n'était pas suffisant pour faire le travail). Ensuite, j'ai réactivé LDAP dans NSS et je l'ai supprimé de la configuration PAM (cette fois, tout a bien fonctionné, comme s'il pam_ldapétait inutile et NSS est suffisant pour authentifier un utilisateur).

Y a-t-il quelqu'un qui peut m'aider à clarifier cela? Merci d'avance.

MISE À JOUR

Je viens d'essayer quelque chose maintenant. J'ai supprimé à nouveau toutes les pam_ldapentrées dans tous les champs de configuration de pam et j'ai également supprimé shadow: ldapde nsswitch.conf. Comme maintenant dans tout le système, il n'y a que les lignes: passwd: ldap fileset group: ldap filesdans nsswitch.conf. Eh bien ... la connexion avec les utilisateurs LDAP fonctionne parfaitement, ces deux lignes (plus /etc/ldap.conf) suffisent pour configurer l'authentification LDAP.

D'après mes connaissances, PAM est indépendant de NSS, mais mes tests ont montré que ce n'était pas le cas. Je me demande donc s'il est possible de désactiver complètement NSS et d'utiliser uniquement PAM?

ColOfAbRiX
la source
Je n'ai pas vu votre mise à jour. Veuillez exécuter les commandes suivantes et signaler vos résultats, en remplaçant LDAPUSER par l'utilisateur qui, selon vous, n'est configuré que dans LDAP. getent shadow | grep LDAPUSER grep LDAPUSER /etc/shadow
Andrew B

Réponses:

25

Cela aide à décomposer des choses comme ça dans votre tête:

  • NSS - Un système basé sur un module pour contrôler la façon dont diverses bases de données de niveau OS sont assemblées en mémoire. Cela inclut (mais ne se limite pas) passwd, group, shadow(ce qui est important de noter), et hosts. Les recherches UID utilisent la passwdbase de données et les recherches GID utilisent la groupbase de données.

  • PAM - Un système basé sur un module pour permettre l'authentification et la comptabilité basées sur les services. Contrairement à NSS, vous n'étendez pas les bases de données existantes; Les modules PAM peuvent utiliser la logique qu'ils souhaitent, bien que les connexions shell dépendent toujours des bases de données passwdet groupde NSS. (vous avez toujours besoin de recherches UID / GID)

La différence importante est que PAM ne fait rien par lui-même. Si une application ne se lie pas à la bibliothèque PAM et n'y fait pas appel, PAM ne sera jamais utilisé. NSS est au cœur du système d'exploitation et les bases de données sont assez omniprésentes au fonctionnement normal du système d'exploitation.

Maintenant que nous avons cela à l'écart, voici la balle courbe: bien que pam_ldap soit le moyen le plus populaire pour s'authentifier contre LDAP, ce n'est pas le seul moyen.

  • Si shadowpointe vers le service /etc/nsswitch.confLDAP à l'intérieur , toute authentification qui s'exécute sur la base de données fantôme réussira si les attributs de ces mappages de champs masqués (en particulier le champ de mot de passe chiffré) sont présents dans LDAP et permettraient la connexion.
    • Cela signifie à son tour que cela pam_unix.sopeut potentiellement entraîner une authentification contre LDAP, car il s'authentifie contre la base de données fantôme. (qui est géré par NSS et peut pointer vers LDAP)
  • Si un module PAM effectue des appels contre un démon qui interroge à son tour la base de données LDAP (par exemple pam_sss.so, qui se connecte sssd), il est possible que LDAP soit référencé.
Andrew B
la source
Merci beaucoup, je sais que nsswitch.conf + pam_unix peut faire tout le travail par eux-mêmes. Mais PAM devrait également pouvoir faire de même, car il est indépendant, comme vous l'avez écrit également. Ma compréhension est que le module pam_ldap devrait être suffisant pour authentifier l'utilisateur contre un serveur LDAP. N'est-ce pas?
ColOfAbRiX
6
Authentifiez-vous oui, mais à moins d'avoir un autre moyen d'obtenir des informations sur l'utilisateur (local / etc / passwd ou autre), vous avez toujours besoin d'un moyen de découvrir l'appartenance à un groupe, le répertoire personnel, etc. Vous confondez toujours authentification et énumération d'autorisation / attribut.
TheFiddlerWins
1
@ColOfAbRiX TheFIddlerWins est correct. Il suffit de s'authentifier , mais vous avez toujours besoin d'un moyen de rechercher les appartenances UID + GID comme je l'ai noté. Ceux-ci sont obtenus à partir des bases de données passwdet group(NSS), ce qui signifie qu'ils doivent être sur le système local ( /etc/passwd+ /etc/group), ou obtenus via le ldapmodule NSS.
Andrew B
3
Voici un moyen de vous aider à comprendre: exécutez getent passwdet getent groupavec LDAP activé pour les deux bases de données dans /etc/nsswitch.conf. Désactivez ensuite LDAP dans ce fichier et réexécutez les deux commandes. getentest une commande de vidage des bases de données NSS.
Andrew B
J'ai enfin pu tout comprendre avec un peu plus de travail. Merci les gars!
ColOfAbRiX
1

NSS est là pour énumérer des informations sur les services / utilisateurs (à quel groupe vous appartenez, où se trouve votre répertoire personnel, etc.). PAM détermine ce qu'il faut faire de ces informations.

Si vous souhaitez utiliser LDAP pour l' authentification, vous avez besoin de pam_ldap. Si vous utilisez autre chose (comptes locaux, Kerberos, etc.), vous ne pouvez pas.

Ils font donc des choses différentes. NSS obtient des informations, PAM détermine qui est autorisé à faire quoi une fois ces informations obtenues.

TheFiddlerWins
la source
Merci, mais le problème est que cela ne fonctionne pas de cette façon, dans mon système au moins :) Au début, j'ai compris la même chose, mais j'ai essayé de supprimer toutes les entrées pam_ldap dans l'authentification PAM et LDAP qui fonctionnaient toujours (et désactivé le cache). Cela a accru ma confusion :)
ColOfAbRiX
Comment vérifiez-vous que vous vous authentifiez via pam_ldap après l'avoir supprimé? Publiez le contenu de votre authentification commune s'il vous plaît. Je ne suis pas sûr des chemins dans SUSE mais en réponse à la première partie de votre troisième question, même avec le fonctionnement de pam_ldap, vous avez besoin d'un moyen pour que le système sache qui vous êtes - cela est fourni par NSS
TheFiddlerWins
Je suis désolé, je veux dire qu'après avoir supprimé pam_ldap, l'authentification LDAP a fonctionné sans, je suppose que cela a fonctionné via NSS. Le fichier common-authne contenait que pam_env, pam_unix et pam_deny.
ColOfAbRiX
Cela n'a pas de sens, comment avez-vous confirmé que l'authentification LDAP a fonctionné?
TheFiddlerWins
Se connecter à l'aide d'un compte LDAP et surveiller le journal des serveurs LDAP. nscd (mise en cache) est désactivé
ColOfAbRiX