LP ASRALL Outils Logiciels Libres LDAP, CMS et Haute Disponibilitée Auteurs : Rémi Jachniewicz, Julien Lacava, Gatien Gaspard, Romain Gegout, Benoit Henryon 23 mars 2009
Table des matières I LDAP 4 1 Installation du serveur openldap 5 2 Inspection des schémas 5 3 Configuration du serveur 5 4 Création du DIT 5 5 Démarrage du serveur 6 6 Insertion des données dans l annuaire 6 7 Recherche d informations 6 7.1 afficher les valeurs de tous les attributs de tous les étudiants et de tous les profs 6 7.2 afficher les noms des attributs cn, description et telephonenumber des étudiants de NANCY..................................... 7 7.3 afficher les valeurs de l attribut mail des étudiants qui ont un title....... 8 7.4 afficher les valeurs de tous les attributs des étudiants dont le sn commence par la lettre M et qui n ont pas de title........................ 9 7.5 afficher les valeurs de tous les attributs opérationnels et non opérationnels de tous les étudiants.................................. 10 7.6 afficher les membres du Groupe 2......................... 10 7.7 afficher les valeurs des attributs cn des Administrateurs............. 11 7.8 afficher les informations relatives à l annuaire en interrogeant l objet rootdse 11 7.9 afficher les informations relatives aux schémas utilisés par l annuaire en interrogeant l objet subschemasubentry........................ 12 7.10 Lister tous les étudiants (avec phpldapadmin).................. 13 7.11 liste des étudiants dont le nom commence par M (avec phpldapadmin).... 14 7.12 liste des étudiants du group ASRALL2 (avec phpldapadmin).......... 15 7.13 Lister tout les étudiants (via navigateur)..................... 16 7.14 lister les mails des étudiants qui ont un title (via navigateur).......... 17 7.15 lister les attributs des étudiants dont le nom commence par M (via navigateur) 18 7.16 recherche les mails des étudiants qui ont un titre au format ldif......... 18 7.17 Refaire une recherche en testant le paramètre z de ldapsearch (limitez à 12 entrées maximales).................................. 19 7.18 Refaire une recherche en testant le paramètre S de ldapsearch. Comment sont affichées les résultats par rapport à une recherche sans paramètre S?..... 20 8 Journalisation 21 9 Modifications de données existantes 22 9.1 Ajouter l attribut departmentnumber à 4 étudiants de NANCY de votre choix. 22 2
9.2 Supprimer l attribut description à 3 profs de TOULOUSE de votre choix... 22 9.3 Modifier les attributs mail et telephonenumber de 3 profs de votre choix... 23 9.4 Supprimer les entrées de 2 étudiants de TOULOUSE et celle d un prof de NANCY....................................... 23 9.5 Déplacer un étudiant de TOULOUSE vers les profs de NANCY........ 23 9.6 Renommer une étudiante en changeant son attribut cn en conservant l ancien cn (par exemple si elle a changé de nom en se mariant et qu elle veut quand même voir apparaître son nom de jeune fille)................... 23 9.7 Supprimer un des étudiants du groupe Utilisateurs................ 23 10 Mise en place du partitionnement 23 11 Mise en place de la réplication 23 12 Mise en place des ACL 23 II Drupal 24 13 Guide d installation : 24 14 Guide d administration : 24 14.1 Configurer LDAP.................................. 24 14.2 Gestion des groupes LDAP............................. 25 14.3 Ajout de modules à Drupal............................. 25 14.4 Prise en main.................................... 25 15 Évaluation des fonctionnalités : 25 15.1 Gestion du Versionning............................... 26 III Haute Disponibilité 27 16 LVS 28 17 Heartbeat 29 18 Zabbix 30 19 Mon 33 20 Mysql 34 21 Monitoring 36 3
Première partie LDAP 4
1 Installation du serveur openldap Voici les options telles que configurée lors de l installation : sudo apt-get install slapd ldap-utils mot de passe admin : admin sudo dpkg-reconfigure ommetre config -> non nom de domaine -> asrall.com nom organisation -> asrallssh mot de passe admin -> admin module de base de donnees -> hdb supprimer bdd autoriser ldapv2 2 Inspection des schémas Les classes filles de personnes sont : organizationalperson et residentialperson Mettre le tableau ici Les classes héritent des attributs parents obligatoires, c est pourquoi par exemple l attribut sn ou encore cn n est pas redéclaré dans les autres classes. 3 Configuration du serveur Création d un utilisateur : sudo slappasswd -h MD5 // Récupération du hash MD5 placer le résultat dans le fichier /etc/ldap/slapd.conf : rootdn cn=manager,dc=asrall,dc=com rootpw SSHAyCcwfMW2zG5iCiTEh8ZogGWtkf0qpPxr 4 Création du DIT 5
Fichier dit.ldif : On crée un DIT avec : sudo slapadd -l./dit.ldif On vérifie : sudo slapcat 5 Démarrage du serveur Démarrer le serveur en forçant un niveau de debug de 5 et en gardant les options par défaut (ne lancez pas le serveur en tâche de fond en ajoutant un & à la fin de la ligne de commande pour pouvoir voir ce qu il retournera) Il existe 14 loglevel possibles (cumulables entre eux) (voir page 2 Tutoriel) Pour choisir le loglevel il y a 2 possibilités : -éditer loglevel dans slapd.conf -soit en ligne de commandes au lancement de ldap sudo /usr/sbin/slapd -d 5 // 5 pour loglevel 5 Vérifier que le process id du demon slapd est bien contenu dans le fichier pidfile en faisant un cat du fichier pidfile. Le fichier pidfile = /var/run/slapd/slapd.pid cat slapd.pid -> 5744 Le fichier pidfile = /var/run/slapd/slapd.args cat slapd.args -> /usr/sbin/slapd -d 5 start 6 Insertion des données dans l annuaire ldapadd -f asrall.ldif -x -W -D cn=manager,dc=asrall,dc=com ldapadd -f etudiant.ldif insertion de données via phpldapadmin : installation : sudo apt-get install phpldapadmin modification de /etc/php5/apache2/php.ini : memory limit = 50M acces a l interface : http ://adresse serveur/p test 7 Recherche d informations 7.1 afficher les valeurs de tous les attributs de tous les étudiants et de tous les profs valeurs de tous les attributs de tous les étudiants : ldapsearch -x -b ou=etudiants,ou=nancy,dc=asr -s sub * 6
# Etudiants, NANCY, asrall.com dn: ou=etudiants,ou=nancy,dc=asrall,dc=com # g.gaspard, Etudiants, NANCY, asrall.com dn: cn=g.gaspard,ou=etudiants,ou=nancy,dc=asrall,dc=com (...) # r.jachniewicz, Etudiants, NANCY, asrall.com dn: cn=r.jachniewicz,ou=etudiants,ou=nancy,dc=asrall,dc=com # b.henryon, Etudiants, NANCY, asrall.com dn: cn=b.henryon,ou=etudiants,ou=nancy,dc=asrall,dc=com valeurs de tous les attributs de tous les profs : ldapsearch -x -b ou=profs,ou=nancy,dc=asrall,dc=co -s sub * # extended LDIF # # LDAPv3 # base <ou=profs,ou=nancy,dc=asrall,dc=com> with scope subtree # filter: (objectclass=*) # requesting: Desktop mod # # Profs, NANCY, asrall.com dn: ou=profs,ou=nancy,dc=asrall,dc=com (...) # m.simon, Profs, NANCY, asrall.com dn: cn=m.simon,ou=profs,ou=nancy,dc=asrall,dc=com 7.2 afficher les noms des attributs cn, description et telephonenumber des étudiants de NANCY ldapsearch -x -b ou=etudiants,ou=nancy,dc=asrall,dc=com -s one cn description telephonenumber # extended LDIF # # LDAPv3 # base <ou=etudiants,ou=nancy,dc=asrall,dc=com> with scope onelevel # filter: (objectclass=*) # requesting: cn description telephonenumber # 7
# g.gaspard, Etudiants, NANCY, asrall.com dn: cn=g.gaspard,ou=etudiants,ou=nancy,dc=asrall,dc=com cn: g.gaspard description: Gatien Gaspard telephonenumber: 0000000000 (...) # b.henryon, Etudiants, NANCY, asrall.com dn: cn=b.henryon,ou=etudiants,ou=nancy,dc=asrall,dc=com cn: b.henryon description: Benoit Henryon telephonenumber: 0000000000 # search result search: 2 result: 0 Success # numresponses: 27 # numentries: 26 7.3 afficher les valeurs de l attribut mail des étudiants qui ont un title ldapsearch -x -b ou=etudiants,ou=nancy,dc=asrall,dc=com -s one (title=*) mail # extended LDIF # # LDAPv3 # base <ou=etudiants,ou=nancy,dc=asrall,dc=com> with scope onelevel # filter: title=monsieur # requesting: mail # # g.gaspard, Etudiants, NANCY, asrall.com dn: cn=g.gaspard,ou=etudiants,ou=nancy,dc=asrall,dc=com mail: gatien.gaspard@etudiants-univ-nancy2.fr # j.lacava, Etudiants, NANCY, asrall.com dn: cn=j.lacava,ou=etudiants,ou=nancy,dc=asrall,dc=com mail: julien.lacava@etudiants-univ-nancy2.fr (...) # j.leemans, Etudiants, NANCY, asrall.com dn: cn=j.leemans,ou=etudiants,ou=nancy,dc=asrall,dc=com 8
mail: jerome.leemans@etudiants-univ-nancy2.fr # l.dominguez, Etudiants, NANCY, asrall.com dn: cn=l.dominguez,ou=etudiants,ou=nancy,dc=asrall,dc=com mail: luis.dominguez@etudiants-univ-nancy2.fr # search result search: 2 result: 0 Success # numresponses: 7 # numentries: 6 7.4 afficher les valeurs de tous les attributs des étudiants dont le sn commence par la lettre M et qui n ont pas de title * ldapsearch -x -b ou=etudiants,ou=nancy,dc=asrall,dc=com -s one (&(sn=m*)(!(title=*))) # extended LDIF # # LDAPv3 # base <ou=etudiants,ou=nancy,dc=asrall,dc=com> with scope onelevel # filter: (\&(sn=m*)(!(title=*))) # requesting: Desktop mod # # c.mathieu, Etudiants, NANCY, asrall.com dn: cn=c.mathieu,ou=etudiants,ou=nancy,dc=asrall,dc=com # h.meloni, Etudiants, NANCY, asrall.com dn: cn=h.meloni,ou=etudiants,ou=nancy,dc=asrall,dc=com # v.meslard, Etudiants, NANCY, asrall.com dn: cn=v.meslard,ou=etudiants,ou=nancy,dc=asrall,dc=com # search result search: 2 result: 0 Success # numresponses: 4 # numentries: 3 9
7.5 afficher les valeurs de tous les attributs opérationnels et non opérationnels de tous les étudiants ldapsearch -x -b ou=etudiants,ou=nancy,dc=asrall,dc=com -s one + # g.gaspard, Etudiants, NANCY, asrall.com dn: cn=g.gaspard,ou=etudiants,ou=nancy,dc=asrall,dc=com structuralobjectclass: inetorgperson entryuuid: 1b04eb94-a8a3-102d-8a81-6318b750a939 creatorsname: cn=manager,dc=asrall,dc=com modifiersname: cn=manager,dc=asrall,dc=com createtimestamp: 20090319072711Z modifytimestamp: 20090319072711Z entrycsn: 20090319072711Z#000000#00#000000 entrydn: cn=g.gaspard,ou=etudiants,ou=nancy,dc=asrall,dc=com subschemasubentry: cn=subschema hassubordinates: FALSE (...) # b.henryon, Etudiants, NANCY, asrall.com dn: cn=b.henryon,ou=etudiants,ou=nancy,dc=asrall,dc=com structuralobjectclass: inetorgperson entryuuid: 1b10214e-a8a3-102d-8a9a-6318b750a939 creatorsname: cn=manager,dc=asrall,dc=com modifiersname: cn=manager,dc=asrall,dc=com createtimestamp: 20090319072711Z modifytimestamp: 20090319072711Z entrycsn: 20090319072711Z#000019#00#000000 entrydn: cn=b.henryon,ou=etudiants,ou=nancy,dc=asrall,dc=com subschemasubentry: cn=subschema hassubordinates: FALSE 7.6 afficher les membres du Groupe 2 ldapsearch -x -b ou=group,ou=nancy,dc=asrall,dc=com -s one cn=asrall2 # ASRALL2, Groups, NANCY, asrall.com dn: cn=asrall2,ou=groups,ou=nancy,dc=asrall,dc=com objectclass: top objectclass: groupofuniquenames cn: ASRALL2 uniquemember: cn=f.chassagne,ou=etudiants,ou=nancy,dc=asrall,dc=com 10
REMARQUE : Pour cette commande, on a pas l affichage souhaité, mais on peut voir uniquemember : cn=f.chassagne,ou=etudiants,ou=nancy,dc=asrall,dc=com sur la dernière ligne. 7.7 afficher les valeurs des attributs cn des Administrateurs ldapsearch -x -b cn=administrateurs,ou=groups,ou=nancy,dc=asrall,dc=com # ADMINISTRATEURS, Groups, NANCY, asrall.com dn: cn=administrateurs,ou=groups,ou=nancy,dc=asrall,dc=com objectclass: top objectclass: groupofuniquenames cn: ADMINISTRATEURS uniquemember: cn=g.gaspard,ou=etudiants,ou=nancy,dc=asrall,dc=com uniquemember: cn=p.dosch,ou=profs,ou=nancy,dc=asrall,dc=com 7.8 afficher les informations relatives à l annuaire en interrogeant l objet rootdse ldapsearch -L -x -b -s base # dn: structuralobjectclass: OpenLDAProotDSE configcontext: cn=config namingcontexts: dc=asrall,dc=com supportedcontrol: 2.16.840.1.113730.3.4.18 supportedcontrol: 2.16.840.1.113730.3.4.2 supportedcontrol: 1.3.6.1.4.1.4203.1.10.1 supportedcontrol: 1.2.840.113556.1.4.319 supportedcontrol: 1.2.826.0.1.334810.2.3 supportedcontrol: 1.2.826.0.1.3344810.2.3 supportedcontrol: 1.3.6.1.1.13.2 supportedcontrol: 1.3.6.1.1.13.1 supportedcontrol: 1.3.6.1.1.12 supportedextension: 1.3.6.1.4.1.4203.1.11.1 supportedextension: 1.3.6.1.4.1.4203.1.11.3 supportedfeatures: 1.3.6.1.1.14 supportedfeatures: 1.3.6.1.4.1.4203.1.5.1 supportedfeatures: 1.3.6.1.4.1.4203.1.5.2 supportedfeatures: 1.3.6.1.4.1.4203.1.5.3 supportedfeatures: 1.3.6.1.4.1.4203.1.5.4 supportedfeatures: 1.3.6.1.4.1.4203.1.5.5 supportedldapversion: 3 entrydn: subschemasubentry: cn=subschema 11
7.9 afficher les informations relatives aux schémas utilisés par l annuaire en interrogeant l objet subschemasubentry ldapsearch -L -x -b cn=subschema -s base + # Subschema dn: cn=subschema structuralobjectclass: subentry createtimestamp: 20090321091408Z modifytimestamp: 20090321091408Z ldapsyntaxes: ( 1.3.6.1.1.16.1 DESC UUID ) ldapsyntaxes: ( 1.3.6.1.1.1.0.1 DESC RFC2307 Boot Parameter ) ldapsyntaxes: ( 1.3.6.1.1.1.0.0 DESC RFC2307 NIS Netgroup Triple ) ldapsyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.52 DESC Telex Number ) ldapsyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.50 DESC Telephone Number ) ldapsyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.49 DESC Supported Algorithm X-BIN ARY-TRANSFER-REQUIRED TRUE X-NOT-HUMAN-READABLE TRUE ) ldapsyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.45 DESC SubtreeSpecification ) ldapsyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.44 DESC Printable String ) ldapsyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.41 DESC Postal Address ) ldapsyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.40 DESC Octet String ) ldapsyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.39 DESC Other Mailbox ) ldapsyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.38 DESC OID ) ldapsyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.36 DESC Numeric String ) ldapsyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.34 DESC Name And Optional UID ) ldapsyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.28 DESC JPEG X-NOT-HUMAN-READABLE TRUE ) ldapsyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.27 DESC Integer ) ldapsyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.26 DESC IA5 String ) ldapsyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.24 DESC Generalized Time ) ldapsyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.22 DESC Facsimile Telephone Number ) ldapsyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.15 DESC Directory String ) ldapsyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.14 DESC Delivery Method ) REMARQUE : Cette commande est très longues, donc je n ai pas mis l intégralité. - 7.2 - Pour 3 recherches de votre choix, utiliser : 7.2un client LDAP comme PhpLDAPAdmin 12
7.10 Lister tous les étudiants (avec phpldapadmin) 13
7.11 liste des étudiants dont le nom commence par M (avec phpldapadmin) 14
7.12 liste des étudiants du group ASRALL2 (avec phpldapadmin) Pour les 3 premières recherches, écrivez l URL LDAP correspondante 15
7.13 Lister tout les étudiants (via navigateur) ldap ://192.168.10.11 :389/ou=Etudiants,ou=NANCY,dc=asrall,dc=com?*?sub?(cn=*) 16
7.14 lister les mails des étudiants qui ont un title (via navigateur) ldap ://192.168.10.11 :389/ou=Etudiants,ou=NANCY,dc=asrall,dc=com?mail?sub?(title=*) 17
7.15 lister les attributs des étudiants dont le nom commence par M (via navigateur) ldap ://192.168.10.11 :389/ou=Etudiants,ou=NANCY,dc=asrall,dc=com?*?sub?(sn=M*) - 7.3-7.16 recherche les mails des étudiants qui ont un titre au format ldif ldapsearch -LLL -x -b ou=etudiants,ou=nancy,dc=asrall,dc=com -s one title= * mail 18
dn: cn=g.gaspard,ou=etudiants,ou=nancy,dc=asrall,dc=com mail: gatien.gaspard@etudiants-univ-nancy2.fr dn: cn=j.lacava,ou=etudiants,ou=nancy,dc=asrall,dc=com mail: julien.lacava@etudiants-univ-nancy2.fr dn: cn=d.rard,ou=etudiants,ou=nancy,dc=asrall,dc=com mail: david.rard@etudiants-univ-nancy2.fr dn: cn=f.chassagne,ou=etudiants,ou=nancy,dc=asrall,dc=com mail: felix.chassagne@etudiants-univ-nancy2.fr dn: cn=j.leemans,ou=etudiants,ou=nancy,dc=asrall,dc=com mail: jerome.leemans@etudiants-univ-nancy2.fr dn: cn=l.dominguez,ou=etudiants,ou=nancy,dc=asrall,dc=com mail: luis.dominguez@etudiants-univ-nancy2.fr 7.17 Refaire une recherche en testant le paramètre z de ldapsearch (limitez à 12 entrées maximales). Que retourne le serveur si jamais il y a plus de 12 entrées correspondant au filtre de recherche? ldapsearch -z 10 -x -b ou=etudiants,ou=nancy,dc=asrall,dc=com -s one title= * mail # extended LDIF # # LDAPv3 # base <ou=etudiants,ou=nancy,dc=asrall,dc=com> with scope onelevel # filter: title=monsieur # requesting: mail # # g.gaspard, Etudiants, NANCY, asrall.com dn: cn=g.gaspard,ou=etudiants,ou=nancy,dc=asrall,dc=com mail: gatien.gaspard@etudiants-univ-nancy2.fr (...) # l.dominguez, Etudiants, NANCY, asrall.com dn: cn=l.dominguez,ou=etudiants,ou=nancy,dc=asrall,dc=com mail: luis.dominguez@etudiants-univ-nancy2.fr # search result search: 2 19
result: 0 Success # numresponses: 7 # numentries: 6 dans le cas où on limite a une valeut inférieure au nombre réel de résultats : ldapsearch -z 3 -x -b ou=etudiants,ou=nancy,dc=asrall,dc=com -s one title= * mail # extended LDIF # # LDAPv3 # base <ou=etudiants,ou=nancy,dc=asrall,dc=com> with scope onelevel # filter: title=monsieur # requesting: mail # # g.gaspard, Etudiants, NANCY, asrall.com dn: cn=g.gaspard,ou=etudiants,ou=nancy,dc=asrall,dc=com mail: gatien.gaspard@etudiants-univ-nancy2.fr (...) # search result search: 2 result: 4 Size limit exceeded # numresponses: 4 # numentries: 3 Si jamais il y a plus d entrée que le nombre choisi, on peut remarquer le message suivant : result : 4 Size limit exceeded. 7.18 Refaire une recherche en testant le paramètre S de ldapsearch. Comment sont affichées les résultats par rapport à une recherche sans paramètre S? recherche les 3 premiers mails des étudiants et affiche par ordre alphabétique ldapsearch -S mail -z 3 -x -b ou=etudiants,ou=nancy,dc=asrall,dc=com -s one title= * mail # extended LDIF # # LDAPv3 # base <ou=etudiants,ou=nancy,dc=asrall,dc=com> with scope onelevel # filter: title=monsieur # requesting: mail 20
# # d.rard, Etudiants, NANCY, asrall.com dn: cn=d.rard,ou=etudiants,ou=nancy,dc=asrall,dc=com mail: david.rard@etudiants-univ-nancy2.fr # g.gaspard, Etudiants, NANCY, asrall.com dn: cn=g.gaspard,ou=etudiants,ou=nancy,dc=asrall,dc=com mail: gatien.gaspard@etudiants-univ-nancy2.fr # j.lacava, Etudiants, NANCY, asrall.com dn: cn=j.lacava,ou=etudiants,ou=nancy,dc=asrall,dc=com mail: julien.lacava@etudiants-univ-nancy2.fr 8 Journalisation Modifier 3 fois le niveau de debug du serveur et refaire 1 commande ldapsearch à chaque fois (debug minimum, moyen et maximum). Copiez le résultat de la recherche en précisant à quel niveau de debug cela correspond. en debug 0 - aucune info en debug 32 (traitement des filtres de recherche) on obtient une info par résultat de recherche begin get_filter PRESENT end get_filter 0 => bdb_filter_candidates AND => bdb_list_candidates 0xa0 => bdb_filter_candidates PRESENT <= bdb_filter_candidates: id=-1 first=1 last=51 <= bdb_list_candidates: id=-1 first=8 last=33 <= bdb_filter_candidates: id=-1 first=8 last=33 => test_filter PRESENT <= test_filter 6 => test_filter PRESENT <= test_filter 6 => test_filter PRESENT <= test_filter 6 => test_filter PRESENT 21
<= test_filter 6 en debug 512(statistique sur les résultats renvoyées au client) slapd starting conn=0 op=1 ENTRY dn= cn=g.gaspard,ou=etudiants,ou=nancy,dc=asrall,dc=com conn=0 op=1 EN- TRY dn= cn=j.lacava,ou=etudiants,ou=nancy,dc=asrall,dc=com conn=0 op=1 ENTRY dn= cn=d.rard,ou=etudiants,ou=nancy,dc=asrall,dc=com 9 Modifications de données existantes 9.1 Ajouter l attribut departmentnumber à 4 étudiants de NANCY de votre choix. REMARQUE : Pour toutes ces questions, j ai oublié de récupérer la réponse du serveur. Et une fois que les modifications ont été apportées, on ne peut pas les relancer. a) on cré un fichier texte modif1.txt : dn : cn=g.gaspard,ou=etudiants,ou=nancy,dc=asrall,dc=com changetype : modify add : departementnumber departementnumber : 57 dn : cn=j.lacava,ou=etudiants,ou=nancy,dc=asrall,dc=com changetype : modify add : departementnumber departementnumber : 57 dn : cn=r.gegout,ou=etudiants,ou=nancy,dc=asrall,dc=com changetype : modify add : departementnumber departementnumber : 54 dn : cn=y.baris,ou=etudiants,ou=nancy,dc=asrall,dc=com changetype : modify add : departementnumber departementnumber : 88 b) On lance l intégration de ce fichier : ldapmodify -x -D cn=manager,dc=asrall,dc=com -f modif1.txt -W 9.2 Supprimer l attribut description à 3 profs de TOULOUSE de votre choix REMARQUE : Comme, je n avais pas créé d attribut description, j ai réalisé cette question avec l atribut telephonenumber. De plus je dispose que d un seul Prof. a) on cré le fichier : dn : cn=j.hallyday,ou=profs,ou=toulouse,dc=asrall,dc=com changetype : modify delete : telephonenumber b) on lance : ldapmodify -x -D cn=manager,dc=asrall,dc=com -f modif2.txt -W 22
9.3 Modifier les attributs mail et telephonenumber de 3 profs de votre choix 9.4 Supprimer les entrées de 2 étudiants de TOULOUSE et celle d un prof de NANCY 9.5 Déplacer un étudiant de TOULOUSE vers les profs de NANCY 9.6 Renommer une étudiante en changeant son attribut cn en conservant l ancien cn (par exemple si elle a changé de nom en se mariant et qu elle veut quand même voir apparaître son nom de jeune fille) 9.7 Supprimer un des étudiants du groupe Utilisateurs 10 Mise en place du partitionnement 11 Mise en place de la réplication 12 Mise en place des ACL 23
Deuxième partie Drupal 13 Guide d installation : Téléchargement de drupal sur http://drupalfr.org/ Version intallée : Drupal6.9 Prérequis : php5, mysql, apache2, phpmyadmin, php5-gd Décompresser l archive contenant Drupal dans un répertoire accessible par Apache (/var/www/drupal par exemple). Rendre www-data propriétaire de l ensemble du CMS (chown www-data :www-data -R /var/www/drupa Renommer le fichier /var/www/drupal/sites/defaults.settings.php en settings.php Rajouter les droits d écriture à ce fichier (chmod u+w settings.php). Rajouter les droits d écriture au répertoire /var/www/drupal/sites/defaults/files (chmod u+w -R files) Créer une base de données pour Drupal. Ouvrir un navigateur à l adresse http ://ipduserveur/drupal/install.php Dans le navigateur : Remplir les informations pour la création d un utilisateur : Login : drupal MDP : drupal54 Préciser le nom de la base de données. Sauvegarder Enlever les droits d écriture sur settings.php (chmod u-w settings.php) 14 Guide d administration : Suppression de l authentification par mail lors de la création d un compte : aller dans Administer -> UserManagement -> UserSettings et décocher la case Require e-mail verification Par defaut, il y a deux types de users, anonyme et identifié. Afin de donner des droits spécifiques, il faut créer des rôles que l on pourra affecter aux utilisateurs voulus. Pour ce faire, il faut définir les permissions désirées : Administer -> UserManagement -> Roles 14.1 Configurer LDAP Pour gérer les utilisateurs depuis un serveur LDAP, il faut installer le module php5-ldap. Pour l intégration de LDAP dans Drupal, il faut y installer le module ldap integration. 24
configuration de Ldap authentication : Mixed mode. The LDAP authentication is performed only if Drupal authentication fails Disallow login and log the conflict Add server : Base DNs : dc=asrall,dc=com UserName attribute : cn Email attribute : mail 14.2 Gestion des groupes LDAP Groups exist as LDAP entries where a multivalued attribute contains the members CNs Nodes containing groups (one per line) : cn=administrateurs,ou=groups,ou=nancy,dc=asrall,dc=co Attribute holding group members : uniquemember 14.3 Ajout de modules à Drupal Copier coller le contenu d une archive contenant le module dans le répertoire /var/www/drupal/module (si celui-ci n est pas disponible par défaut) Aller sur administer->site building->modules et activer le module désiré. exemple : shoutcast : extraction dans le dossier modules activation via administer->site building->modules->shoutbox ajout du block aux pages : administer->site building->blocks->shoutbox exemple : blog : activation via administer->site building->modules->blog Ajout du support de la langue francaise : récupération de l archive contenant le français puis activation via administer->site configuration->l 14.4 Prise en main Drupal s avère extremement rapide et aisé à installer et à mettre en oeuvre. L ajout de fonctionnalité est également trés intuitif puisqu il suffit d ajouter le module dans le répertoire module de drupal et activer celui-ci via l interface d administration. 15 Évaluation des fonctionnalités : L authentification et la gestion des utilisateurs via LDAP s avére relativement simple à mettre en place. La traduction dans diverses langues également. Quant à l édition du contenu, Drupal dispose d un éditeur de texte très sommaire, il est néanmoins possible d installer un éditeur Wysiwyg via un module complémentaire. La connexion à une base de données se fait naturellement lors de l installation, drupal se charge de créer ce qu il a besoin. 25
15.1 Gestion du Versionning Créer du contenu. Modifier le contenu (en cochant la case Information sur les revisions créer une revision). La liste des revisions est accessible via le menu revisions sur les pages contenant plusieurs revisions. 26
Troisième partie Haute Disponibilité 27
16 LVS Linux Virtual Server (LVS) est une solution avancée de répartition de charge pour GNU/Linux. C est un logiciel libre commencé par Wensong Zhang en mai 1998. La mission de ce projet était de construire un serveur de haute performance pour Linux utilisant la technologie du clustering. L équilibrage de type NAT via LVS que nous allons mettre en place s appuie essentiellement sur ipvsadm qui est l outil d administration d LVS mais aussi de Ldirectord qui va s occuper de la configuration et la détection de serveurs web down. Sur le/les équilibreur(s) : Tout d abord on installe Ldirectord : sudo apt-get install ldirectord Ensuite on crée une interface virtuelle, qui sera utilisée par le client désirant visiter le site web : sudo ifconfig eth0 :virt 192.168.2.110 Configuration de Ldirectord : Les fichiers de configurations portent l extension.cf et ont pour répertoire /etc/ha.d/. Dans ce fichier il faut renseigner plusieurs éléments : virtual=192.168.2.110:80 protocol=tcp scheduler=rr real=192.168.10.91:90 masq 1 real=192.168.10.110:80 masq 1 request="test.html" receive="200" Virtual renseigne sur l adresse ip virtuelle qui sera accédée par le client. Protocol permettant de définir le type de protocole utilisé, ici tcp car http est basé sur celui-ci. Scheduler correspond a l agorithme utilisé pour l équilibrage, rr signifiant Round Robin. real liste les serveurs constituant la pool avec l adresse ip de chacuns d eux, sont type de forward et le poid.le type masq (pour masquerade) correspond au LVS de type NAT et le poid permet de définir une priorité de l aiguillage. Request défini le nom de la resource qui sera accedée pour vérifier que les serveurs web sont toujours disponibles. Receive contient la valeur que devra contenir la resource pour être considéré comme disponible. Sur les serveurs web : Il y a deux petits points à mettre en place sur les serveurs : La première consiste à changer la passerelle actuelle par l ip de l équilibreur : 28
/sbin/route add default gw 192.168.10.221 Ensuite il faut créer à la racine le fichier test.html et y mettre comme contenu 200. Lancement : En mode débug : En mode normal : 17 Heartbeat /usr/sbin/ldirectord -d /etc/ha.d/www.cf start /etc/init.d/ldirectord start La haute disponibilité va être assurée par heartbeat, celui-ci doit être installé sur chacun des équilibreurs. On installe heartbeat : sudo apt-get install heartbeat Configuration : Il y a 3 fichiers à configurer pour qu heartbeat fonctionne comme désiré : /etc/ha.d/ha.cf : bcast eth0 <= Interface utilisée pour le battement debugfile /var/log/ha-debug <= fichier de débug logfile /var/log/ha-log <= fichier de log logfacility local0 <= Log utilisant syslog-ng keepalive 2 <= temps (en s) entre chaque battement deadtime 10 <= temps au bout du quel on considère une machine morte warntime 6 <= on considère que la machine met du temps à répondre après 6s initdead 60 <= temps avant de lancer le premier battement au démarrage udpport 694 <= port utilisé pour l envoi du battement node equ1 <= déclaration des machines devant ^etre surveillées node equ2 auto_failback on <= réintegre une machine qui repasse en état de marche /etc/had.d/haresources : /etc/ha.d/authkeys : equ1 Ipaddr :: 192.168.10.221 } {{ } } {{ } Node Ip virt à attribuer auth 1 <= on utilise la méthode d authentification 1 1 sha1 CleSecrete <= Numéro de méthode, Type de cryptage et clé Ensuite il ne nous reste plus qu a lancer heartbeat sur les machines : /etc/init.d/heartbeat start 29
18 Zabbix Prérequis avant installation : Il faut disposer d un serveur Web gérant le PHP avec une base de données MySql ou PostgreSQL. Installation : Il y a trois paquet à installer : zabbix-server-mysql pour utiliser une base MySQL ou zabbix-server-pgsql pour utiliser une base PostGRES zabbix-frontend-php : l interface PHP pour le serveur zabbix-agent : pour pouvoir monitorer le serveur lui-même Dans php.ini, il faut changer quelques options : L option max execution time qui fixe le temps maximal d exécution d un script, en secondes doit être mise à 600 pour l installation de zabbix. Il y a aussi l option date.timezone qui doit être renseigner pour pouvoir afficher un temps correct sur le frontend en php. La configuration de l agent est très simple car il y a trois directives à renseigner dans les fichiers zabbix agent.conf zabbi agentd.conf. Dans le premier il faut préciser l adresse du serveur Server=localhost. Dans l autre fichier, il faut renseigner deux champs. L un précisant aussi l adresse du serveur et l autre indiquant le nom de machine qui sera utilisé par le frontend : Server=127.0.0.1 et Hostname=ZabbixServ. Pour ajouter une machine : Menu Configuration -> Hotes -> Créer un h^ote Fig. 1: Ajout d une machine Voici le menu pour ajouter une machine. Il faut préciser son nom, son adresse IP, son statut, 30
et pour pouvoir monitorer des services, par exemples snmp, il faut lui ajouter le template snmp (il faut bien entendu que snmp soit installer sur cette machine). Pour afficher l occupation du disque par exemple : Menu Configuration -> Graphiques -> Création de graphiques Fig. 2: Ajout d un graphique Comme on le voit sur l image, on peut selectionner différents items pour la machine. Ici, on selectionne Free disk space on /. On peut choisir la couleur afficher sur le graphique, le style de dessin affiché... Pour voir par exemple qu un serveur Web est tombé : Menu Configuration -> Actions -> Créer une action 31
Fig. 3: Ajout d un graphique Ici, on peut choisir différent services à monitorer. On clique sur le nom du service pour le monitorer. Dans le menu Métriques -> Evennements, on peut voir le status des services monitorer ainsi que les actions liées au changement de status de certains services. Par exemple si on veut envoyer un mail à l administrateur quand le serveur web d une machine tombe, il faut configurer zabbix de la manière suivante : Menu Administration -> Types Media -> Email Donc dans l onglet Administration / Media Type) Fig. 4: Configuration mail SMTP server : l adresse IP ou le nom DNS de ton serveur de mail (SMTP) exemple : 32
smtp.free.fr ici localhost SMTP helo : c est la chaine qu il va renvoyer au serveur pour s identifier ; en général ce n est pas très important ; par exemple zabbixserver ici localhost SMTP email : Email avec laquelle les mails sont envoyé (le From ) ; exemple zabbixserver@free.fr ici julien@xionis.home Ensuite, il faut associer un media Email (une adresse Email de destination) à l utilisateur Zabbix qui va envoyer les mail. La configuration des emails à envoyer se passe dans le menu "Configuration -> Actions qui est décrit au dessus. Fig. 5: Configuration mail Ici on voit que si Apache tombe sur le serveur ldap, alors un mail sera envoyé à l utilisateur Admin dont l adresse a été précisé dans le menu Administration -> Utilisateurs. 19 Mon Installation de mon via : sudo apt-get install mon Configuration pour surveillance du service http et envoi de mail en conséquent : hostgroup local localhost equ1 <=définition des h^otes watch local <= surveillance du groupe local service http <= surveillance http monitor http.monitor interval 2m <= On vérifire toutes les 2 min depend SELF::fping period wd {Sun-Sat} <= période de vérification alert mail.alert remi@localhost <= envoi de mail en cas de soucis alertafter 10m <= alert après n minutes 33
\begin{verbatim} On recharge la configuration : \begin{center}sudo /etc/init.d/mon reload\end{center} En utilisant la command monshow on peut vérifier l état actuel des éléments surveillés \begin{verbatim} GROUP SERVICE STATUS LAST NEXT ALERTS SUMMARY D local http - 9s 0s none 127.0.0.1 equ1 Ici pas de soucis avec http. Maintenant arretons Apache : sudo /etc/init.d/apache2 stop Après quelques secondes en retestant monshow on s aperçoit qu il y a un problème (FAIL) : D local http FAIL 2s 0s none 127.0.0.1 equ1 Redémarrage en cas d Apache désactivé : En cas d un apache qui venait à tomber, il peut être interessant de tenter de relancer celui-ci avec mon. Pour celà nous allons créer un script dans /etc/ha.d/mon/alert.d/ que nous nommeront Apache UpDown. Celui-ci contient : 20 Mysql Configuration du maîte Il faut tout d abord éditer le fichier /etc/mysql/my.cnf. L étape consistant a activer l écoute autre que sur localhost via : #skip-networking #bind-address = 127.0.0.1 Maintenant il est nécessaire d indiquer à MySQL pour quel base les logs seront écrits (ces logs seront utilisé par le serveur esclave afin de détécter des changements). On lui indique le chemin des log et nous spécifions que le serveur jouera le rôle de maître : log-bin = /var/log/mysql/mysql-bin.log binlog-do-db=drupal server-id=1 Ensuite on redémarre Mysql : /etc/init.d/mysql restart Nous allons maintenant créer un utilisateur avec les droits de réplications via mysql On attibue les droits : mysql -u root -p GRANT REPLICATION SLAVE ON *.* TO serv esclace @ % IDENTIFIED BY motdepass ;FLUSH PRIVILEGES ; 34
Nous allons maintenant bloquer la table qui nous intéresse : USE drupal; FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; Ce qui devrait nous afficher : +---------------+----------+--------------+------------------+ File Position Binlog_do_db Binlog_ignore_db +---------------+----------+--------------+------------------+ mysql-bin.006 183 drupal +---------------+----------+--------------+------------------+ 1 row in set (0.00 sec) Il est nécessaire de garder ces informations pour le serveur esclave. On crée maintenant un dump de la table : mysqldump -u root -p opt drupal drupal.sql Une fois le dump établi nous pouvons débloquer la base : mysql -u root -p Enter password: UNLOCK TABLES; quit; La configuration du maître est désormais terminée. Configuration de l esclave : On crée tout d abord la base à répliquer : mysql -u root -p Enter password: CREATE DATABASE drupal; quit; On importe ensuite la base précedement copiée : mysql -u root -p drupal drupal.sql Il faut maintenant indiquer à Mysql qu il sera l esclave, que le maitre est 192.168.0.100 et que la base se nomme drupal. Pour celà on modifie le fichier /etc/mysql/my.cnf server-id=2 master-host=192.168.0.100 master-user=esclave master-password=motdepasse master-connect-retry=60 replicate-do-db=drupal 35
On rédemarre Mysql : /etc/init.d/mysql restart Ensuite on lance Mysql pour les derniers réglages : On stoppe le mode esclave : mysql -u root -p SLAVE STOP ; CHANGE MASTER TO MASTER HOST= 192.168.0.100, MASTER USER= drupal, MASTER PASSWORD= motdepass, MASTER LOG FILE= mysql-bin.006, MASTER LOG POS=183 ; MASTER HOST is the IP address or hostname of the master (in this example it is 192.168.0.100). MASTER USER is the user we granted replication privileges on the master. MASTER PASSWORD is the password of MASTER USER on the master. MASTER LOG FILE is the file MySQL gave back when you ran SHOW MASTER STATUS ; on the master. MASTER LOG POS is the position MySQL gave back when you ran SHOW MASTER STATUS ; on the master. On relance le mode esclave : SLAVE START ; On constate que la réplication est bien opérationnelle (vérification via phpmyadmin). 21 Monitoring Feedback n étant plus maintenu nous avons décidé de tester une autre solution nous eprmettant de suivre le status du cluster. MRTG et RRDTOOL sont les leaders dans ce domaine. Néanmoins la mise en place/configuration n est pas rapide. C est pourquoi des outils plus spécifiques doivent être utilisés. Après plusieurs recherches Ganglia semble tout indiqués. Après quelques tests il a été décidé de choisir Ganglia de part ses nombreux graphiques fournis mais aussi le détail des évenements pas heure (sur munin on ne peut zoomer au délà des jours). Installation/Configuration Ganglia se décompose en deux parties, un serveur et un client. Le serveur est à installer sur chaque machine à surveiller au travers de la commande : apt-get install gmetad Puis il faut configurer divers éléments dans le fichier /etc/gmetad.conf : Les serveurs à questionner : 36
data source Mon Cluster localhost 192.168.10.222 192.168.10.91 192.168.10.110 Le nom de la grid : gridname ASRALL Il est ensuite nécessaire d installer un client qui va s occuper de récupérer toutes les informations sur les différents serveurs : apt-get install ganglia-monitor On attribue le nom de la grid via le fichier de configuration /etc/gmond.conf : Name ASRALL Ganglia est packagé par défaut mais ne contient pas le frontend web, pour celà il suffit de télécharger le tar.gz sur le site officiel et copier le répertoire web à l emplacement du serveur web. 37