11

Click here to load reader

Installation et configuration d’Apache sous Linux …maurise-softawre1.e-monsite.com/medias/files/apache-tp.pdf · 2012-08-09 · ... celui d’utilisateur du réseau, mais celui

  • Upload
    lamnhi

  • View
    213

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Installation et configuration d’Apache sous Linux …maurise-softawre1.e-monsite.com/medias/files/apache-tp.pdf · 2012-08-09 · ... celui d’utilisateur du réseau, mais celui

Installation et configuration d’Apachesous Linux RedHat 7.1

Pascal AUBRY – Ambroise DIASCORNIFSIC – Université de Rennes 1

Octobre 2001 – version 3.0ESAT – MSI 2ème année

Travaux pratiques (4 heures)

L’utilisation de ce document dans un but de formation de groupe, y compris dans ledomaine universitaire, est soumise à une autorisation explicite et préalable de ses auteurs.

PrésentationLe but de ce TP est d’appréhender les difficultés rencontrés par les administrateurs de sites web. Il vous permettra de voircomment on installe, configure et entretient un serveur HTTP, et de mieux comprendre à quoi correspondent les erreursrencontrées en tant qu’utilisateur.Vous n’aurez plus lors de ce TP votre rôle habituel, celui d’utilisateur du réseau, mais celui d’administrateur (avec les avantageset les inconvénients que cela représente).Afin de se concentrer sur Apache en lui-même, vous n’avez pas à installer le serveur et disposez d’un PC préinstallé muni de laconfiguration suivante :• Processeur : Intel PII 400 MHz• Mémoire : 128 Mo• Disque dur : IDE 6.4 Go (maître sur le port IDE 0)• Adaptateur réseau : 10/100 Mbts 3Com 3C509B• Lecteur CD-ROM : IDE (maître sur le port IDE 1)Les PC sont reliés au réseau de l’IFSIC.

Installation du serveurVoici la procédure d’installation des PCs de la salle de TP.L’installation de la version 7.1 de la distribution RedHat est faite via NFS. Une disquette de boot réseau (bootnet.img) permet dedémarrer l’installation et les paramètres sont les suivants :• Langage : French• Clavier : fr-latin1• Méthode d’installation : NFSOn choisit ensuite une assignation dynamique de l’adresse IP, ce qui n’est pas recommandé pour un serveur (car cela induit unedépendance vis-à-vis du serveur DHCP) mais qui sera suffisant pour le TP. Le serveur DHCP renseigne alors la machine sur lesparamètres tels que la paserelle par défaut, le serveur DNS, ...• Site web : ajax• Répertoire RedHat : /current

Configuration du disque durBien qu’installant un serveur, on choisit le type d’installation Custom system car l’installation est plus courte et encore une foissuffisante.On effectue un partitionnement automatique.Le disque est partionné de la manière suivante :• Une partition de swap de 128Mo

Page 2: Installation et configuration d’Apache sous Linux …maurise-softawre1.e-monsite.com/medias/files/apache-tp.pdf · 2012-08-09 · ... celui d’utilisateur du réseau, mais celui

• Une partition principale sur laquelle on installe le système (montage de la racine /) occupant le reste du disque, soit environ4Go. Le formatage de cette partition est fait sans contrôle des blocs défectueux (trop long).

Paramétrage de LILOOn installe LILO sans passer de paramètre au noyau, sur le Master Boot Record (MBR) du disque ;On garde l’identifiant par défaut du démarrage du système (linux).

Paramètres diversOn garde le nom de machine (i207mxx.ifsic.univ-rennes1.fr) proposé par la procédure d’installation (obtenu du serveur de nomsà partir du numéro IP renvoyé par le serveur DHCP)• Souris : Generic 3 Button Mouse (PS/2)• Pas de parefeu• Horloge : Conserver le choix proposé

UtilisateursOn ne renseigne que le mot de passe du compte super-utilisateur (ne pas créer de compte utilsateur, ceci est fait par lafinalisation de l’installation) :• Mot de passe super-utilisateur : rootmsi2La configuration des utilisateurs se termine en indiquant les paramètres suivants :• Shadow password : oui• MD5 encoding : oui• NIS : non• LDAP : non• Kerberos : non

