Ce document aborde l'utilisation d'un annuaire LDAP à des fins d'authentification.
Il propose de :
Le premier document que j'avais rédigé s'appuyait sur un système RedHat. Or, comme la majorité des serveurs du monde «linux» se basent sur la distribution debian, j'ai trouvé utile et intéressant de rédiger la version «Debian».
Le document initial, cité dans l'article de Linux Pratique d'Octobre/Novembre 2000 reste toujours disponible. Sa nouvelle adresse est désormais :
Ce document traite uniquement de l'utilisation et configuration d'un annuaire LDAP (dans notre cas d'OpenLDAP) à des fins d'authentification.
Le document http://jfgiraud.free.fr/programmation/ldap/ permet de connaître plus en détails la manière d'installer et configurer OpenLDAP.
Pour permettre l'authentification auprès d'un annuaire LDAP, vous devez installer les packages suivants :
Le paquet libnss-ldap fournit un service de nommage qui authorise votre serveur LDAP d'être utilisé comme service de nom. Ceci signifie qu'il fournit les données informatives concernant compte utilisateur, identificateurs, informations machines, alias, groupes réseau et de manière générale, tout ce qui est en général à plat dans les fichiers du répertoire /etc ou NIS.
Le paquet libpam-ldap permet l'authentification des utilisateurs dans les programmes qui utilisent PAM (Pluggable Authentication Module). S'il est utilisé avec libnss-ldap, vous pouvez remplacer la structure de configuration par fichiers /etc ou NIS avec LDAP.
Les paquets libpam-cracklib et libpam-pwdb sont utilisés par PAM-LDAP pour l'authentification.
Pour installer un paquet, il faut utiliser la commande apt-get :
Les fichiers de configuration de OpenLDAP sont :
Les fichiers de configuration de PAM sont :
Les fichiers de configuration de NSS sont :
Il faut mettre à jour le nom de domaine dans le fichier de configuration /etc/openldap/slapd.conf.
Avec le nom de domaine maboite.fr, le fichier de configuration contient dans mon cas :
# This is the main ldapd configuration file. # Schema and objectClass definitions include /etc/openldap/slapd.at.conf include /etc/openldap/slapd.oc.conf # Schema for supporting Netscape Roaming include /etc/openldap/netscape_roaming.at.conf include /etc/openldap/netscape_roaming.oc.conf # Schema for supporting Debian Package Directory entries #include /etc/openldap/debian.at.conf #include /etc/openldap/debian.oc.conf # Schema check allows for forcing entries to # match schemas for their objectClasses's schemacheck off # Where clients are refered to if no # match is found locally referral ldap://ldap.four11.com # Where the pid file is put. The init.d script # will not stop the server if you change this. pidfile /var/run/slapd.pid # Read slapd.conf(5) for possible values loglevel 0 ####################################################################### # ldbm database definitions ####################################################################### # The backend type, ldbm, is the default standard database ldbm # The base of your directory rootdn "cn=admin,ou=People,dc=maboite,dc=fr" rootpw toto suffix "dc=maboite,dc=fr" # Where the database file are physically stored directory "/var/lib/openldap" # Save the time that the entry gets modified lastmod on # By default, only read access is allowed defaultaccess read # For Netscape Roaming support, each user gets a roaming # profile for which they have write access to access to dn=".*,ou=Roaming,dc=maboite,dc=fr" by dnattr=owner write # The userPassword by default can be changed # by the entry owning it if they are authenticated. # Others should not be able to see it, except the # admin entry below access to attribute=userPassword by dn="cn=admin,ou=People,dc=maboite,dc=fr" write by self write by * none # The admin dn has full write access access to * by dn="cn=admin,ou=People,dc=maboite,dc=fr" write # End of ldapd configuration file
Pour voir ce que fait OpenLDAP (arrivée des requêtes, recherche...) vous pouvez utiliser la commande suivante :
Vous devez installer les packages libpam-cracklib et libpam-pwdb.
Il faut modifier ce fichier pour mettre à jour la «base» de l'annuaire LDAP
Voici le contenu du fichier :
# # $Id: ldap.conf,v 1.8 1999/06/06 12:24:37 lukeh Exp $ # # This is the configuration file for the LDAP nameservice # switch library and the LDAP PAM module. # # To contact the author, mail lukeh@padl.com. # # Your LDAP server. host 127.0.0.1 # The distinguished name of the search base. base dc=maboite,dc=fr # Use the V3 protocol to optimize searches ldap_version 2 # NOTE: If you use these, be sure to chmod 600 this file # for security reasons # # The distinguished name to bind to the server with. # Optional: default is to bind anonymously. #binddn cn=admin,ou=People,dc=maboite,dc=fr # # The credentials to bind with. # Optional: default is no credential. #bindpw toto # 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=example,dc=net # 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
Le test d'authentification d'un utilisateur, va être effectué grâce au service su. Seul le fichier /etc/pam.d/su sera donc modifié pour nos besoins.
Bien sûr, pour prendre en compte les autres services, il sera nécessaire de modifier leurs fichiers respectifs dans le répertoire /etc/pam.d/.
Remplacer le contenu de /etc/pam.d/su par
#%PAM-1.0 auth sufficient /lib/security/pam_ldap.so auth required /lib/security/pam_unix_auth.so use_first_pass account sufficient /lib/security/pam_ldap.so account required /lib/security/pam_unix_acct.so password required /lib/security/pam_cracklib.so password sufficient /lib/security/pam_ldap.so password required /lib/security/pam_pwdb.so use_first_pass session required /lib/security/pam_unix_session.so
Il faut modifier ce fichier pour mettre à jour la «base» de l'annuaire LDAP
# # $Id: ldap.conf,v 2.10 2000/01/14 23:29:47 lukeh Exp $ # # This is the configuration file for the LDAP nameservice # switch library and the LDAP PAM module. # # PADL Software # http://www.padl.com # # If the host and base aren't here, then the DNS RR # _ldap._tcp.. will be resolved. # will be mapped to a distinguished name and the target host # will be used as the server. # Your LDAP server. Must be resolvable without using LDAP. host 127.0.0.1 # The distinguished name of the search base. base dc=maboite,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
Il faut rajouter ldap dans les sections passwd, shadow, group du fichier.
# /etc/nsswitch.conf # # Example configuration of GNU Name Service Switch functionality. # If you have the `glibc-doc' and `info' packages installed, try: # `info libc "Name Service Switch"' for information about this file. passwd: compat ldap group: compat ldap shadow: compat ldap hosts: files dns networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis
Pour tester NSS/PAM/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.
Dans le fichier migrate_common.ph, porvenant de l'archive téléchargée chez PADL, il faut modifier les variables $DEFAULT_MAIL_DOMAIN et $DEFAULT_BASE.
Pour chez moi, j'ai (extrait) :
# Default DNS domain $DEFAULT_MAIL_DOMAIN = "maboite.fr"; # Default base $DEFAULT_BASE = "dc=maboite,dc=fr";
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 :
De même, pour convertir le fichier group, il faut exécuter :
Je n'ai gardé que les informations relatives à la création de l'utilisateur test. J'ai aussi inséré la description LDIF nécessaire à la création de l'entité organisationnelle Group. En effet, cette dernière est nécessaire pour contenir les informations relatives aux groupes utilisateurs.
Voici le contenu du fichier test.ldif
dn: ou=Group,dc=maboite,dc=fr objectclass: organizationalUnit ou: Group description: Groupes dn: uid=test,ou=People,dc=maboite,dc=fr uid: test cn: TestLe objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword: {crypt}YYIdiNKXDJgZ6 shadowLastChange: 11541 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 1003 gidNumber: 1003 homeDirectory: /home/test gecos: TestLe,,, dn: cn=test,ou=Group,dc=maboite,dc=fr objectClass: posixGroup objectClass: top cn: test userPassword: {crypt}x gidNumber: 1003
Pour tout créer l'utilisateur test, exécuter la commande suivante :
Résultat :
adding new entry ou=Group,dc=maboite,dc=fr adding new entry uid=test,ou=People,dc=maboite,dc=fr adding new entry cn=test,ou=Group,dc=maboite,dc=fr
Après avoir testé l'ajout de l'utilisateur test dans l'annuaire par la commande
Vous devez supprimer ce dernier des fichiers /etc/passwd, /etc/shadow et /etc/group. Vous pouvez utiliser la commande userdel :
Pour tester, il faut se connecter en tant que test par la commande su.
jf@alyson> su test Password: [test@alyson jf]$
Ca a visiblement fonctionné sans problème.
Après ces tests, il faut restaurer les fichiers de configurations à ceux d'origine à moins que vous désirez aller encore plus loin... ;-)
Sitographie :