Les services d'annuaires LDAP: application au référencement dans les transports terrestres camerounais( Télécharger le fichier original )par Dany Stéphane ZIE FOMEKONG Ecole supérieure de commerce et de gestion - Siantou - Marster en informatique approfondie 2006 |
B. ImplémentationB.1 Installation et configuration des serveurs1. Apache et BINDPour ce qui concerne l'installation d'apache et de Bind, nous n'entrerons pas dans les détails d'installation. On va configurer les deux serveurs selon nos besoins. On utilisera le serveur Web Apache dans sa version 2.1.0 et le serveur de noms Bind dans sa version 9 qui sont par ailleurs tous gratuits. a) Apache Pour rendre accessible la consultation et l'administration de l'annuaire via un simple navigateur web, il faut compiler apache à l'installation avec le paquetage auth_ldap. b) Bind Pour configurer le DNS nous allons prendre comme domaine fictif de travail master.net et comme hôte dany. Notre réseau a une adresse de classe C 192.168.100 car la démonstration sera effectuée en Intranet et le serveur LDAP avec lequel nous travaillons a l'adresse 192.168.100.2
- Fichier named.conf Nous allons créer deux zones master.net et 0.168.192.in-addr.arpa pour la résolution noms-adresses et adresses-noms. // Zone master.net zone "master.net" { type master; file "db.master"; }; // zone resolution inverse zone "0.168.192.in-addr.arpa" { type master; file "db.192.168.100"; }; - Fichier db.master $TTL 38400 master.net. IN SOA dany.master.net. dany.master.net. ( 1 ; numéro de série 10800 ; rafraîchissement 3600 ; nouvel essai 604800 ; Obsolescence après une semaine 86400 ) ; TTL minimal de 1 jour ; serveur de noms @ IN NS dany.master.net. ; adresse et alias ; adresse des hôtes IN A 192.168.100.2 localhost.master.net IN A 127.0.0.1 mail.master.net IN A 192.168.100.2 dany IN A 192.168.100.2 dany.master.net IN A 192.168.100.2 ; alias www IN CNAME dany.master.net. mail IN CNAME dany.master.net. news IN CNAME dany.master.net. ldap IN CNAME dany.master.net. pop IN CNAME dany.master.net. imap IN CNAME dany.master.net. ; Spécification serveur de messagerie @ IN MX 10 dany.master.net. Test DNS avec nslookup [root@dany named]# nslookup master.net Note: nslookup is deprecated and may be removed from future releases. Consider using the `dig' or `host' programs instead. Run nslookup with the `-sil[ent]' option to prevent this message from appearing. Server: 192.168.100.2 Address: 192.168.100.2#53
Name: master.net Address: 192.168.100.2
[root@dany named]# 2. Package OpenLDAPOn vérifie d'abord qu' Openldap n'est pas déjà installé sur votre système en tapant : rpm -qa | grep -i ldap On supprime du système les packages contenus dans la
liste avec la commande rpm -e nom-du-package (sauf
libldap2 qui sert pour de nombreux packages). L'archive à récupérer est openldap-2.2.28.tgz qu'on décompressera en tapant : tar xvfz openldap-2.2.28.tgz Cela va nous créer un répertoire openldap-2.2.28. Avant d'aller plus loin il faudra installer (commande urpmi nom-package ) les packages suivants de la Mandrake 9.2 libgdbm2 En effet par défaut openldap utilise une base de donnée Berkeley dans sa version 4.2 qui est utilisée, comme la 10.0 ne propose que la 4.1, je me suis rabattu sur la base de donnée de type ldbm. Puis on tape successivement : ./configure --enable-crypt --disable-bdb --enable-ldbm make depend make cd tests pour installer les binaires de ldap on tapera, en tant que root : cd .. Les binaires sont installés par défaut dans /usr/local/sbin et /usr/local/libexec, les fichiers de config dans /usr/local/etc/openldap et les bases dans /usr/local/var/openldap-data. Les biblio vont se trouver sous /usr/local/lib, si ce n'est pas fait, rajouter ce chemin à la fin du fichier /etc/ld.so.conf et tapez ldconfig pour changer l'emplacement de tous ces fichiers taper: configure -help Il suffit d'installer (commande urpmi openldap)
les packages suivants (dans l'ordre)
: Vous pouvez maintenant installer aussi le package php-ldap pour le support LDAP de PHP avec Apache.
c) Mise en place des classes d'objet Le fichier de configuration slapd.conf fait appel à /usr/local/etc/openldap/schema/core.schema (/usr/share/openldap/schema/core.schema pour une install avec package) qui décrit les classes d'objet. Voilà un exemple avec la classe "person" objectclass ( 2.5.6.6 NAME
'person' MUST correspond au attributs obligatoires et
MAY à ceux facultatifs On voit qu'il est nécessaire de fournir les attributs sn (surname) et cn (common name), sont facultatifs le mot de passe (userPassword), le numéro de téléphone (telephoneNumber ), les liens (seeAlso) et la description. Les attributs sont définis dans le même fichier, la syntaxe est la suivante pour telephoneNumber par exemple : attributetype ( 2.5.4.20 NAME
'telephoneNumber' Pour créer les classes d'objet agency et vhicule dérivant de organizationalUnit, disposant de l'attribut obligatoire title en plus et des arguments facultatifs ou (groupe de travail) et l (localistation). On tapera dans le fichier core.schema juste après la définition de la classe organizationalUnit. objectclass ( 2.5.6.6.2 NAME `agency' SUP
organizationalUnit STRUCTURAL Vous noterez le nombre 2.5.6.6.2, ce nombre doit être unique dans le fichier, il dérive directement du numéro de la classe objet organizationalUnit qui a pour numéro 2.5.6.6. Il est évident que comme agency et vhicule dérivent de organizationalUnit, les attributs ** sont aussi obligatoires. A noter qu'avec une installation avec package les classes "locales" peuvent être créées dans le fichier /etc/openldap/schema/local.schema Le rootDSE ou suffixe correspond à l'entrée tout en haut de l'arbre (DIT) de l'annuaire, on utilise généralement le nom de domaine, avec la syntaxe suivante dc=master, dc=net pour le domaine master.net (dc correspond à Domain Component). e) Configuration du serveur LDAP # $OpenLDAP: pkg/ldap/servers/slapd/slapd.conf,v 1.8.8.6 2001/04/20 23:32:43 kurt Exp $ # # See slapd.conf(5) for details on configuration options. # This file should NOT be world readable. # # Modified by Christian Zoffoli <czoffoli@linux-mandrake.com> # Version 0.2 # include /usr/share/openldap/schema/core.schema include /usr/share/openldap/schema/cosine.schema include /usr/share/openldap/schema/corba.schema include /usr/share/openldap/schema/inetorgperson.schema include /usr/share/openldap/schema/java.schema include /usr/share/openldap/schema/krb5-kdc.schema include /usr/share/openldap/schema/kerberosobject.schema include /usr/share/openldap/schema/misc.schema include /usr/share/openldap/schema/nis.schema include /usr/share/openldap/schema/openldap.schema #include /usr/share/openldap/schema/rfc822-MailMember.schema #include /usr/share/openldap/schema/pilot.schema #include /usr/share/openldap/schema/autofs.schema #include /usr/share/openldap/schema/samba.schema #include /usr/share/openldap/schema/qmail.schema #include /usr/share/openldap/schema/mull.schema #include /usr/share/openldap/schema/netscape-profile.schema #include /usr/share/openldap/schema/trust.schema #include /usr/share/openldap/schema/dns.schema #include /usr/share/openldap/schema/cron.schema include /etc/openldap/schema/local.schema # Define global ACLs to disable default read access. include /etc/openldap/slapd.access.conf # Do not enable referrals until AFTER you have a working directory # service AND an understanding of referrals. #referral ldap://root.openldap.org pidfile /var/run/ldap/slapd.pid argsfile /var/run/ldap/slapd.args modulepath /usr/lib/openldap #moduleload back_dnssrv.la #moduleload back_ldap.la #moduleload back_passwd.la #moduleload back_sql.la # SASL config #sasl-host ldap.master.net # To allow TLS-enabled connections, create /usr/share/ssl/certs/slapd.pem # and uncomment the following lines. #TLSRandFile /dev/random #TLSCipherSuite HIGH:MEDIUM:+SSLv2 TLSCertificateFile /etc/ssl/openldap/ldap.pem TLSCertificateKeyFile /etc/ssl/openldap/ldap.pem #TLSCACertificatePath /etc/ssl/openldap/ TLSCACertificateFile /etc/ssl/openldap/ldap.pem #TLSVerifyClient 0 ####################################################################### # ldbm database definitions ####################################################################### database ldbm suffix "dc=master,dc=net" #suffix "o=My Organization Name,c=US" rootdn "cn=Manager,dc=master,dc=net" #rootdn "cn=Manager,o=My Organization Name,c=US" # Cleartext passwords, especially for the rootdn, should # be avoided. See slappasswd(8) and slapd.conf(5) for details. # Use of strong authentication encouraged. rootpw {SSHA}RK9gP6YyIOOreXm5+oFsZ8W+9AiEL4el # The database directory MUST exist prior to running slapd AND # should only be accessable by the slapd/tools. Mode 700 recommended. directory /var/lib/ldap # Indices to maintain #index objectClass eq index objectClass,uid,uidNumber,gidNumber eq index cn,mail,surname,givenname eq,subinitial # logging loglevel 256 # Basic ACL access to attr=userPassword by self write by anonymous auth by dn="cn=Manager,dc=master,dc=net" write by * none
access to * by dn="cn=Manager,dc=master,dc=net" write by * read access to attr=userPassword by self write by anonymous auth by dn="dc=master,dc=net" write by * none Le fichier ldap.conf peut être vide dans un premier temps voire inexistant. Le mot de passe de l'administrateur est secret par défaut et en clair. Pour des raisons de sécurité il vaut mieux le crypté. slappasswd -v -s Mot_de_Passe -h {SSHA} A la place de rootpw secret Dans slapd.conf, vous mettrez donc: rootpw {SSHA}RK9gP6YyIOOreXm5+oFsZ8W+9AiEL4el
Pour une installation par RPM, vous allez retrouver un fichier de lancement ldap sous /etc/rc.d/init.d. Pour l'installation par tarball, voici un fichier ldap à placer sous /etc/rc.d/init.d, attention ce fichier utilise les chemins par défaut, vous devez le modifier si nécessaire et lui donner des droits d'exécution (755). Vous devez aussi modifier (non nécessaire pour installation par rpm) le fichier /etc/rc.d/init.d/functions et à la place de : PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin" On mettra PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/libexec" pour que serveur LDAP soit lancé automatiquement à l'état de marche 3, 4 et 5 ( les deux types d'install) on tapera : chkconfig --level 345 ldap on Pour l'arrêter à l'état de marche 0, 1, 2 et 6, on tapera: chkconfig --level 0126 ldap off Au prochain reboot le serveur sera lancé automatiquement, pour éviter un reboot pour lancer le serveur, il suffit de taper : /etc/rc.d/init.d/ldap start ou service ldap start Nous avons différents moyens d'ajouter des données à l'annuaire, pour des besoins de configurations on va d'abord aborder la méthode manuelle. Pour ajouter des données au serveur LDAP nous devons fournir un fichier au format LDIF (pour LDAP Directory Interchange Format), le fichier est un format texte facilement lisible au contraire du format interne de l'annuaire. Notre fichier comportera l'enregistrement du domaine (master.net) pour notre annuaire et les enregistrements des 10 provinces du Cameroun, enregistrements figés dans la base de données. A noter que: - chaque enregistrement dans le fichier est séparé du précédent et du suivant par une ligne vierge, - les espaces sont pris en compte. ATTENTION, il est très important qu'il n'y ait aucun espace en fin de ligne. Creation du fichier LDIF de base (base.ldif) # Build the root node. dn: dc=master,dc=net dc: master objectClass: top objectClass: dcObject objectClass: organization o: Annuaire LDAP Master #Province du Adamaoua dn: ou=adamaoua,dc=master,dc=net objectClass: top objectClass: organizationalunit ou: adamaoua #Province du Centre dn: ou=centre,dc=master,dc=net objectClass: top objectClass: organizationalunit ou: centre #Province du Littoral dn: ou=littoral,dc=master,dc=net objectClass: top objectClass: organizationalunit ou: littoral #Province du Est dn: ou=est,dc=master,dc=net objectClass: top objectClass: organizationalunit ou: est #Province du Ouest dn: ou=ouest,dc=master,dc=net objectClass: top objectClass: organizationalunit ou: ouest #Province du Sud-ouest dn: ou=sud-ouest,dc=master,dc=net objectClass: top objectClass: organizationalunit ou: sud-ouest #Province du Nord-ouest dn: ou=nord-ouest,dc=master,dc=net objectClass: top objectClass: organizationalunit ou: nord-ouest #Province du Nord dn: ou=nord,dc=master,dc=net objectClass: top objectClass: organizationalunit ou: nord #Province du Extreme-nord dn: ou=extreme-nord,dc=master,dc=net objectClass: top objectClass: organizationalunit ou: extreme-nord #Province du Sud dn: ou=sud,dc=master,dc=net objectClass: top objectClass: organizationalunit ou: sud Pour ajouter l'enregistrement il faut utiliser la commande ldapadd qui necessite une authentification. ldapadd -x -D "description du dn de l'administrateur" -W -f nom-du-fichier-ldif Dans notre cas on aura concretement: [root@dany openldap]# ldapadd -x -c -D "cn=Manager,dc=master,dc=net» -W -f base.ldif Enter LDAP Password: adding new entry "dc=master,dc=net" adding new entry "ou=adamaoua,dc=master,dc=net" adding new entry "ou=est,dc=master,dc=net" adding new entry "ou=ouest,dc=master,dc=net" adding new entry "ou=sud-ouest,dc=master,dc=net" adding new entry "ou=nord-ouest,dc=master,dc=net" adding new entry "ou=nord,dc=master,dc=net" adding new entry "ou=extreme-nord,dc=master,dc=net" adding new entry "ou=sud,dc=master,dc=net" [root@dany openldap]# A présent il faut vérifier tout ça. On va utiliser la fonction ldapserach [root@dany projet]# ldapsearch -x -b 'dc=master,dc=net' '(objectclass=*)' # extended LDIF # # LDAPv3 # base <dc=master,dc=net> with scope sub # filter: (objectclass=*) # requesting: ALL # master.net dn: dc=master,dc=net objectClass: top objectClass: dcObject objectClass: organization dc: master o: masterLDAP # adamaoua, master.net dn: ou=adamaoua,dc=master,dc=net objectClass: top objectClass: organizationalunit ou: adamaoua # centre, master.net dn: ou=centre,dc=master,dc=net objectClass: top objectClass: organizationalunit ou: centre # littoral, master.net dn: ou=littoral,dc=master,dc=net objectClass: top objectClass: organizationalunit ou: littoral # est, master.net dn: ou=est,dc=master,dc=net objectClass: top objectClass: organizationalunit ou: est # ouest, master.net dn: ou=ouest,dc=master,dc=net objectClass: top objectClass: organizationalunit ou: ouest # sud-ouest, master.net dn: ou=sud-ouest,dc=master,dc=net objectClass: top objectClass: organizationalunit ou: sud-ouest # nord-ouest, master.net dn: ou=nord-ouest,dc=master,dc=net objectClass: top objectClass: organizationalunit ou: nord-ouest # nord, master.net dn: ou=nord,dc=master,dc=net objectClass: top objectClass: organizationalunit ou: nord # extreme-nord, master.net dn: ou=extreme-nord,dc=master,dc=net objectClass: top objectClass: organizationalunit ou: extreme-nord # sud, master.net dn: ou=sud,dc=master,dc=net objectClass: top objectClass: organizationalunit ou: sud # search result search: 2 result: 0 Success # numResponses: 13 # numEntries: 11 [root@dany projet]# |
|