Paquetages à installerOn sélectionne les catégories suivantes :• X-Window system• KDE• WWW-mail-news• Emacs• Poste de travail en réseau• Serveur SQL• Serveur WebSi nécessaire, on demande finalement de satisfaire les dépendances manquantes.

Création d’une disquette de démarrageOn passe cette étape.

Configuration de X-WindowBien que l’on installe en général pas d’environnement graphique sur un serveur, nous le faisons car les machines servent à la foisde serveur et de machine cliente (pour les tests). On accepte alors les choix proposés par la procédure d’installation :• ATI Mach 64• Moniteur : Dell D1025HE• Profondeur et résolution : garder le choix proposé

Première connexionOn se connecte comme super-utilisateur et on lance une fenêtre de commande pour exécuter :wget http://perso/diascorn/formation/msi2/apache/install.shchmod +x install.sh./install.shCe script rapatrie divers fichiers et les installe sur la machine pour en parfaire l’installation.Il crée également deux utilisateurs qui serviront pendant le TP :Le compte usager de test user_xx (par exemple user_04) est l’usager sur lequel vous vous connecterez pendant le TP, et apour mot de passe mdpu_xx (par exemple mdpu_04).

Page 3: Installation et configuration d’Apache sous Linux …maurise-softawre1.e-monsite.com/medias/files/apache-tp.pdf · 2012-08-09 · ... celui d’utilisateur du réseau, mais celui

Le compte invité guest_xx (par exemple guest_04), sur lequel les autres utilisateurs pourront se connecter sur votre machine,et dont le mot de passe est mdpg_xx (par exemple mdpg_04).

Préparation du TPPour appréhender au mieux ce TP, il est conseillé de se connecter sur la machine (i207mxx) sous l’utilisateur user_xx, etd’adopter la configuration suivante :

Configuration de base de ApacheApache est le nom du serveur HTTP installé par la distribution RedHat de Linux. Il lance un (en fait des) démon(s) qui scrute(nt)en permanence les requêtes sur le port 80 (par défaut).

DémarrageQuestion 1. Vérifier que le service est bien lancé (à l’aide du script ou par ps -aux | grep httpd). S’il n’est pas démarré,

le démarrer.Le service est lancé à l’installation du paquetage. Pour le lancer, il faudrait exécuter :/etc/rc.d/init.d/httpd start

Question 2. Vérifier que le service sera bien lancé à chaque démarrage du serveur à l’aide de l’utilitaire /usr/sbin/ntsysv.Cet utilitaire permet de décider les services qui seront démarrés au boot de la machine.

Question 3. Vérifier que le service fonctionne bien en lançant un navigateur (netscape-navigator, par l’utilisateuruser_xx) et en atteignant l’URL http://i207mxx/, ou http://localhost, ou http://i207mxx.ifsic.univ-rennes1.fr, ou http://148.60.5.(81+xx)/ (le numéro IP de i207mxx).

Page 4: Installation et configuration d’Apache sous Linux …maurise-softawre1.e-monsite.com/medias/files/apache-tp.pdf · 2012-08-09 · ... celui d’utilisateur du réseau, mais celui

La réponse indique que tout fonctionne.

Mise à disposition de documentsLe fichier de configuration d’Apache est dans le répertoire /etc/http/conf, et est nomméhttpd.conf :Il ne suffit pas de modifier ce fichier pour modifier le comportement du serveur HTTP (utiliser /etc/rc.d/init.d/httpd).

index des répertoiresQuestion 4. Au contenu de quel fichier correspond l’affichage visible à l’URL http://i207mxx.ifsic.univ-rennes1.fr/ ?Il s’agit de /var/www/html/index.html :DocumentRoot /var/www/html # httpd.confDocumentIndex index.html # httpd.conf

Question 5. Visualiser le contenu du fichier /var/www/html/public/test.tp. Inspecter l’URLhttp://i207mxx/public. Comment faire en sorte que cette URL renvoie le contenu du fichier test.tp ?

DirectoryIndex test.tp index.html # httpd.conf

