Installation et configuration d un serveur OpenLDAP sous Debian Introduction : OpenLDAP est une implémentation libre du protocole LDAP développée par The OpenLDAP Project. Lightweight Directory Access Protocol (LDAP) est à l origine un protocole permettant l interrogation et la modification des services d annuaire. Nous allons utiliser le serveur LDAP afin de centraliser les informations utilisateurs des sites et services du serveur. En effet la plus par des services telles que les serveurs web, ftp, proxy peuvent s authentifier sur un serveur LDAP Pour plus de détail, allez sur le wiki : http://fr.wikipedia.org/wiki/openldap
1. Installation de «OpenLDAP» sous Debian 7 Changement du nom de la machine : 1. éditer le fichier /etc/hostname afin d avoir : mars.test.local 2. vérifier le nom attribué à votre machine en exécutant la commande : hostname -f Contenue du fichier /etc/hosts Installation des paquets nécessaires : commencez par mettre à jour votre machine Debian : # aptitude update;aptitude upgrade Installer les paquets de LDAP (slapd, ldap-utils) : aptitude -y install slapd ldap-utils OpenLDAP est constitué de 3 éléments principaux : 1. slapd (Stand-alone LDAP Daemon): demon LDAP autonome. Il écoute les connexions LDAP sur n'importe quel port (389 par défaut) et répond aux opérations LDAP qu'il reçoit via ces connexions. Typiquement, slapd est appelé au moment du boot. 2. des bibliothèques implémentant le protocole LDAP. 3. des utilitaires, des outils et des exemples de clients. (source Wiki)
Indiquer le mot de passe de l administrateur de l annuaire LDAP Pour l instant rien ne nous garantit que le service de l annuaire fonctionne correctement et ce même en exécutant la commande : slapcat laquelle ne permet qu interroger l annuaire.
Nous allons créer un nouveau fichier appelé base.ldif qui va servir pour la création de notre domaine test.local La commande ldapadd -x -D cn=admin,dc=test,dc=local -W -f base.ldif permet d utiliser le fichier base.ldif pour ajouter des entrées dans la base.
Dans ce qui suit nous allons ajouter les utilisateurs qui ont, par exemple, des UID entre 1000 et 9999, pour cela éditons le fichier /etc/passwd Le script Shell ldapuser.sh va extraire ces utilisateurs et va les rediriger vers un autre fichier ldapuser.ldif pour une réutilisation ultérieur #!/bin/bash SUFFIX='dc=test,dc=local' LDIF='ldapuser.ldif' echo -n > $LDIF for line in `grep "x:[1-9][0-9][0-9][0-9]:" /etc/passwd sed -e "s/ /%/g"` do UID1=`echo $line cut -d: -f1` NAME=`echo $line cut -d: -f5 cut -d, -f1` if [! "$NAME" ] then NAME=$UID1 else NAME=`echo $NAME sed -e "s/%/ /g"` fi SN=`echo $NAME awk '{print $2}'` if [! "$SN" ] then SN=$NAME fi GIVEN=`echo $NAME awk '{print $1}'` UID2=`echo $line cut -d: -f3`
GID=`echo $line cut -d: -f4` PASS=`grep $UID1: /etc/shadow cut -d: -f2` SHELL=`echo $line cut -d: -f7` HOME=`echo $line cut -d: -f6` EXPIRE=`passwd -S $UID1 awk '{print $7}'` FLAG=`grep $UID1: /etc/shadow cut -d: -f9` if [! "$FLAG" ] then FLAG="0" fi WARN=`passwd -S $UID1 awk '{print $6}'` MIN=`passwd -S $UID1 awk '{print $4}'` MAX=`passwd -S $UID1 awk '{print $5}'` LAST=`grep $UID1: /etc/shadow cut -d: -f3` echo "dn: uid=$uid1,ou=people,$suffix" >> $LDIF echo "objectclass: inetorgperson" >> $LDIF echo "objectclass: posixaccount" >> $LDIF echo "objectclass: shadowaccount" >> $LDIF echo "uid: $UID1" >> $LDIF echo "sn: $SN" >> $LDIF echo "givenname: $GIVEN" >> $LDIF echo "cn: $NAME" >> $LDIF echo "displayname: $NAME" >> $LDIF echo "uidnumber: $UID2" >> $LDIF echo "gidnumber: $GID" >> $LDIF echo "userpassword: {crypt}$pass" >> $LDIF echo "gecos: $NAME" >> $LDIF echo "loginshell: $SHELL" >> $LDIF echo "homedirectory: $HOME" >> $LDIF echo "shadowexpire: $EXPIRE" >> $LDIF echo "shadowflag: $FLAG" >> $LDIF echo "shadowwarning: $WARN" >> $LDIF echo "shadowmin: $MIN" >> $LDIF echo "shadowmax: $MAX" >> $LDIF echo "shadowlastchange: $LAST" >> $LDIF echo >> $LDIF done NB: n oublier pas de rendre votre fichier exécutable, puis de l exécuter pour obtenir le fichier ldapuser.ldif La sortie du fichier ldapuser.ldif : dn: uid=khalid,ou=people,dc=test,dc=local objectclass: inetorgperson objectclass: posixaccount objectclass: shadowaccount uid: khalid sn: khalid givenname: khalid
cn: khalid displayname: khalid uidnumber: 1000 gidnumber: 1000 userpassword: {crypt}$6$ofnwdfap$rdjnz2lxfjlc12rsl7qv3xw6ydxy64xvsvawhdo4bf.mhder8d4f/7wiurddeztv Sn8ILwYBZL9DyjLC8N4uh0 gecos: khalid loginshell: /bin/bash homedirectory: /home/khalid shadowexpire: -1 shadowflag: 0 shadowwarning: 7 shadowmin: 0 shadowmax: 99999 shadowlastchange: 16241 dn: uid=user1,ou=people,dc=test,dc=local objectclass: inetorgperson objectclass: posixaccount objectclass: shadowaccount uid: user1 sn: user1 givenname: user1 cn: user1 displayname: user1 uidnumber: 1001 gidnumber: 1001 userpassword: {crypt}! gecos: user1 loginshell: /bin/sh homedirectory: /home/user1 shadowexpire: -1 shadowflag: 0 shadowwarning: 7 shadowmin: 0 shadowmax: 99999 shadowlastchange: 16300 dn: uid=user2,ou=people,dc=test,dc=local objectclass: inetorgperson objectclass: posixaccount objectclass: shadowaccount uid: user2 sn: user2 givenname: user2 cn: user2 displayname: user2 uidnumber: 1002 gidnumber: 1002 userpassword: {crypt}! gecos: user2
loginshell: /bin/sh homedirectory: /home/user2 shadowexpire: -1 shadowflag: 0 shadowwarning: 7 shadowmin: 0 shadowmax: 99999 shadowlastchange: 16300 De la même façon que précédemment, on ajoute des entrées concernant nos utilisateurs en utilisant le fichier ldapuser.ldif, la commande est : ldapadd -x -D cn=admin,dc=test,dc=local -W -f ldapuser.ldif Comme pour les utilisateurs, on va maintenant extraire les groupes ayant un GUID de 4 digits. Le script s appelle ldapgroup.sh #!/bin/bash SUFFIX='dc=test,dc=local' LDIF='ldapgroup.ldif' echo -n > $LDIF for line in `grep "x:[1-9][0-9][0-9][0-9]:" /etc/group` do CN=`echo $line cut -d: -f1` GID=`echo $line cut -d: -f3` echo "dn: cn=$cn,ou=groups,$suffix" >> $LDIF echo "objectclass: posixgroup" >> $LDIF echo "cn: $CN" >> $LDIF echo "gidnumber: $GID" >> $LDIF users=`echo $line cut -d: -f4 sed "s/,/ /g"` for user in ${users} ; do echo "memberuid: ${user}" >> $LDIF done echo >> $LDIF done Rendez le fichier ldepgroup.sh exécutable, puis exécutez-le.
Le fichier ldapgroup.sh génère ldapgroup.ldif dn: cn=khalid,ou=groups,dc=test,dc=local objectclass: posixgroup cn: khalid gidnumber: 1000 dn: cn=user1,ou=groups,dc=test,dc=local objectclass: posixgroup cn: user1 gidnumber: 1001 dn: cn=user2,ou=groups,dc=test,dc=local objectclass: posixgroup cn: user2 gidnumber: 1002 La commande : ldapadd -x -D cn=admin,dc=test,dc=local -W -f ldapgroup.ldif permet d ajouter des entrées concernant les groupes dans l annuaire en utilisant le fichier ldapgroup.ldif Remarque : Si vous voulez supprimer un utilisateur de l annuaire, faites la commande : ldapdelete -x -W -D 'cn=admin,dc=test,dc=local' "uid=khalid,ou=people,dc=test,dc=local" Si vous voulez supprimer un groupe de l annuaire, faites la commande : ldapdelete -x -W -D 'cn=admin,dc=test,dc=local' "cn=khalid,ou=people,dc=test,dc=local"
Installation du client OpenLDAP Exécuter sur la machine client la commande: aptitude -y install libnss-ldap libpam-ldap ldap-utils Utilisez le nom distinctif (DN) de la base de recherche : test.local
Utilisez la derrière version de LDAP, soit: 3 Choisissez oui :
Choisissez Non Fournissez le compte de votre administrateur de LDAP.
Saisissez le mot de passe de l administrateur de LDAP Acceptez ce message
Dans le fichier /etc/nsswitch.conf, changez les lignes : 7, 8, 9 et 19 comme suit : Dans le fichier /etc/pam.d/common-password, changez la ligne : 26 en supprimant le mot : use_authtok
Si nécessaire, et à la fin du fichier /etc/pam.d/common-session, Ajoutez la ligne : session optional pam_mkhomedir.so skel=/etc/skel umask=077 Cela vous permet de créer, automatiquement, le «home directory» à la première connexion. Sauvegarez le fichier et redemarrez votre machine. Essayez maintenant de se connecter en tant user1 ou user2 que vous avez créez sur la machine serveur : On remarque que le «home Directory» de l utilisateur user1, qui se trouve dans l annuaire, est créé localement sur la machine cliente, soit : /home/user1. On peut aussi remarquer qu aucune entrée concernant user1 et user2 ne figure sur le fichier /etc/passwd du client : Remarque : Vous pouvez stopper LDAP sur la machine serveur et essayer de se connecter en tant que user1 ou user2 sur la machine cliente pour vérifier l opérationnalité de votre annuaire.
Liens utiles : http://switzernet.com/3/public/101010-ldap/ http://www.server-world.info/en/note?os=debian_7.0&p=ldap&f=1