29 votes

Comprendre PAM et NSS

Dans les derniers jours, j'ai configuré certains systèmes Linux avec une authentification LDAP et tout fonctionne bien, mais il y a encore quelque chose que je ne comprends pas vraiment concernant NSS et PAM, malgré beaucoup de recherches.

Citation :

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

et

PAM est un ensemble de bibliothèques qui fournissent une plateforme 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 travaillent et interagissent ensemble. Dans ce livre, l'architecture est expliquée assez bien : je configure PAM pour utiliser pam_ldap pour les comptes LDAP et pam_unix pour les comptes locaux, puis je configure nsswitch.conf pour récupérer des informations à partir de fichiers locaux et de LDAP.

Si j'ai bien compris, LDAP est utilisé deux fois : d'abord par pam_ldap puis par 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, dans ce cas, il devrait être possible d'utiliser uniquement NSS ou uniquement PAM, comme je l'ai lu dans cette page.

Alors j'ai fait quelques expériences et j'ai d'abord essayé de supprimer LDAP du nsswitch.conf (et l'authentification a cessé de fonctionner comme si seul pam_ldap n'est 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 si pam_ldap est inutile et que NSS suffit pour authentifier un utilisateur).

Est-ce qu'il y a quelqu'un qui peut m'aider à clarifier cela ? Merci d'avance.

MISE À JOUR

Je viens d'essayer quelque chose maintenant. J'ai de nouveau supprimé toutes les entrées pam_ldap dans tous les champs de configuration pam et j'ai également supprimé shadow: ldap de nsswitch.conf. Maintenant, dans tout le système, il n'y a que les lignes : passwd: ldap files et group: ldap files dans 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'est pas le cas. Donc je me demande est-il possible de désactiver complètement NSS et d'utiliser uniquement PAM ?

0 votes

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 que vous pensez être configuré uniquement dans LDAP. getent shadow | grep LDAPUSER grep LDAPUSER /etc/shadow

0 votes

Bonjour, c'est une demande mais est-ce que je pourrais avoir un aperçu de votre fichier nsswitch.conf, cela m'aiderait vraiment beaucoup??

32voto

Il aide à décomposer les choses ainsi dans votre tête :

  • NSS - Un système basé sur des modules pour contrôler la manière dont différentes bases de données de niveau OS sont assemblées en mémoire. Cela inclut (mais sans s'y limiter) passwd, group, shadow (ce qui est important de noter), et hosts. Les recherches UID utilisent la base de données passwd, et les recherches GID utilisent la base de données group.

  • PAM - Un système basé sur des modules permettant l'authentification et la comptabilité basées sur le service. 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 passwd et group de 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 ne fait pas d'appels à celle-ci, 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 pour le fonctionnement normal du système d'exploitation.

Maintenant que c'est éclairci, voici la surprise : bien que pam_ldap soit la façon populaire de s'authentifier contre LDAP, ce n'est pas la seule façon.

  • Si shadow pointe sur le service ldap dans /etc/nsswitch.conf, toute authentification effectuée sur la base de données shadow réussira si les attributs pour ces mappages de champs shadow (en particulier le champ de mot de passe chiffré) sont présents dans LDAP et permettraient la connexion.
    • Cela implique que pam_unix.so peut potentiellement permettre l'authentification contre LDAP, car il s'authentifie contre la base de données shadow. (qui est gérée par NSS, et peut pointer sur LDAP)
  • Si un module PAM effectue des appels à 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é.

0 votes

Merci beaucoup, je sais que nsswitch.conf + pam_unix peuvent faire tout le travail eux-mêmes. Mais aussi PAM devrait être capable de faire la même chose, car il est indépendant, comme vous l'avez également écrit. Je comprends que le module pam_ldap devrait être suffisant pour authentifier l'utilisateur contre un serveur ldap. N'est-ce pas?

6 votes

Authentifiez-vous oui, mais sauf si vous avez un autre moyen d'obtenir des informations utilisateur (locale /etc/passwd ou autre), vous avez toujours besoin d'un moyen de savoir les appartenances aux groupes, le répertoire personnel, etc. Vous confondez toujours l'authentification et l'autorisation/l'énumération des attributs.

1 votes

@ColOfAbRiX TheFIddlerWins a raison. Il suffit de authentifier, mais vous avez toujours besoin d'un moyen de rechercher les UIDs + adhésions de GID comme je l'ai noté. Ceux-ci sont obtenus à partir des bases de données passwd et group (NSS), ce qui signifie qu'ils doivent être sur le système local (/etc/passwd+/etc/group), ou obtenus via le module NSS ldap.

1voto

TheFiddlerWins Points 2963

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 quoi faire avec ces informations.

Si vous voulez utiliser LDAP pour l'authentification, vous avez besoin de pam_ldap. Si vous utilisez autre chose (comptes locaux, Kerberos, etc.), alors ce n'est peut-être pas nécessaire.

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

0 votes

Merci, mais le problème est que ça ne fonctionne pas de cette manière, du moins dans mon système :) Au début, j'ai compris la même chose mais ensuite j'ai essayé de supprimer toutes les entrées pam_ldap dans l'authentification PAM et LDAP fonctionnait toujours (et le cache était désactivé). Cela a augmenté ma confusion :)

0 votes

Comment vérifiez-vous que vous vous authentictez via pam_ldap après l'avoir enlevé ? Postez le contenu de votre common-auth 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 pam_ldap qui fonctionne, vous avez besoin d'un moyen pour savoir qui vous êtes - cela est fourni par NSS.

0 votes

Je suis désolé, je veux dire qu'après avoir supprimé pam_ldap, l'authentification LDAP a fonctionné sans lui, je suppose que cela a fonctionné via NSS. Le fichier common-auth ne contenait que pam_env, pam_unix et pam_deny.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X