types de documentsLa réponse du serveur à une requête HTTP est constituée de plusieurs éléments, dont trois essentiels (se référer à la RFC 2616pour une description précise du protocole HTTP) :• le code de retour• le type (MIME) de la réponse• le contenu de la réponseQuestion 6. Comment est interprétée la séquence <BR> du fichier test.tp ? Que cela signifie-t-il ?Elle n’est pas interprétée, ce qui signifie que le contenu n’est pas considéré comme du HTML.

Question 7. récupérer le fichier /var/www/html/public/test.ps à l’aide du navigateur. Qu’observez-vous ?Le navigateur demande un chemin pour sauvegarder la réponse sur disque.

Question 8. Placez-vous dans le répertoire /tmp et récupérez le fichier test.ps à l’aide du programme wget :cd /tmpwget http://i207mxx/public/test.psQuel est le type MIME de la réponse à la requête HTTP ?Le type de la réponse est application/postscript.

Dans toute la suite, wget peut être utilisé pour obtenir des documents via HTTP.

Page 5: Installation et configuration d’Apache sous Linux …maurise-softawre1.e-monsite.com/medias/files/apache-tp.pdf · 2012-08-09 · ... celui d’utilisateur du réseau, mais celui

Question 9. Comment faire pour visualiser directement le contenu du fichier ?Il faut configurer le navigateur (Edit, Preferences, Navigator, Applications, PostScript Document, Edit,Application, ghostview %s).

Question 10. Qu’en déduisez-vous sur le navigateur Netscape ?Le type des documents qui lui sont renvoyés est donné par le serveur. Il effectue des opérations différentes suivant le type(affichage textuel, au format HTML, sauvegarde sur disque, lancement d’une application externe, ...).

Question 11. Quel est la directive qui permet à Apache de savoir quel type MIME il doit renvoyer en fonction du fichier àservir ? Quel est le fichier concerné ? Sur quel propriété des fichiers dont il doit renvoyer le contenu se base Apache pourdécider du type de la réponse ?

TypesConfig /etc/mime.types # httpd.confApache se base sur l’extension des fichiers.

Question 12. Comment peut-on faire pour qu’Apache se base sur le contenu des fichiers ?Il faut utiliser la directive MimeMagicFile.

Question 13. Que se passe-t-il lorsque l’on ne précise pas le type MIME à renvoyer ?Cela dépend de la directive DefaultType.

Question 14. Comment ajouter un nouveau type ? Comment faire en sorte que la séquence <BR> de test.tp soit interprétéecomme un saut de ligne ?

En utilisant la directive :AddType text/html .tp

Protection des données

Par le système de fichierQuestion 15. Quel est l’utilisateur qui exécute le démon httpd ( ps aux | grep httpd) ?C’est apache.

Question 16. Quelle directive permet de changer d’utilisateur (httpd.conf) ?

Page 6: Installation et configuration d’Apache sous Linux …maurise-softawre1.e-monsite.com/medias/files/apache-tp.pdf · 2012-08-09 · ... celui d’utilisateur du réseau, mais celui

La directive User.

Question 17. À quel utilisateur appartient le fichier /var/www/html/index.html ? Quel sont les permissions du fichier ?Il appartient à apache (groupe apache), permissions rw-r--r--.

Question 18. À quel utilisateur appartient le fichier /var/www/html/index2.html ? Quel sont les permissions du fichier ?Il appartient à root (groupe root), permissions rw-rw----.

Question 19. Que se passe-t-il lorsque l’on essaie d’atteindre l’URL http://i207mxx/index2.html ?On obtient une erreur 403 Forbidden, car apache ne peut plus lire le contenu du ficher index2.html.

Question 20. Quelles permissions faut-il donner à index2.html pour que l’URL soit lisible ?Il faut que l’utilisateur apache puisse lire le fichier.

