Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Différence entre NSS et PAM (sur une debian Squeeze)

2 réponses
Avatar
Francois Lafont
Bonjour à tous,

J'essaye d'apprendre un peu à me servir d'OpenLdap, à mon rythme,
c'est-à-dire au rythme du débutant que je suis dans ce domaine (ça me
semble important de l'indiquer). Pour l'instant mon objectif (atteint au
final) était de créer un utilisateur sur une Debian Squeeze stocké dans
l'annuaire LDAP de la machine (pas dans /etc/passwd etc.) et de me
connecter avec sur la machine avec ce compte.

J'ai donc installé OpenLdap (au passage, la configuration ne se fait
plus via /etc/ldap/slapd.conf ce qui ne m'a pas aidé vu que ma
principale source de documentation faisait référence à ce fichier) et
j'ai créé un utilisateur toto (avec pour mot de passe toto). Ensuite
j'ai installé libpam-ldap car, si j'ai bien compris, beaucoup de
services dont notamment celui du login délèguent l'authentification à
des modules appelés «PAM». Modulo, les "@include", voici le contenu de
/etc/pam.d/login :

#---------------------------------
auth optional pam_faildelay.so delay=3000000

auth [success=ok new_authtok_reqd=ok ignore=ignore user_unknown=bad
default=die] pam_securetty.so

auth requisite pam_nologin.so

session [success=ok ignore=ignore module_unknown=ignore default=bad]
pam_selinux.so close

session required pam_env.so readenv=1

session required pam_env.so readenv=1 envfile=/etc/default/locale

# Voici le contenu de @include common-auth
auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_ldap.so use_first_pass
auth requisite pam_deny.so
auth required pam_permit.so
# fin de l'include

auth optional pam_group.so
session required pam_limits.s
session optional pam_lastlog.so
session optional pam_motd.so
session optional pam_mail.so standard

# Voici le contenu de @include common-account
account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so
account [success=1 default=ignore] pam_ldap.so
account requisite pam_deny.so
account required pam_permit.so
# fin de l'include

# Voici le contenu de @include common-session
session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session required pam_unix.so
session optional pam_ldap.so
# fin de l'include

# Voici le contenu de @include common-password
password [success=2 default=ignore] pam_unix.so obscure sha512

password [success=1 user_unknown=ignore default=die] pam_ldap.so
use_authtok try_first_pass
password requisite pam_deny.so
password required pam_permit.so
# fin de l'include

session [success=ok ignore=ignore module_unknown=ignore default=bad]
pam_selinux.so open
#---------------------------------


Tout n'est vraiment pas clair pour moi dans ce fichier (loin de là),
mais je vois quand même que le "@include" de common-auth fait en sorte
que pour l'authentification le système va chercher du côté de l'annuaire
LDAP. Très bien, du coup j'essaye de me connecter au système avec le
compte créé dans l'annuaire (toto) et là ça ne marche pas. En fait, je
n'ai pas le droit à un classique message du genre «login incorrect» par
exemple (ce qui prouve qu'il a eu un changement dans le bon sens). En
fait tout semble fonctionner dans le sens où, dès que je tape sur ENTER
après avoir mis le mot de passe de toto, j'ai un message du genre
«Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY etc». Bref, comme
dans un début de connexion réussie, mais ensuite j'ai le message «User
not known to the underlying authentication module» et la connexion échoue.

Question 1 : Je ne peux donc pas me connecter avec toto qui est bien
dans mon annuaire. D'où ma question : dans le fichier /etc/pam.d/login,
à quel moment la connexion plante (et pourquoi) ?


Difficile de répondre à la question avec si peu d'élément j'imagine,
mais ce qui suit va vous sûrement vous apporter des éléments. Après cet
échec de connexion, j'ai pensé à installer le paquet libnss-ldap car on
voit partout sur le Web que PAM et NSS sont assez liés tous les deux.
Ensuite, j'ai modifié le fichier /etc/nsswitch au niveau des bases
passwd, group, shadow pour obtenir ceci :

passwd: compat ldap
group: compat ldap
shadow: compat ldap

Et là, la connexion avec le compte toto de mon annuaire a fonctionné
parfaitement.

Question 2 : La différence entre PAM et NSS n'est pas claire pour moi.
Je pensais qu'à partir du moment ou un service (login dans mon cas)
utilise PAM pour l'authentification alors il se fichait complètement de
NSS. Visiblement non. Est-ce possible d'avoir des explications sur ce
point ? Le fichier /etc/pam.d/login est manifestement bien renseigné
pour aller consulter LDAP. Alors, pour est-il nécessaire d'aller
modifier /etc/nsswitch en plus ? Bref, dans l'exemple du service login,
en quoi intervient PAM exactement et en quoi intervient NSS exactement ?
J'imagine que s'il y a PAM d'un côté et NSS de l'autre, c'est qu'ils
doivent remplir des missions bien distinctes, mais je n'arrive pas à
voir clairement la frontière entre les deux.

Désolé pour ce message un peu long et merci d'avance pour vos lumières.


--
François Lafont

2 réponses

Avatar
Raphaël 'SurcouF' Bordet
Le dimanche 01 mai 2011 à 15:06 +0200, Francois Lafont a écrit :
Bonjour à tous,



Bonjour,

Personne n'a répondu à ta question en un mois. J'ignore où tu en es m ais
voici quelques éléments de réponses.

J'essaye d'apprendre un peu à me servir d'OpenLdap, à mon rythme,
c'est-à-dire au rythme du débutant que je suis dans ce domaine (ça me
semble important de l'indiquer). Pour l'instant mon objectif (atteint au
final) était de créer un utilisateur sur une Debian Squeeze stocké dans
l'annuaire LDAP de la machine (pas dans /etc/passwd etc.) et de me
connecter avec sur la machine avec ce compte.

J'ai donc installé OpenLdap (au passage, la configuration ne se fait
plus via /etc/ldap/slapd.conf ce qui ne m'a pas aidé vu que ma
principale source de documentation faisait référence à ce fichier) et
j'ai créé un utilisateur toto (avec pour mot de passe toto). Ensuite
j'ai installé libpam-ldap car, si j'ai bien compris, beaucoup de
services dont notamment celui du login délèguent l'authentification à
des modules appelés «PAM».



