TP3 Mise en œuvre d'une architecture multi-site (authentification de pages web, sécurisation des pages) - Page 1 -
Sommaire Introduction...3 Configuration du serveur...3 Configuration avancée Apache serveur HTTP...5 Détail d'un fichier de configuration...6 Utilisation de serveurs virtuels par nom...6 Plusieurs noms pour un même serveur virtuel...7 Les fichiers.htaccess : authentification et plus encore...9 Crypter les mots de passe...10 Empêcher l'accès à un répertoire par un domaine...11 - Page 2 -
Introduction L'objectif de ce TP, est de découvrir comment préparer, mettre en place et configurer un serveur web de façon à ce qu'il puisse héberger plusieurs sites à la fois. Nous effectuerons TP sous Debian 6 et enfin, nous sécuriserons l'accès aux pages web à l'aide des différents outils proposés. Configuration du serveur Lorsque le serveur web est installé, nous pouvons le lancer. De base, Apache n'utilise qu'un seul fichier de configuration mais dans celle que nous utilisons içi, celui-ci est réparti sur plusieurs fichiers de configuration. Nous vérifions que le fichier httpd.conf est bien vide : # cat /etc/apache2/httpd.conf Nous effectuerons une copie des fichiers modifiés afin d'éviter les éventuels erreur de paramétrage : # cp /etc/apache2/* /home/administrateur/save_apache* Ensuite, nous nous assurons que nos fichiers de configuration ne contiennent pas d'erreur de syntaxe : # apache2ctl -t Il se peut qu'une erreur apparaisse mais la syntaxe doit être validée avec cette ligne : Syntax OK Puis, nous allons configurer le fichier apache2.conf : nous nous rendons dans le dossier «/etc/apache2/.» et nous éditons le fichier : # gedit apache2.conf Nous nous assurons que : le numéro du processus Linux du démon «httpd» contenu dans le fichier apache.pid correspond bien au premier processus «apache2». Normalement, il est censé y avoir plusieurs processus de apache2. - Page 3 -
Puis, nous allons utiliser la directive «DirectoryIndex» pour spécifier quel fichier doit être lu, si aucun n'est défini par la requête «http». Si le module «dir» n'est pas installé, nous l'activerons : # a2enmod dir Et dans le fichier dir.conf présent dans les arborescences «/etc/apache2/mods-enabled/» et «/etc/apache2/mods-available/», nous vérifions la présence de la ligne suivante : DirectoryIndex index.htm index.html index.php Une fois vérifié, nous redémarrons le serveur http. Nous décidons de modifier le fichier «index.html» afin de pouvoir personnaliser la page d'accueil et ainsi, de pouvoir reconnaître les deux pages web des sites. # cd /var/www # gedit index.html <html><body><h1>ca fonctionne!</h1> <p>c'est le site 1</p> <p>the web server software is running but no content has been added, yet.</p> </body></html> Lorsque la page d'accueil est modifiée, nous créons des répertoires spécifiques pour chaque utilisateur. Nous ajoutons donc un utilisateur différent de root, nous le nommerons «etudiant» et son mot de passe sera : etudiant. # adduser etudiant Puis, nous créons un dossier nommé «public_html» dans son dossier personnel (/home/etudiant) # cd /home/etudiant/ # mkdir public_html - Page 4 -
Pour finir, nous installons le module «userdir» et nous redemarrons le serveur http. # a2enmod userdir # service apache2 restart Toujours dans les même dossiers, nous vérifions dans le fichier «userdir.conf» la présence de la ligne suivante : UserDir public_html Nous affichons la page web pour vérifier que tout fonctionne : http://w.x.y.z/~etudiant/ En saisissant ceci, nous arrivons sur la racine du dossier personnel de l'utilisateur «etudiant». Dans le fichier «/etc/apache2/apache2.conf», nous vérifions que les lignes suivantes soit bien présente : # Include the virtual host configurations : Include /etc/apache2/sites-enabled/ Lorsque tout est vérifié, nous redémarrons le serveur pour toutes les modifications soient bien prise en compte et fonctionnelles. Configuration avancée Apache serveur HTTP Afin de pouvoir redirigé deux sites web sur le même serveur et la même adresse IP, je modifie le fichier «etc/hosts» et ajoute les lignes suivantes : 172.16.21.5 www.lycee-etampes.org 172.16.21.5 www.lycee-bleriot.org Cela permet donc de bénéficier de deux noms de domaines différentes qui mènent au même serveur. - Page 5 -
Détail d'un fichier de configuration Nous voulons aller plus loin dans la création des hôtes virtuelles, nous allons examiner l'ensemble des paramètres du fichier suivant «/etc/apache2/sites-enabled/000-default». Puis, nous créons le fichier suivant «secret» dans «/home/etudiant/public_html/». Une fois créé, nous ajoutons les lignes suivantes : Alias /secret/ "/home/etudiant/public_html/secret/" <Directory "/home/etudiant/public_html/secret/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> Utilisation de serveurs virtuels par nom Nous vérifions maintenant, que le port 80 est bien renseigné dans le fichier «ports.conf». Le fait d'ajouter ce port permet d'utiliser le protocole HTTP. NameVirtualHost *:80 Listen 80 Le port 80 est bien présent dans le fichier. Par la suite, nous allons commencer la création d'une section <VirtualHost> pour chacun des serveurs que l'on va créer. L'argument de la directive <VirtualHost> doit être la même que celui de «NameVirtualHost» (cestà-dire l'adresse IP ou * pour toutes les adresses). On doit définir au minimum : une directive ServerName pour désigner le serveur concerné une directive DocumentRoot pour préciser l'emplacement sur le système de fichiers du contenu de ce serveur. - Page 6 -
Par la suite, nous créons deux copies du fichier 000-default dans le répertoire «/etc/apache2/sitesenabled» que l'on nommera «etampes» et «bleriot». cp 000-default etampes cp 000-default bleriot Et nous ajoutons dans le fichier «etampes», entre la balise <VirtualHost *:80> et la directive «DocumentRoot», la ligne suivante : Et nous modifions aussi, la ligne DocumentRoot en ajoutant : var/www/etampes <VirtualHost *:80> ServerAdmin webmaster@localhost ServerName www.lycee-etampes.org DocumentRoot /var/www/etampes Et pour finir, nous créons le répertoire /var/www/etampes et on y ajoute un fichier index.html qui affiche «ETAMPES». Nous répétons les manipulations précédentes pour le site de Bleriot en ajoutant les lignes «ServerName www.lycee-bleriot.org» et «/var/www/bleriot». Plusieurs noms pour un même serveur virtuel Maintenant, nous allons ajouter plusieurs noms dans un même serveur virtuel. Pour cela, nous allons placer la directive ServerAlias dans une section <VirtualHost>. Nous nous rendons dans le fichier index.html de Étampes, et ajoutons la ligne suivante : ServerAlias lycee-etampes.org *.lycee-etampes.org Dorénavant, toutes les requêtes portant sur un domaine etampes.org seront affichées par le serveur virtuel www.etampes.org. - Page 7 -
Avec l'adresse www.lycee-etampes.org : Avec l'adresse www.lycee-bleriot.org : Avec l'adresse IP : - Page 8 -
Les fichiers.htaccess : authentification et plus encore... Maintenant, nous allons mettre en place un mot de passe afin de s'identifier pour accéder au répertoire secret que nous allons créer. Nous allons dans le dossier suivant : /home/etudiant/public_html/secret/ et nous créons le fichier.htaccess Et nous ajoutons les lignes suivantes : ErrorDocument 403 http://www.lycee-etampes.org/error403.html AuthUserFile /home/mikmik/.password AuthGroupFile /dev/null AuthName "Acces securise au site ETAMPES" AuthType Basic <LIMIT GET POST> Require valid-user </LIMIT> A la ligne «AuthGroupFile», nous entrons l'arborescence du fichier des mots de passe. Et dans ce dossier, nous créons le fichier.password où l'on entre les différents utilisateurs et leur mots de passes, qui seront autorisés à accéder au site d'etampes. mikmik:123456789 etudiant:123456789 Nous avons mis en place deux utilisateurs avec leur mot de passe chacun. - Page 9 -
Et nous tentons de nous connecter à l'adresse suivante : http://172.16.21.5/~etudiant/secret Crypter les mots de passe Ensuite, nous allons générer des mots de passes cryptés de façon a ce qu'il soit indétectable sous un analyseur de trame, comme WireShark par exemple. Pour çà, nous utilisons l'outil de Apache nommé htpasswd accessible dans le sous-répertoire d'apache : /usr/bin/htpasswd Tout d'abord, nous créons le fichier de mots de passe : htpasswd -c {/home/mikmik/.password} mikmik Une fois la commande entrée, il nous demande de choisir un mot de passe pour le compte mikmik, qui sera lui crypté. Et nous ajoutons un nouvel utilisateur avec son mot de passe : htpasswd {/home/mikmik/.password} admin - Page 10 -
Empêcher l'accès à un répertoire par un domaine Pour finir, nous allons empêcher l'accès d'un répertoire par un domaine. Nous saisissons les commandes permettant la création d'un autre fichier nommé htaccess,qui demande de s'identifier pour accéder à l'adresse http://www.lycee-etampes.org/ et qui limite cet accès à l'utilisateur pierre. touch htaccess Et nous ajoutons les lignes suivantes : ErrorDocument 403 http://www.lycee-etampes.org/error403.html AuthUserFile /home/mikmik/.password AuthGroupFile /dev/null AuthName "Acces securise au site ETAMPES" AuthType Basic <LIMIT GET POST> order deny,allow deny from all allow from 172.16.21.5 require user mikmik Require valid-user </LIMIT> Nous ajoutons bien l'adresse IP du serveur web ainsi que le nom de l'utilisateur «pierre» comme demandé précédemment. Et nous testons avec l'adresse suivante: http://172.16.21.5/~etudiant/secret - Page 11 -