Par le serveur Apache, par répertoireUn mécanisme utilisé est celui des fichiers .htaccess, qui décrit la protection des fichiers des répertoires dans lesquels on lestrouve. On préfère souvent une protection par des directives, ce qui permet une centralisation des règles de protection dans lesfichiers de configuration. C’est ce dernier mécanisme que nous allons étudier.Noter que la protection par le serveur Apache s’ajoute à celle du système de fichiers, sans la remplacer.Le premier type de protection est une protection par répertoire.Question 21. Peut-on accéder à tous les fichiers du serveur via le protocole HTTP ?Non, pas par défaut (à cause de la directive <Directory />...</Directory>.

Question 22. Comment faire en sorte que l’on puisse lire tous les fichiers de /etc ?En donnant les mêmes directives de contrôle à ce répertoire du système qu’au répertoire /var/www/html.En fait on ne peut pas voir la racine ; il faut indiquer un nom de répertoire .

Question 23. Est-ce conseillé ? Pourquoi ?Certainement pas, car cela donne accès à des fichiers sensibles, tels /etc/passwd.

Question 24. Le mécanisme de protection par les fichiers .htaccess est-il actif par défaut ?Non, grâce à la directive AllowOverride None.

Par le serveur Apache, par clientLe deuxième type de protection des données par le serveur Apache se base sur la machine émettant la requête HTTP, le client.

Page 7: Installation et configuration d’Apache sous Linux …maurise-softawre1.e-monsite.com/medias/files/apache-tp.pdf · 2012-08-09 · ... celui d’utilisateur du réseau, mais celui

Pour tester la protection basée sur l’émetteur de la requête, vous ouvrirez une session sur une autre machine de la salle(i207myy), en tant qu’utilisateur user_yy (rsh i207myy -l user_yy). Le plus simple est ensuite de lancer le programmewget, ou bien un navigateur graphique (netscape-navigator).Question 25. Comment faire pour n’autoriser l’accès au répertoire /var/www/html qu’au serveur lui-même ? Modifier la

configuration du serveur et tester.Utliser des directives du type :order allow,denyallow from 148.60.5.(81+xx)

Question 26. Comment faire pour interdire l’accès au répertoire /var/www/html à partir de la machine i207myy ? Tester.Ajouter simplement :deny from 148.60.5.(81+yy)

Par le serveur Apache, en utilisant l’authentification de HTTPLe troisième type de protection consiste en le rajout d’une authentification nominative par le client.Comme super-utilisateur, créer un fichier de mot passe users.passwd dans/var/www/html/private à l’aide du programme htpasswd. Donner ensuite les droits de lecture sur ce fichier à l’utilisateurapache (seulement).chgrp apache /var/www/html/private/users.passwdchmod 640 /var/www/html/private/users.passwd

Ajouter la protection suivante pour le répertoire /var/www/html/private :<Directory /var/www/html/private>AuthType BasicAuthUserFile /var/www/html/private/users.passwdAuthName "private directory"require valid-user</Directory>Question 27. Que se passe-t-il lorsque vous accédez de nouveau au serveur ? Que se passe-t-il si vous vous trompez dans le mot

de passe ?Une autentification est demandée. En cas d’échec, on obtient une erreur 401 Unauthorized.Authentification = un royaume + un user + un password

Il faut faire un échec ! !

Question 28. L’autentification est-elle nécessaire ensuite ? Pourquoi ?Non, ces informations d’authentification sont mémorisées par le navigateur et transportées par le protocole HTTP.

Par le serveur Apache, en utilisant les deuxCréer le répertoire private2 dans /var/www/html, un fichier de d’authentification users.passwd dans ce répertoire(différent du fichier précédent), puis ajouter la protection du répertoire /var/www/html/private2 de la façon suivante :<Directory /var/www/html/private2>order allow,denydeny from allallow from 148.60.5.(81+xx)AuthType BasicAuthUserFile /var/www/html/private2/users.passwdAuthName "private2 directory"

Page 8: Installation et configuration d’Apache sous Linux …maurise-softawre1.e-monsite.com/medias/files/apache-tp.pdf · 2012-08-09 · ... celui d’utilisateur du réseau, mais celui

require valid-usersatisfy any</Directory>Question 29. Qu’observez-vous depuis i207mxx ? depuis i207myy ?L’authentification n’est demandée que depuis i207myy.

Exécution de programmes via HTTPNous ne verrons dans ce TP que deux modes d’exécution de programmes via HTTP à savoir CGI (Common Gateway Interface),et PHP. Ce choix est basé sur le fait que ces deux modes se basent en continu sur le protocole HTTP (et non pas seulement pourinitialiser un processus communiquant avec le serveur sur un autre port que le port HTTP).Les deux autres langages les plusconnus fonctionnant sous ce mode sont ASP et JSP.

Les programmes CGIQuestion 30. Peut-on exécuter des programme CGI par défaut ? Comment faire ?Oui, les programmes CGI doivent se trouver dans le répertoire /var/www/cgi-bin (voir la directive ScriptAlias).

Question 31. Essayer d’atteindre l’URL http://i207mxx/cgi-bin/test.sh. Que doivent être les permissions desprogrammes pour être exécutables via HTTP ?

Il doivent être lisibles et exécutables par l’utilisateur apache.

Question 32. Pour répondre à la question suivante, modifier le contenu du programme test.sh pour appeler le programme id.Lorsqu’un programme est exécuté, sous quelle identité l’est-il ?

C’est l’utilisateur apache qui exécute les programmes CGI.

Question 33. Quels problèmes cela pose-t-il ?Des problèmes de sécurité. On peut ainsi exécuter des programmes sur le serveur sans authentification.

Question 34. Comment peut-on changer l’utilisateur d’exécution des programmes ?En faisant exécuter par apache un programme suid root qui change ensuite d’identité pour exécuter un autre programme(cgiwrap, SuExec).

Les programmes PHPLe but de cette partie est l’ observation de la configuration d’ un module d’Apache (PHP4).Question 35. Observer via le système de fichiers au fichier /var/www/html/test.php. Puis accéder via HTTP au fichier

/var/www/html/test.php. Qu’observez-vous ? Pourquoi ?Le fichier n’est pas chargé comme page statique mais il est exécuté.

Page 9: Installation et configuration d’Apache sous Linux …maurise-softawre1.e-monsite.com/medias/files/apache-tp.pdf · 2012-08-09 · ... celui d’utilisateur du réseau, mais celui

Question 36. Quelles directives indiquent à Apache comment gérer les scripts PHP ?AddType application/x-httpd-php phpLoadModule php_module modules/libphp.soAddModule mod_php.c

Base de donnéesLe but de cette partie est d’installer un gestionnaire de bases de données (PostgreSQL, logiciel libre, qui a été installé lors de lapremière partie de ce TP) et de voir comment on peut simplement l’interfacer avec Apache pour créer des applicationsaccessibles par le protocole HTTP.

InstallationLe démon (/usr/sbin/postmaster) est géré par le script /etc/rc.d/init.d/postgresql (démarrage, arrêt, statut,redémarrage, rechargement de la configuration).Question 37. Vérifier que le service est bien lancé (à l’aide du script ou par ps -aux | grep postmaster). S’il n’est pas

démarré, le démarrer. Que se passe-t-il ?Le service n’est pas lancé à l’installation du paquetage. Lorsque l’on essaie de le lancer, le système crée une base de donnéestemplate1 à laquelle on peut ensuite se connecter.

Question 38. Vérifier que le service sera bien lancé à chaque démarrage du serveur à l’aide de l’utilitaire ntsysv.PostgreSQL n’est pas lancé par défaut au démarrage. Il faut le faire pour les prochains reboots du serveur.

Question 39. Essayer de lancer l’interpréteur psql pour se connecter à la base de données template1 (psql template1).Que se passe-t-il ?

L’utilisateur root n’est pas déclaré dans la base de données. (La base de données possède sa propre base d’utilisateurs)

Passer sous l’identité postgres :[root@i207mxx ~]# su - postgres[postgres@i207mxx pgsql]$

Se connecter à la base template1 :[postgres@i207mxx pgsql]$ psql template1template1=>Créer une nouvelle base de données :template1=> create database newdb ;CREATEDBtemplate1=>Se connecter à la nouvelle base :template1 => \c newdbnewdb=>

Créer une table dans la base newdb :newdb=> create table MyTable (cle integer,constraint MyTable_pk primary key(cle),valeur text );newdb=>

Quitter psql :newdb=> \q[postgres@i207mxx pgsql]$ exit

Page 10: Installation et configuration d’Apache sous Linux …maurise-softawre1.e-monsite.com/medias/files/apache-tp.pdf · 2012-08-09 · ... celui d’utilisateur du réseau, mais celui

[root@i207mxx ~]#

UtilisationQuestion 40. Exécuter le fichier /tmp/script.sql (psql newdb < /tmp/script.sql). Que se passe-t-il ? Expliquer.La troisième ligne duplique l’index de la table.

Question 41. Atteindre l’URL http://i207mxx/script.php. Que se passe-t-il ? Expliquer.L’utilisateur apache n’a pas le droit de se connecter à la base de données.

Question 42. Résoudre le problème en déclarant l’utilisateur apache dans la base de données (la création des utilisateurs dans labase de données se fait à l’aide de l’utilitaire createuser). Que se passe-t-il alors ?

L’utilisateur apache n’a pas le droit de lire la table MyTable.

Question 43. Résoudre ce dernier problème sous psql avec la commande grant. Cela marche-t-il ?[postgres@i207mxx pgsql]$ psql newdbnewbd=> grant select on MyTable to apache ;newdb=> \q[postgres@i207mxx pgsql]$Oui ;-)

