LP ASRALL Outils Logiciels Libres LDAP, CMS et Haute Disponibilitée Auteurs : Rémi Jachniewicz, Julien Lacava, Gatien Gaspard, Romain Gegout, Benoit Henryon 20 mars 2009
Table des matières I LDAP 3 0.1 Installation du serveur openldap........................ 4 0.2 Inspection des schémas............................... 4 0.3 Configuration du serveur.............................. 4 0.4 Création du DIT.................................. 4 0.5 Démarrage du serveur............................... 6 0.6 Insertion des données dans l annuaire....................... 6 II Drupal 7 1 Guide d installation : 8 2 Guide d administration : 8 2.1 Configurer LDAP.................................. 8 2.2 Gestion des groupes LDAP............................. 9 2.3 Ajout de modules à Drupal............................. 9 2.4 Prise en main.................................... 9 3 Évaluation des fonctionnalités : 9 3.1 Gestion du Versionning............................... 9 III Haute Disponibilité 11 4 LVS 12 5 Heartbeat 13 6 Zabbix 14 7 Mon 14 8 Mysql 15 2
Première partie LDAP 3
0.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 0.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. 0.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 0.4 Création du DIT 4
Fichier dit.ldif : #Base DN (existe déjà...) #dn: dc=asrall,dc=com #objectclass: top #objectclass: dcobject #objectclass: organization #dc: asrall #o: asrall # OU NANCY dn: ou=nancy,dc=asrall,dc=com objectclass: top objectclass: organizationalunit ou: NANCY # OU TOULOUSE dn: ou=toulouse,dc=asrall,dc=com objectclass: top objectclass: organizationalunit ou: TOULOUSE # OU Groups #dn: ou=groups,ou=nancy,dc=asrall,dc=com #objectclass: top #objectclass: groupofnames #member: #ou: Groups # OU Profs dn: ou=profs,ou=nancy,dc=asrall,dc=com objectclass: top objectclass: organizationalunit ou: Profs # OU Etudiants NANCY dn: ou=etudiants,ou=nancy,dc=asrall,dc=com objectclass: top objectclass: organizationalunit ou: Etudiants # OU Etudiants TOULOUSE dn: ou=etudiants,ou=toulouse,dc=asrall,dc=com objectclass: top objectclass: organizationalunit ou: Etudiants 5
On crée un DIT avec : sudo slapadd -l./dit.ldif On vérifie : sudo slapcat 0.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 0.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 6
Deuxième partie Drupal 7
1 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) 2 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 2.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. 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 8
UserName attribute : cn Email attribute : mail 2.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 2.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 2.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. 3 É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. 3.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 9
contenant plusieurs revisions. 10
Troisième partie Haute Disponibilité 11
4 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 : 12
/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 : 5 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 13
6 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 Voici le menu pour ajouter une machine. Il faut préciser son nom, son adresse IP, son statut, 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 7 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 14
alertafter 10m <= alert après n minutes \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 8 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 ; Nous allons maintenant bloquer la table qui nous intéresse : USE drupal; FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; 15
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 On rédemarre Mysql : /etc/init.d/mysql restart Ensuite on lance Mysql pour les derniers réglages : 16
mysql -u root -p On stoppe le mode esclave : 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). 17
Fig. 1: Ajout d une machine Fig. 2: Ajout d un graphique 18