====== Guide d'installation d'OpenLDAP ====== **Ce document n'étant pas à jour, il est en cours de réécriture.** Memo pour l'installation d'un annuaire openldap sur distribution GNU/Linux Debian Sarge. ===== Installation des paquets ===== # apt-get install slapd ldap-utils db4.2-util Une fenêtre de dialogue demande un mot de passe a associé l'annuaire que vous mettez en place, indiquez ce que vous voulez nous changerons par la suite. ===== Initialisation ===== ==== Configuration ==== Le fichier de configuration /etc/ldap/slapd.conf : # This is the main slapd configuration file. See slapd.conf(5) for more # info on the configuration options. ####################################################################### # Global Directives: # Features to permit #allow bind_v2 # Schema and objectClass definitions include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema # Schema check allows for forcing entries to # match schemas for their objectClasses's schemacheck on # Where the pid file is put. The init.d script # will not stop the server if you change this. pidfile /var/run/slapd/slapd.pid # List of arguments that were passed to the server argsfile /var/run/slapd.args # Read slapd.conf(5) for possible values loglevel 0 # Where the dynamically loaded modules are stored modulepath /usr/lib/ldap moduleload back_bdb ####################################################################### # Specific Backend Directives for bdb: # Backend specific directives apply to this backend until another # 'backend' directive occurs backend bdb checkpoint 512 30 ####################################################################### # Specific Directives for database #1, of type bdb: # Database specific directives apply to this databasse until another # 'database' directive occurs database bdb # The base of your directory in database #1 suffix "dc=maison,dc=com" rootdn "cn=admin,dc=maison,dc=com" #rootpw "secret" rootpw "{CRYPT}q9NNPiXL8AK1." # Where the database file are physically stored for database #1 directory "/var/lib/ldap" # Indexing options for database #1 index objectClass eq # Save the time that the entry gets modified, for database #1 lastmod on # Where to store the replica logs for database #1 # replogfile /var/lib/ldap/replog # 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 # These access lines apply to database #1 only access to attrs=userPassword by dn="cn=admin,dc=maison,dc=com" write by anonymous auth by self write by * none # Ensure read access to the base for things like # supportedSASLMechanisms. Without this you may # have problems with SASL not knowing what # mechanisms are available and the like. # Note that this is covered by the 'access to *' # ACL below too but if you change that as people # are wont to do you'll still need this if you # want SASL (and possible other things) to work # happily. access to dn.base="" by * read # The admin dn has full write access, everyone else # can read everything. access to * by dn="cn=admin,dc=maison,dc=com" write by * read # For Netscape Roaming support, each user gets a roaming # profile for which they have write access to #access to dn=".*,ou=Roaming,o=morsnet" # by dn="cn=admin,dc=maison" write # by dnattr=owner write Il est préférable désormais d'utiliser le backend HDB comme support BerkeleyDB, dù à des limitations remontées par les testeurs/développeurs d'OpenLDAP. Quelques explications : * La directive //loglevel 0// est le niveau de journalisation du serveur, le niveau 0 correspond à aucun enregistrement ; * La directive //backend bdb// est le choix du type de base de données où sera stocker l'annuaire ; * La directive //suffix "dc=maison,dc=com"// permet de définir la racine de l'annuaire. Les directives : * **rootdn** : DN de connexion de l'administrateur LDAP ; * **rootpw** : Le mot de passe associé, par défaut en clair. Il est possible de le hasher grâce à la commande administrateur **slappasswd**. ==== Premier démarrage ==== Pour vérifier la syntaxe du fichier de configuration vous devez utilisé slaptest, la réponse doit être "config file testing succeeded" et/ou un code de retour à 0. # slaptest -f /etc/ldap/slapd.conf Aprés une modification du fichier de configuration du serveur slapd.conf, vous devez le redémarrer : # /etc/init.d/slapd restart Pour crypter le mot de passe administrateur : # slappasswd -s "secret" -h {CRYPT} {CRYPT}q9NNPiXL8AK1. Éviter //{CRYPT}//, préférer plutôt une méthode hashage sécurisée de type SSHA ou SMD5. Ceci permet de ne pas stocker le mot de passe en clair dans le fichier de configuration. ==== Création de la structure de l'annuaire ==== Le DIT, pour //Directory Information Tree// : dc=maison,dc=com | | --------------------------------- | | | | ou=users,dc=maison,dc=com ou=groups,dc=maison,dc=com | | | | |_uid=garfield,ou=users,... |_cn=utilisateurs,ou=groups,... | | |_uid=odie,ou=users,... Le fichier //structure.ldif// au format LDIF contient : dn: dc=maison,dc=com objectClass: dcObject objectClass: organization dc: maison o: maison description: la maison dn: ou=users,dc=maison,dc=com objectClass: top objectClass: organizationalUnit ou: users dn: ou=groups,dc=maison,dc=com objectClass: top objectClass: organizationalUnit ou: groups dn: cn=utilisateurs,ou=groups,dc=maison,dc=com objectClass: posixGroup cn: utilisateurs gidNumber: 2000 Vous devez utilisé la commande suivante : # ldapadd -W -D "cn=admin,dc=maison,dc=com" -x -H ldap://localhost -f structure.ldif ===== Manipulation de base ===== ==== Ajout d'un utilisateur ==== Le fichier //user.ldif// au format LDIF contient : dn: uid=garfield,ou=users,dc=maison,dc=com objectClass: account objectClass: posixAccount cn: garfield uid: garfield uidNumber: 10001 gidNumber: 2000 homeDirectory: /home/garfield userPassword: chat loginShell: /bin/sh gecos: garfield description: garfield le chat ==== Pour ajouter un utilisateur à l'annuaire ==== # ldapadd -W -D "cn=admin,dc=maison,dc=com" -x -H ldap://localhost -f user.ldif ==== Suppression d'un utilisateur ==== # ldapdelete -x -H ldap://localhost -W -D "cn=admin,dc=maison,dc=com" "uid=garfield,ou=users,dc=maison,dc=maison" ==== Modificiation d'une entrée avec ldapmodify ==== Pour modifier un attribut, le "changetype" à employer est "modify". Basiquement, l'attribut supplémentaire à ajouter est l'attribut "replace" qui va préciser quel attribut remplacer. Et nous spécifions la nouvelle valeur de l'attribut. Le fichier //modif.ldif// : dn: uid=garfield,ou=users,dc=maison,dc=com changetype: modify replace; description description : gros chat La commande : # ldapmodify -W -D "cn=admin,dc=maison,dc=com" -x -H ldap://localhost -f modif.ldif ==== Pour rechercher un utilisateur ==== On recherche tous les uid commençant par "garf" à partir de la racine de l'annuaire : # ldapsearch -x -H ldap://localhost -b "dc=maison,dc=com" "(uid=garf*)" ===== Manipulation de la base BerkeleyDB ===== Important : Avant toute manipulation des outils ci dessous vous devez impérativement arrêter le serveur openldap pour éviter les accès concurrent à la base de données. # /etc/init.d/slapd stop ==== L'outil slapindex ==== Nous avons configuré notre serveur pour qu'il utilise des index ; la première chose à effectuer avant d'utiliser notre serveur est donc de les générer. Il faut en effet initialiser les index pour qu'OpenLDAP puisse ensuite les utiliser et les maintenir. L'opération de génération n'est à effectuer qu'une seule fois et ceci se fait par le biais de la commande slapindex. # slapindex ==== L'outil slapcat ==== Slapcat est une commande trés utile au quotidien. Elle effectue un dump de la base de données au format ldif. # slapcat > sauvegarde.ldif L'outil slapadd slapadd est l'inverse de slapcat. Cette commande permet de peupler notre annuaire en utilisant un fichier au format ldif. # slapadd < sauvegarde.ldif Aprés toutes ses manipulations vous devez redémarrer le serveur openldap. # /etc/init.d/openldap start ===== Authentification des clients linux ===== Temps total estimé : 10min :) ==== Installation de libnss-ldap ==== # apt-get install libnss-ldap Répondez aux questions... Modification du fichier /etc/nsswitch.conf : passwd: compta ldap group: compta ldap shadow: compta ldap Testez que les modifications fonctionnent : # getent passwd Si vous avez les comptes ldap dans les résultats de la commande, ca marche. ==== Installation de libpam-ldap ==== # apt-get install libpam-ldap Modification du fichier ///etc/pam_ldap.conf//. Dans ///etc/pam.d/// il y a tous les fichiers d'authentification du système : * Dans ///etc/pam.d/common-account// ajouter : account sufficient pam_ldap.so account required pam_unix.so try_first_pass * Dans ///etc/pam.d/common-auth// ajouter : auth sufficient pam_ldap.so auth required pam_unix.so nullock_secure try_first_pass * Dans ///etc/pam.d/common-password// ajouter : password sufficient pam_ldap.so password required pam_unix.so nullok obscure min=4 max=8 md5 try_first_pass Vous pouvez être authentifier grâce à l'annuaire ldap. Contributeurs : David HANNEQUIN, [[::info::authors::tchemineau]]