Hébergement de sitesCette dernière partie montre comment une seule machine peut répondre à des requêtes apparament adressées à des machinesdifférentes. Notamment utilisé par les hébergeurs et fournisseurs d’accès, ce mécanisme est également utilisé à l’IFSIC (pour lessites des associations d’étudiants par exemple).Ajouter les directives suivantes à la fin du fichier /etc/httpd/conf/httpd.conf :NameVirtualHost 148.60.5.(80+xx)<VirtualHost i207mxx.ifsic.univ-rennes1.fr> ServerName i207mxx.ifsic.univ-rennes1.fr ServerAlias i207mxx DocumentRoot /var/www/html</VirtualHost><VirtualHost serv_ixx.ifsic.univ-rennes1.fr> ServerName serv_ixx.ifsic.univ-rennes1.fr ServerAlias serv_ixx DocumentRoot /var/www/auberge/serv_ixx.ifsic.univ-rennes1.fr</VirtualHost>

Créer le répertoire /var/www/auberge/serv_ixx.ifsic.univ-rennes1.fr.Question 44. Atteindre l’URL http://serv_xx. Expliquer.Apache offre un mécanisme qui lui permet de se faire passer pour plusieurs machines.

Question 45. Que faut-il faire pour que cela marche depuis n’importe quelle machine de l’internet ?Il faut que la machine serv_ixx.ifsic.univ-rennes1.fr soit déclarée dans le DNS et ait pour numéro IP celui dei207mxx.

