NSS/PAM/LDAP sur RedHat 6.0

Auteur : Jean-François Giraud (jf@pingoo.org)

Date de mise à jour : 22 Décembre 2000





Ce document relate mes tests d'installation et d'essai de NSS/PAM LDAP sur ma machine perso.

I- PRÉREQUIS

Le package nss_ldap-105-1.i386.rpm est un 'regroupement' des sources de pam_ldap et de nss_ldap. Il contient les fichiers suivants : cliquez ici

Pour compiler des modules d'accès à l'annuaire LDAP en perl ou python par exemple, il faut installer le package openldap-devel-1.2.9-5.i386.rpm.

II- INSTALLATION

Packages RPM : Leurs installations s'effectuent en root.

rpm -i openldap-1.2.9-5.i386.rpm
rpm -i openldap-devel-1.2.9-5.i386.rpm
rpm -i pam-0.68-7.i386.rpm
rpm -i nss_ldap-105-1.i386.rpm


III- CONFIGURATION/TEST

Fichiers de configuration de OpenLDAP :

Fichiers de configuration de PAM :

Fichiers de configuration de NSS/PAM/LDAP :


1- Fichier /etc/openldap/slapd.conf

Il faut modifier le fichier de configuration de OpenLDAP /etc/openldap/slapd.conf pour qu'il reflète bien votre domaine ; le mien (qui est bidon!) est youpi.fr.

#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include         /etc/openldap/slapd.at.conf
include         /etc/openldap/slapd.oc.conf
#include         /etc/openldap/netscape.oc.conf
#include         /etc/openldap/nss.oc.conf

schemacheck     off
#referral       ldap://root.openldap.org/

pidfile         /var/run/slapd.pid
argsfile        /var/run/slapd.args

#######################################################################
# ldbm database definitions
#######################################################################

database        ldbm
suffix          "dc=youpi,dc=fr"
rootdn          "cn=root,dc=youpi,dc=fr"
rootpw          secret
# cleartext passwords, especially for the rootdn, should
# be avoid.  See slapd.conf(5) for details.
directory       /usr/tmp

Les lignes du type include ..., quand elles ne sont pas commentées, permettent de charger les attributs qu'utilise NSS/LDAP par exemple. Ceci permet au serveur (lorsque schemacheck est on) de vérifier la validité des requêtes (pratique lors du développement de clients).

Le fichier doit être en permission 600. En effet, il contient le mot de passe de l'administrateur de l'annuaire !!!



2- Démarrage du serveur LDAP

Pour le lancer automatiquement au démarrage de la machine, exécuter setup. Dans System services, cocher ldap.

Dans mon cas, je le lance à la main de telle sorte qu'il affiche les messages : /usr/sbin/slapd -d 1



3- Création d'un utilisateur

Pour tester NSS/LDAP, j'ai crée un utilisateur test avec la commande adduser. J'ai ensuite modifié son mot de passe avec passwd.

Les fichiers /etc/passwd, /etc/shadow, /etc/group ont été modifiés. Ils comportent maintenant les informations sur l'utilisateur crée.

L'opération que j'ai effectuée consiste à migrer l'utilisateur test grâce aux scripts MigrationTools de PADL.

a- Configuration des scripts

Dans le fichier migrate_common.ph, il faut modifier les variables $DEFAULT_MAIL_DOMAIN et $DEFAULT_BASE.

Pour chez moi, j'ai (extrait) :

# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "youpi.fr";

# Default base 
$DEFAULT_BASE = "dc=youpi,dc=fr";


b- Utilisation des scripts

Ils s'utilisent en passant le nom des fichiers à convertir. Le résultat est affiché sur la sortie standard au format ldif.

Par exemple, pour "convertir" le fichier passwd et shadow, il faut exécuter la commande suivante migrate_passwd.pl /etc/passwd.

De même, pour convertir le fichier group, il faut exécuter migrate_group.pl /etc/group.

Je n'ai extrait que les informations relatives à l'utilisateur test que j'ai ensuite mis dans le fichier test.nss. Ce fichier contient également la création du domaine et de quelques unités organisationnelles (People et Group).

dn: dc=youpi,dc=fr
objectclass: organization
o: Youpi
description: Ma boite

dn: ou=People,dc=youpi,dc=fr
objectclass: organizationalUnit
ou: People
description: Personnels

dn: ou=Group,dc=youpi,dc=fr
objectclass: organizationalUnit
ou: Group
description: Groupes

dn: uid=test,ou=People,dc=youpi,dc=fr
uid: test
cn: test
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$1$u4Eq6gmG$0FlCDWk9n/5HIwKNSDOpe/
shadowLastChange: 11049
shadowMax: 99999
shadowWarning: 7
shadowInactive: -1
shadowExpire: -1
shadowFlag: 134540060
loginShell: /bin/bash
uidNumber: 501
gidNumber: 501
homeDirectory: /home/test

dn: cn=test,ou=Group,dc=youpi,dc=fr
objectClass: posixGroup
objectClass: top
cn: test
userPassword: {crypt}x
gidNumber: 501