Depuis Debian squeeze, il est suggéré d'utiliser libpam-ldapd et
libnss-ldapd à la place de libpam-ldap et libnss-ldap.

Tout n'est vraiment pas clair pour moi dans ce fichier (loin de là),
mais je vois quand même que le "@include" de common-auth fait en sorte
que pour l'authentification le système va chercher du côté de l'ann uaire
LDAP. Très bien, du coup j'essaye de me connecter au système avec le
compte créé dans l'annuaire (toto) et là ça ne marche pas. En fai t, je
n'ai pas le droit à un classique message du genre «login incorrect» par
exemple (ce qui prouve qu'il a eu un changement dans le bon sens). En
fait tout semble fonctionner dans le sens où, dès que je tape sur ENT ER
après avoir mis le mot de passe de toto, j'ai un message du genre
«Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY etc». Bref, comme
dans un début de connexion réussie, mais ensuite j'ai le message «U ser
not known to the underlying authentication module» et la connexion éc houe.

Question 1 : Je ne peux donc pas me connecter avec toto qui est bien
dans mon annuaire. D'où ma question : dans le fichier /etc/pam.d/login,
à quel moment la connexion plante (et pourquoi) ?


Difficile de répondre à la question avec si peu d'élément j'imagi ne,
mais ce qui suit va vous sûrement vous apporter des éléments. Apr ès cet
échec de connexion, j'ai pensé à installer le paquet libnss-ldap ca r on
voit partout sur le Web que PAM et NSS sont assez liés tous les deux.
Ensuite, j'ai modifié le fichier /etc/nsswitch au niveau des bases
passwd, group, shadow pour obtenir ceci :

passwd: compat ldap
group: compat ldap
shadow: compat ldap

Et là, la connexion avec le compte toto de mon annuaire a fonctionné
parfaitement.

Question 2 : La différence entre PAM et NSS n'est pas claire pour moi.
Je pensais qu'à partir du moment ou un service (login dans mon cas)
utilise PAM pour l'authentification alors il se fichait complètement de
NSS. Visiblement non. Est-ce possible d'avoir des explications sur ce
point ? Le fichier /etc/pam.d/login est manifestement bien renseigné
pour aller consulter LDAP. Alors, pour est-il nécessaire d'aller
modifier /etc/nsswitch en plus ? Bref, dans l'exemple du service login,
en quoi intervient PAM exactement et en quoi intervient NSS exactement ?
J'imagine que s'il y a PAM d'un côté et NSS de l'autre, c'est qu'ils
doivent remplir des missions bien distinctes, mais je n'arrive pas à
voir clairement la frontière entre les deux.



Voici un lien pouvant sans doute apporter quelques réponses à ce
sujet :
http://www.openldap.org/lists/openldap-software/200308/msg00088.html

Les deux systèmes sont liés car NSS permet à PAM et aux autres logici els
ayant besoin des mêmes informations de savoir à qui s'adresser.
Généralement, il s'agit des fichiers de configuration classiques mais
également d'un annuaire LDAP ou d'un système NIS.

Quant à PAM, son rôle se borne avant-tout à identifier l'utilisateur.


--
Raphaël 'SurcouF' Bordet
Avatar
Francois Lafont
Bonsoir,

Le 05/06/2011 21:34, Raphaël 'SurcouF' Bordet a écrit :

Depuis Debian squeeze, il est suggéré d'utiliser libpam-ldapd et
libnss-ldapd à la place de libpam-ldap et libnss-ldap.



Ah, je ne savais pas.

Voici un lien pouvant sans doute apporter quelques réponses à ce
sujet :
http://www.openldap.org/lists/openldap-software/200308/msg00088.html

Les deux systèmes sont liés car NSS permet à PAM et aux autres logiciels
ayant besoin des mêmes informations de savoir à qui s'adresser.
Généralement, il s'agit des fichiers de configuration classiques mais
également d'un annuaire LDAP ou d'un système NIS.

Quant à PAM, son rôle se borne avant-tout à identifier l'utilisateur.



Ok, merci bien pour la réponse. C'est un peu plus clair.
En revanche, je trouve que la configuration de PAM n'est pas très
simple. Mais ça c'est un autre problème.


--
François Lafont