Page 11: Installation et configuration d’Apache sous Linux …maurise-softawre1.e-monsite.com/medias/files/apache-tp.pdf · 2012-08-09 · ... celui d’utilisateur du réseau, mais celui

Ce qui manqueLe but de ce TP n’est évidemment pas de former un administrateur HTTP ; il n’est que de donner une représentation pratiqueaux concepts vu en cours.Les manques principaux à ce vernis de webmaster sont :• L’exécution de programmes sous HTTP, longtemps limitée aux programmes CGI, revêt maintenant de nombreuses formes

(Javascript, Python, ASP, ...).• La navigation sous HTTP comporte de nombreux mécanismes de cache (applicatifs, locaux, distants).• Enfin, le développement d’applications via HTTP doit répondre à des impératifs de sécurité que HTTP seul ne peut pas

remplir. HTTPS (HTTP + SSL) permet par exemple le cryptage des communications client/serveur.

RéférencesLa distribution Linux RedHat : http://www.redhat.comLe protocole HTTP : http://www.w3.org/Protocols/Le serveur HTTP Apache : http://www.apache.orgLa programmation CGI : http://hoohoo.ncsa.uiuc.edu/cgi/overview.htmlLe wrapper cgiwrap : http://www.unixtools.org/cgiwrap/La fonctionnalité SuExec d’Apache : http://www.apache.org/docs/suexec.htmlLe langage PHP : http://www.php.netLe gestionnaire de bases de données PostgreSQL : http://www.postgresql.orgLe cache Squid : http://squid_cache.orgLe cryptage par SSL : http://www.netscape.com/eng/ssl3/