Pour tout créer (domaine, groupes, utilisateurs), exécuter la commande suivante : ldapadd -D "cn=root,dc=youpi,dc=fr" -w secret -f test.nss

Ne faites cela que sur une machine de test !!!

Il faut ensuite retirer les références à l'utilisateur test dans /etc/passwd, /etc/shadow, /etc/group.



3- Fichier /etc/ldap.conf

Maintenant, il faut modifier le fichier /etc/ldap.conf. Ce fichier est utilisé par NSS/PAM LDAP. Ce fichier est très important. En effet, c'est lui qui indique aux bibliothèques de NSS et PAM où se situe l'annuaire.

Voici le contenu de mon fichier :

# Your LDAP server. Must be resolvable without using LDAP.
host 127.0.0.1

# The distinguished name of the search base.
base dc=youpi,dc=fr

# The LDAP version to use (defaults to 2)
#ldap_version 3

# The distinguished name to bind to the server with.
# Optional: default is to bind anonymously.
#binddn cn=manager,dc=padl,dc=com

# The credentials to bind with. 
# Optional: default is no credential.
#bindpw secret

# The port.
# Optional: default is 389.
#port 389

# The search scope.
#scope sub
#scope one
#scope base

# The following options are specific to nss_ldap.

# The hashing algorith your libc uses. 
# Optional: default is des
#crypt md5
#crypt sha
#crypt des

# The following options are specific to pam_ldap.

# Filter to AND with uid=%s
#pam_filter objectclass=account

# The user ID attribute (defaults to uid)
#pam_login_attribute uid

# Search the root DSE for the password policy (works
# with Netscape Directory Server)
#pam_lookup_policy yes

# Group to enforce membership of
#pam_groupdn cn=PAM,ou=Groups,dc=padl,dc=com

# Group member attribute
#pam_member_attribute uniquemember

# Hash password locally; required for University of
# Michigan LDAP server, and works with Netscape
# Directory Server if you're using the UNIX-Crypt
# hash mechanism and not using the NT Synchronization
# service.
#pam_crypt local


4- Modification de /etc/nsswitch.conf

Il faut rajouter ldap dans les sections passwd, shadow, group du fichier /etc/nsswitch.conf

Voici mon fichier :

#
# /etc/nsswitch.conf
#
# An example Name Service Switch config file. This file should be
# sorted with the most-used services at the beginning.
#
# The entry '[NOTFOUND=return]' means that the search for an
# entry should stop if the search in the previous entry turned
# up nothing. Note that if the search failed due to some other reason
# (like no NIS server responding) then the search continues with the
# next entry.
#
# Legal entries are:
#
#	nisplus or nis+		Use NIS+ (NIS version 3)
#	nis or yp		Use NIS (NIS version 2), also called YP
#	dns			Use DNS (Domain Name Service)
#	files			Use the local files
#	db			Use the local database (.db) files
#	compat			Use NIS on compat mode
#	[NOTFOUND=return]	Stop searching if not found so far
#

# To use db, put the "db" in front of "files" for entries you want to be
# looked up first in the databases
#
# Example:
#passwd:    db files nisplus nis
#shadow:    db files nisplus nis
#group:     db files nisplus nis

passwd:     files ldap nisplus nis
shadow:	    files ldap nisplus nis
group:      files ldap nisplus nis

#hosts:     db files nisplus nis dns
hosts:      files nisplus nis dns

services:   nisplus [NOTFOUND=return] files
networks:   nisplus [NOTFOUND=return] files
protocols:  nisplus [NOTFOUND=return] files
rpc:        nisplus [NOTFOUND=return] files
ethers:     nisplus [NOTFOUND=return] files
netmasks:   nisplus [NOTFOUND=return] files     
bootparams: nisplus [NOTFOUND=return] files

netgroup:   nisplus

publickey:  nisplus

automount:  files nisplus
aliases:    files nisplus

Après, en exécutant su test dans une console, on remarque que le serveur LDAP a de l'activité. Pourtant, l'authentification échoue (et oui, PAM !)

5- Modification de /etc/pam.d/su

J'ouvre une console root au cas où...

Je copie le fichier /etc/pam.d/su dans /etc/pam.d/su.old puis recopie le fichier /usr/doc/nss_ldap-105/pam.d/su dans /etc/pam.d/.

Je retente de me connecter en test dans une autre console que celle de root.

jf@alyson> su test
Password: 
[test@alyson jf]$ 

Ca MMAAAAAAAAAARRRCHHHHEEE !!!!

Je restaure le fichier /etc/pam.d/su et /etc/nsswitch.conf



IV- Remarques

Pour que les autres programmes comme login (voir dans /usr/doc/nss_ldap-105/pam.d/) puissent fonctionner avec l'annuaire LDAP, il ne faut pas oublier de modifier les fichiers de /etc/pam.d.

Lire la rfc2307.txt (contenue entre autre dans les sources de nss_ldap).

Fichier nss.oc.conf (commenté dans /etc/openldap/slapd.conf)



V- Liens

  • Sitographie :


    Pour m'écrire      Répertoire parent      Acceuil