logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
doc:reseau:apache2:tp01 [20/09/2014 17:21]
Hypathie [Introduction]
doc:reseau:apache2:tp01 [23/09/2014 14:55]
Hypathie [Sécuriser son site web]
Ligne 12: Ligne 12:
 **Nota : Ce wiki est écrit par une débutante ** **Nota : Ce wiki est écrit par une débutante **
  
-Contributeurs,​ merci de compléter [[atelier:​chantier:​apache2#​securiser-son-site|la partie sur la sécurité]] ! FIXME +Contributeurs,​ merci de compléter [[atelier:​chantier:​apache2#​securiser-son-site-web|la partie sur la sécurité]] ! FIXME 
 ===== Introduction ===== ===== Introduction =====
 Ce qui est mis en œuvre ici concerne une utilisation d'un serveur apache sur un réseau local qui ne pointe pas un nom de domaine acquis mais fictif.\\ ​ Ce qui est mis en œuvre ici concerne une utilisation d'un serveur apache sur un réseau local qui ne pointe pas un nom de domaine acquis mais fictif.\\ ​
Ligne 39: Ligne 39:
 <code root>​apt-get install apache2</​code>​ <code root>​apt-get install apache2</​code>​
  
-Après l'​installation le serveur est fonctionnel. Si tout c'est bien passé, en tapant dans son navigateur ''​http://​192.168.x.xx/'',​ il doit s'​afficher ceci:+Après l'​installation le serveur est fonctionnel. Si tout s'est bien passé, en tapant dans son navigateur ''​http://​192.168.x.xx/'',​ il doit s'​afficher ceci:
  
 <​code>​It works! <​code>​It works!
Ligne 59: Ligne 59:
  
 Il est à noter que le fichier /​etc/​apache2/​apache2.conf est l'​équivalent du fichier httpd.conf des distributions Linux à base de RedHat.\\ ​ Il est à noter que le fichier /​etc/​apache2/​apache2.conf est l'​équivalent du fichier httpd.conf des distributions Linux à base de RedHat.\\ ​
-Il inclue ​d'​autres fichiers de configuration qu'on n'a pas besoin de modifier pour une utilisation simple et personnelle d'​apache2. ​+Il inclut ​d'​autres fichiers de configuration qu'on n'a pas besoin de modifier pour une utilisation simple et personnelle d'​apache2. ​
  
 Les quatre sous-répertoires à relever dans un premier temps pour comprendre le fonctionnement d'​apache sont :  Les quatre sous-répertoires à relever dans un premier temps pour comprendre le fonctionnement d'​apache sont : 
Ligne 71: Ligne 71:
  
 Ce répertoire contient des fichiers qui indiquent les sites hébergés par apache2.\\ ​ Ce répertoire contient des fichiers qui indiquent les sites hébergés par apache2.\\ ​
-Puisque après l'​installation,​ il a été possible d'​afficher ​un page web d'​accueil,​ ce répertoire contient un fichier qui le permet :+Puisque après l'​installation,​ il a été possible d'​afficher ​une page web d'​accueil, ​c'est que ce répertoire contient un fichier qui le permet :
  
 <code root>cd sites-available/​ && less default</​code>​ <code root>cd sites-available/​ && less default</​code>​
Ligne 96: Ligne 96:
                 Allow from all                 Allow from all
         </​Directory></​code>​         </​Directory></​code>​
-On voit la ligne **''<​Directory /​var/​www/>''​**. C'est là qu'il y a un fichier qui contient le code html qui affiche ​la page d'​accueil.\\ ​+On voit la ligne **''<​Directory /​var/​www/>''​**. C'est là le chemin du fichier qui contient le code html de la page d'​accueil.\\ ​
  
 Vérifions cela. Vérifions cela.
Ligne 108: Ligne 108:
 </​body></​html></​code>​ </​body></​html></​code>​
  
-Donc le site "​default"​ est configuré de sorte à mettre à disposition tout ce qui est dans /var/www. Mais ce n'est pas tout. Si la page d'​accueil s'​affiche sur le navigateur, c'est que le site de test de apache2 est activé. Cette activation dépend d'un lien symbolique entre un fichier ​de /​etc/​apache2/​sites-enabled/​ et le fichier /​etc/​apache2/​sites-available/​default. ​+Donc le site "​default"​ est configuré de sorte à mettre à disposition tout ce qui est dans /var/www. Mais ce n'est pas tout. Si la page d'​accueil s'​affiche sur le navigateur, c'est que le site de test de apache2 est activé. Cette activation dépend d'un lien symbolique entre un fichier ​du répertoire ​/​etc/​apache2/​sites-enabled/​ et un fichier ​du répertoire ​/​etc/​apache2/​sites-available/​default. ​
  
   * **/​etc/​apache2/​sites-enabled/​** :    * **/​etc/​apache2/​sites-enabled/​** : 
Ligne 118: Ligne 118:
  
 <code root>ls -l /​etc/​apache2/​sites-enabled/​000-default</​code>​ <code root>ls -l /​etc/​apache2/​sites-enabled/​000-default</​code>​
-<​code>​lrwxrwxrwx 1 root root 26 sept. 19 06:06 /​etc/​apache2/​sites-enabled/​000-default -> ../​sites-available/​default</​code>​+<​code>​lrwxrwxrwx 1 root root 26 sept. 19 06:06
 + /​etc/​apache2/​sites-enabled/​000-default -> ../​sites-available/​default</​code>​
  
 <​note>​ <​note>​
-Pour l'​instant,​ le serveur apache se contente d'​envoyer du code HTML, CSS, javascript au navigateur, c'​est-à-dire du code écrits ​dans un langage compris par le navigateur (côté client). Pour le PHP interpréter ​par le serveur, il faut mettre en place un module php. Pour mettre cela en place il faudra considérer cette fois les répertoires /​etc/​apache2/​mods-available/​ et /​etc/​apache2/​mods-enabled/​ dont il sera question plus bas.+Pour l'​instant,​ le serveur apache se contente d'​envoyer du code HTML, CSS, javascript au navigateur, c'​est-à-dire du code écrit ​dans un langage compris par le navigateur (côté client). Pour le PHP interprété ​par le serveur, il faudra ​mettre en place un module php. Pour mettre cela en place il faudra considérer cette fois les répertoires /​etc/​apache2/​mods-available/​ et /​etc/​apache2/​mods-enabled/​ dont il sera question plus bas.
 </​note>​ </​note>​
  
 Revenons sur la configuration par défaut d'​apache2,​ et la mise en service de la page d'​accueil.\\ ​ Revenons sur la configuration par défaut d'​apache2,​ et la mise en service de la page d'​accueil.\\ ​
 <note tip> <note tip>
-C'est le fait de la présence de ce lien symbolique /​etc/​apache2/​sites-enabled/​000-default qui pointe vers le site déclaré et correctement configuré /​etc/​apache2/​sites-available/​default,​ qui quant-à lui, attribue à apache la prise en charge du fichier de code web /​var/​www/​index.html,​ qui active le site.\\ ​+C'est le fait de la présence de ce lien symbolique /​etc/​apache2/​sites-enabled/​000-default qui pointe vers le site déclaréet correctement configuré/​etc/​apache2/​sites-available/​default,​ qui quant à lui, attribue à apache la prise en charge du fichier de code web /​var/​www/​index.html,​ qui active le site.\\ ​
  
 Pour activer un site ou le désactiver,​ il suffit donc de créer ou de supprimer le lien symbolique qui relie /​etc/​apache2/​sites-enabled/​000-default et /​etc/​apache2/​sites-available/​ Pour activer un site ou le désactiver,​ il suffit donc de créer ou de supprimer le lien symbolique qui relie /​etc/​apache2/​sites-enabled/​000-default et /​etc/​apache2/​sites-available/​
  
-Cela peut se faire avec les commandes ln -s et rm. Mais on utilise pour ce faire les utilitaires : +Cela peut se faire avec les commandes ​''​ln -s'' ​et ''​rm''​. Mais on utilise pour ce faire les utilitaires : 
-  * a2ensite : (apache2 enable site) : active un site, +  * ''​a2ensite'' ​: (apache2 enable site) : active un site, 
-  * a2dissite : (apache2 disable site) : désactive un site.+  * ''​a2dissite'' ​: (apache2 disable site) : désactive un site.
 </​note>​ </​note>​
  
Ligne 184: Ligne 185:
 <code root>vim /​etc/​apache2/​sites-available/​monsite.com</​code>​ <code root>vim /​etc/​apache2/​sites-available/​monsite.com</​code>​
  
-On modifie ​ceci :+On inscrit ​ceci :
  
 <​code>​ <​code>​
Ligne 200: Ligne 201:
 <code root>​a2ensite monsite.com</​code>​ <code root>​a2ensite monsite.com</​code>​
  
-  * Prendre en compte les modifications effectuées ​à Apache ​en le redémarrant :+  * Prendre en compte les modifications effectuées en redémarrant ​Apache ​:
  
 <code root>​service apache2 reload</​code>​ <code root>​service apache2 reload</​code>​
Ligne 224: Ligne 225:
 On va forcer l'​encodage au niveau du serveur apache. Il suffit que tous les fichiers utilisent le même encodage utf8. On va forcer l'​encodage au niveau du serveur apache. Il suffit que tous les fichiers utilisent le même encodage utf8.
  
-  * Mais avant vérifions les locales ​générés ​sur le système. ​+  * Mais avant vérifions les locales ​générées ​sur le système. ​
 Elles apparaissent quand on tape la commande : Elles apparaissent quand on tape la commande :
 <code root>​grep -v "​^#"​ /​etc/​locale.gen</​code>​ <code root>​grep -v "​^#"​ /​etc/​locale.gen</​code>​
Ligne 259: Ligne 260:
 </​code>​ </​code>​
  
-====Sécuriser son site ====+===== Installer le module php===== 
 +===Installer libapache2-mod-php5 === 
 +Ce paquet casse le MPM worker(([[http://​httpd.apache.org/​docs/​2.2/​mod/​worker.html]])) et engendre l'​installation du MPM prefork(([[http://​httpd.apache.org/​docs/​2.2/​mod/​prefork.html]])).\\  
 + 
 +<code root>​apt-get install libapache2-mod-php5</​code>​ 
 + 
 + 
 +Une fois l'​installation effectuée on peut vérifier que php5 est apparu dans /​etc/​apache2/​mod-available.  
 + 
 +<code root>ls -l /​etc/​apache2/​mods-available/​php5*</​code>​ 
 +<​code>​-rw-r--r-- 1 root root 898 août  21 10:49 /​etc/​apache2/​mods-available/​php5.conf 
 +-rw-r--r-- 1 root root  59 août  21 10:49 /​etc/​apache2/​mods-available/​php5.load</​code>​ 
 + 
 +Dans /​etc/​apache2/​mod-enabled,​ ce sont des liens symboliques qui activent ce module: 
 +<code root>ls -l /​etc/​apache2/​mods-enabled/​php5*</​code>​ 
 +<​code>​lrwxrwxrwx 1 root root 27 sept. 20 11:40\ 
 + /​etc/​apache2/​mods-enabled/​php5.conf -> ../​mods-available/​php5.conf 
 +lrwxrwxrwx 1 root root 27 sept. 20 11:40\ 
 + /​etc/​apache2/​mods-enabled/​php5.load -> ../​mods-available/​php5.load</​code>​ 
 + 
 +-> Puisque les liens sont là, le module est activé. 
 + 
 + 
 + 
 +===Activer/​désactiver un module === 
 + 
 +  * ''​a2enmod''​ : (apache2 enable module) : active un module apache2 
 +  * ''​a2dismod''​ : (apache2 disable module) : désactive un module apache2 
 + 
 +Le module est activé par défaut, mais si ce n'​était pas le cas :  
 + 
 +<code root>​a2enmod php5</​code>​ 
 +Si on active ou désactive un module ne pas oublier après l'​opération de réactiver apache : ''​service apache2 restart''​ 
 + 
 +===Créer la page de test === 
 + 
 + 
 +<code root>mv /​var/​www/​index.html /​var/​www/​index.php</​code>​ 
 +<code root>vim /​var/​www/​index.php</​code>​ 
 +<​code>​ 
 +<​html>​ 
 + <​body>​ 
 +  <​h1>​It works!</​h1>​ 
 +  <​p>​This is the default web page for this server.</​p>​ 
 +  <?php 
 +echo "La date du jour est " . date("​d/​m/​Y"​) . "​!\n";​ 
 +  ?> 
 + </​body>​ 
 +</​html>​ 
 +</​code>​ 
 + 
 +  * Recharger apache :  
 +  
 +<code root>​service apache2 restart</​code>​ 
 + 
 +  * Tester en tapant dans le navigateur : 
 +''​http://​ip-du-serveur/''​ 
 + 
 +<​code>​It works! 
 + 
 +This is the default web page for this server. 
 +La date du jour est 20/09/2014! </​code>​ 
 + 
 +Tous les outils sont en place pour apprendre les langages html et php ! 8-) 
 + 
 + 
 +=====Sécuriser son site web===== 
 + 
 +====Sécuriser Apache2 ​====
 Ce n'est là qu'un minimum et non une sécurisation optimale. Ce n'est là qu'un minimum et non une sécurisation optimale.
 FIXME FIXME
-===Éditer le fichier /​etc/​apache2/​conf.d/​security ​=== +====Diffuser le minimum d'​information sur apache ==== 
-  * Il s'agit de diffuser le minimum d'​information sur apache.+  * Éditer le fichier /​etc/​apache2/​conf.d/​security.
  
 <code root>vim /​etc/​apache2/​conf.d/​security</​code>​ <code root>vim /​etc/​apache2/​conf.d/​security</​code>​
Ligne 281: Ligne 350:
 <code root>​service apache2 restart</​code>​ <code root>​service apache2 restart</​code>​
  
-===Limiter l'​accès à toute l'​arborescence du système Linux===+====Modifier certaines options <​Directory>​ de son Virtualhost====
  
-  * Désactiver le site "​sites-available/​efault" :+  * Désactiver le site "​sites-available/​default" : 
  
 <code root>​a2dissite default</​code>​ <code root>​a2dissite default</​code>​
  
-  * Ensuite on va modifier les directives du site "/​etc/​apache2/​sites-available/​monsite.com"​ :+  * Désactiver le site "​monsite.com"​ :
  
-Pour ce faire on le désactive d'​abord : 
 <code root>​a2dissite monsite.com</​code>​ <code root>​a2dissite monsite.com</​code>​
  
-Et on recharge ​''​service ​apache2 ​reload''​.\\ +  * Ensuite ​on va modifier les directives du site "/​etc/​apache2/​sites-available/​monsite.com" ​: 
 + 
 +On édite "/etc/apache2/​sites-available/​monsite.com" :
  
-Puis on édite "/​etc/​apache2/​sites-available/​monsite.com"​. 
 <code root>vim /​etc/​apache2/​sites-available/​monsite.com</​code>​ <code root>vim /​etc/​apache2/​sites-available/​monsite.com</​code>​
  
Ligne 303: Ligne 372:
         ServerAlias www.monsite.com         ServerAlias www.monsite.com
  
-        DocumentRoot /​var/​www/​monsite.com/​public_html+        DocumentRoot /​var/​www/​monsite.com
         <​Directory />         <​Directory />
-                Options FollowSymLinks+                Options ​-FollowSymLinks
                 AllowOverride None                 AllowOverride None
         </​Directory>​         </​Directory>​
Ligne 322: Ligne 391:
  
 > ''​Options -Indexes''​ : Pour désactiver l'​option permettant le parcours d'un répertoire > ''​Options -Indexes''​ : Pour désactiver l'​option permettant le parcours d'un répertoire
-> ''​Options -FollowSymLinks''​ : Pour désactiver l'​option permettant apache de suivre des liens symboliques (qui pourrait ​permettre de quitter /​var/​www). +> ''​Options -FollowSymLinks''​ : Pour désactiver l'​option permettant ​à apache de suivre des liens symboliques (qui pourraient ​permettre de quitter /​var/​www). 
->  ''​Options -Includes''​ :  Pour désactiver l'​option permettant apache de faire des inclusions côté serveur. +>  ''​Options -Includes''​ :  Pour désactiver l'​option permettant ​à apache de faire des inclusions côté serveur. 
-> ''​Options -ExecCGI''​ : Pour désactiver l'​option permettant à apache l'​utilisation de scripts CGI. La désactiver ​si on n'​utilise pas de script CGI(([[http://​fr.wikipedia.org/​wiki/​Common_Gateway_Interface]])).+> ''​Options -ExecCGI''​ : Pour désactiver l'​option permettant à apache l'​utilisation de scripts CGI. Désactiver cette option seulement ​si on n'​utilise pas de script CGI(([[http://​fr.wikipedia.org/​wiki/​Common_Gateway_Interface]])).
  
-  * On réactive ​le site +> Si on ne peut pas mettre l'​option ''​-FollowSymLinks''​ dans le fichier "​sites-available/​default",​ on peut dans celui de son site.
-<code root>​a2ensite monsite.com</​code>​+
  
-Et comme indiqué : ''​service apache2 reload''​.+> S'il s'agit d'un usage personnel local, on peut restreindre l'accès au serveur avec les IP des clients du réseau local. 
 +  
 +Pour connaître la signification des différentes options à mettre soit dans "​sites-avaible"​ soit dans le fichier de son site voir : [[http://​httpd.apache.org/​docs/​2.2/​mod/​core.html]]
  
-====Développer son site web dans un /home/==== +====Création d'un nouvelle utilisateur du système Linux==== 
-Il n'est pas recommandé ​de travailler directement ​dans des répertoires du serveur. Un lien symbolique depuis le répertoire principal du serveur vers un répertoire du dossier personnel ​est mieux.+On développera son site dans le répertoire de cet utilisateur. ​Il est déconseillé ​de développer son site dans /var/www, surtout si la partition ​est plus petite que /home/ ! 
  
-===On désactive "​monsite"​ === +Cela évitera aussi de mettre en place le module [[http://​httpd.apache.org/docs/​current/​fr/​mod/​mod_userdir.html|userdir]],​ ce qui est déconseillé par la documentation d'​apache(("​De même, soyez méfiant en jouant avec la directive UserDir"​))
-<code root>​a2dissite monsite.com</code>+
  
-Et on recharge : ''​service apache2 reload''​.\\ ​ 
- 
-===Création d'un nouvel Virtualhost === 
   * Par exemple du nom de "​web"​   * Par exemple du nom de "​web"​
 <code root>​adduser --system web --ingroup www-data</​code>​ <code root>​adduser --system web --ingroup www-data</​code>​
  
-  * On lui crée un mot de passe :+  * On lui crée un mot de passe système ​:
 <code root> passwd web</​code> ​ <code root> passwd web</​code> ​
  
-  * On crée les fichiers du site web, par exemple du nom de "pegaseous.com":​ +  * On crée les fichiers du site web, "monsite.com" ​dans /home/web/: 
-<​code>​mkdir -p pegaseous.com/public_htlm</​code>​+<code root>cd /​home/​web/</​code>​ 
 +<​code>​mkdir -p monsite.com/public_html</​code>​
  
-  * On corrige l'​appartenance et les droits ​:+  * On édite un index pour le dossier /​home/​web/​monsite.com/​public_html/  ​: 
 +Le module php5 est en place et a été testé, donc on peut créer un "​index.php"​.
  
-<code root>chown -R root:​www-data ​/​home/​web/ ​&& chmod -R 755 /home/web/</​code>​+<code root>vim /home/web/monsite.com/public_html/index.php</​code>​ 
 +<​code><​html>​ 
 + <​body>​ 
 + <​h1>​Bienvenue sur monsite.com</​h1>​ 
 +  <​p>​Site en cours de réalisation !</​p>​ 
 +  <?php 
 +  echo "La date du jour est " . date("​d/​m/​Y"​) . "​!\n";​ 
 +  ?> 
 + </​body>​ 
 +</html></​code>​
  
-  * On édite ​un index : +====Restreindre l'​accès à "​monsite.com"​ par login et mot de passe apache2==== 
-<code root>vim /home/web/​pegaseous.com/​public_htlm/​index.html</​code>​+La création d'un mot de passe sécurise un peu l'​accès du site qu'on va crée pour le nouvel virtualhost.\\ ​ 
 +**Pour ce faire on va créer en correspondance au utilisateur "web" du système Linux, un mot de passe apache avec la commande ''​htpasswd''​**.
  
-  * On crée un lien symbolique vers /var/www : +===Création d'un mot de passe pour accéder à "​monsite.com"=== 
-<code root>ln -s /​home/​web/​pegaseous.com/ /var/​www/​pegaseous.com</​code>​+Le dossier ​/etc/local est un bon endroit pour créer les fichiers de mots de passe apache.
  
-  * On édite un fichier ​/etc/apache2/sites-available/pegaseous.com : +<code root>​cd ​/usr/local&& ls</code> 
-Pour aller plus vite on peut se servir d'un fichier "​sites-available"​ existant qu'on modifie. Par exemple celui du site "​monsite.com"​.+<​code>​bin ​ etc  games  include ​ lib  man  sbin  share  src</​code>​
  
-Si on a suivi le wiki du début ​+  * Il faut créer un dossier apache ​du nom de son choix : 
-<​code>​cp /​etc/​apache2/​sites-available/monsite.com /​etc/​apache2/​sites-available/pegaseous.com</​code>​+Par exemple "​passwd"​ 
 +<​code ​root>mkdir -p apache/passwd && cd apache/passwd</​code>​
  
-Si on a pas de fichier ​: ''​vim /​etc/​apache2/​sites-available/​pegaseous.com'' ​et on y colle ce qui suit.+  * Il faut générer des mots de passe pour l'​utilisateur apache2: 
 +La commande ​''​htpasswd'' ​va créer un fichier ​qui contiendra utilisateur apache /mot de passe 
 +<code root>​htpasswd -c passwords web</​code>​ 
 +<​code>​New password:  
 +Re-type new password:  
 +Adding password for user web</​code>​
  
-<code text><​VirtualHost *:80> +-''​-c''​ pour la première fois qu'on crée un mot de passe. Si on l'​utilisait une deuxième fois pour le même fichier "​passwords",​ pour un deuxième utilisateur,​ on écrasera le contenu du fichier, et on perdrait le mot de passe du premier utilisateur. ​ Donc pour un éventuel deuxième utilisateur "​toto"​''​htpasswd passwords toto''​.\\  
-        ServerAdmin webmaster@localhost +-> le mot de passe est chiffré.
-        ServerName pegaseous.com +
-        ​ServerAlias www.pegaseous.com+
  
-        DocumentRoot /​var/​www/​pegaseous.com+<note tip> 
 +**Pour supprimer un utilisateur :**
  
 +<code root>​htpasswd -D /​usr/​local/​apache/​passwd/​passwords nom_de_l'​utilisateur</​code>​
 +</​note>​
 +
 +  * On peut aussi créer un groupe par exemple aussi dans le même dossier /​usr/​local/​apache/​passwd/​
 +Par exemple du nom de "​groups"​ :
 +<code root>vim groups</​code>​
 +<​code>​goupe1:​ web</​code>​
 +
 +====Modifier les fichiers des sites actifs de /​etc/​apache2/​sites-available ====
 +Pour restreindre l'​accès à "​monsite.com",​ il faut modifier d'​abord le virtualhost "/​etc/​apache2/​sites-available/​default"​
 +
 +===Pour "/​etc/​apache2/​sites-available/​default" ​ ===
 +Cela est nécessaire pour restreindre l'​accès du site qui est développé dans le répertoire de l'​utilisateur /​home/​web/​monsite.com qu'on a créé.
 +
 +  * On modifie "/​etc/​apache2/​sites-available/​default"​ comme ceci :
 +
 +<code root>vim /​etc/​apache2/​sites-available/​default</​code>​
 +<​code>​
 +<​VirtualHost *:80>
 +        ServerAdmin webmaster@localhost
 +
 +        DocumentRoot /var/www
         <​Directory />         <​Directory />
                 Options FollowSymLinks                 Options FollowSymLinks
-                AllowOverride ​None+                AllowOverride ​AuthConfig 
 +                Order deny,​allow 
 +                deny from all 
 +                allow from 192.168.0.0/​24
         </​Directory>​         </​Directory>​
         <​Directory /​var/​www/>​         <​Directory /​var/​www/>​
-                ​Options -Indexes +                ​AuthName "Ma zone est restreinte !" 
-                ​Options +FollowSymLinks +                ​AuthBasicProvider file 
-               Options -Includes +                ​AuthUserFile /​usr/​local/​apache/​passwd/​passwords 
-                ​Options -ExecCGI +                ​AuthGroupFile /​usr/​local/​apache/​passwd/​groups 
-                ​Options MultiViews+                ​Require user web 
 +                require group group1 
 +                 
 +        </​Directory>​ 
 + 
 +        ScriptAlias /cgi-bin/ /​usr/​lib/​cgi-bin/​ 
 +        <​Directory "/​usr/​lib/​cgi-bin">​
                 AllowOverride None                 AllowOverride None
 +                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
 +                Order allow,deny
 +                Allow from all
 +        </​Directory>​
 +        ErrorLog ${APACHE_LOG_DIR}/​error.log
 +
 +        # Possible values include: debug, info, notice, warn, error, crit,
 +        # alert, emerg.
 +        LogLevel warn
 +
 +        CustomLog ${APACHE_LOG_DIR}/​access.log combined
 +</​code>​
 +
 +<​note>​
 +**Bien remarquer que pour pouvoir ajouter cette directive**\\ ​
 +-> on a mis ''​AllowOverride AuthConfig''​ à la place de ''​AllowOverride None''​ non seulement dans la directive "<​Directory /​var/​www/>"​.\\ mais aussi dans "<​Directory />"​.
 +
 +**Pour autoriser l'​accès à tous les utilisateurs** qui ont un mot de passe apache :\\ 
 +-> ''​Require user web''​\\ ​
 +-> ''​Require group groupe1''​\\ ​
 +
 +**On aurrait pu mettre** :\\ 
 +-> ''​Require valid-user''​\\ ​
 +Voir aussi la directive "​Satisfy"​ : [[http://​httpd.apache.org/​docs/​2.2/​howto/​auth.html]]
 +
 +
 +**Pour sécuriser l'​accès au système de fichier** :\\ 
 +''​Require all denied''​ : interdire aux clients de parcourir l'​ensemble du système de fichiers. Ceci va interdire l'​accès par défaut à tous les fichiers du système de fichiers; Ensuite on autorise section par section. Voir [[http://​httpd.apache.org/​docs/​trunk/​fr/​misc/​security_tips.html]] et [[http://​httpd.apache.org/​docs/​2.2/​mod/​core.html#​require| require directive]]\\ ​
 +Pour l'​utiliser avec une zone restreinte, il faut alors l'​inclure dans <​Directory /> et créer la zone restreinte dans une directive séparée :\\ 
 +''<​Directory /​var/​www/​restricted/>​ ... </​Directory>''​
 +</​note>​
 +
 +  * Pour "/​etc/​apache2/​sites-available/​monsite.com"​ : 
 +<code root>vim /​etc/​apache2/​sites-available/​monsite.com</​code> ​
 +
 +<​code>​
 +<​VirtualHost *:80>
 +        ServerAdmin webmaster@localhost
 +        ServerName monsite.com
 +        ServerAlias www.monsite.com
 + 
 +        DocumentRoot /​var/​www/​monsite.com
 + 
 +        <​Directory />
 +                Options -FollowSymLinks
 +                AllowOverride AuthConfig
                 Order deny,allow                 Order deny,allow
                 deny from all                 deny from all
                 allow from 192.168.0.0/​24                 allow from 192.168.0.0/​24
 +        </​Directory>​
 +        <​Directory /​var/​www/​monsite.com>​
 +                Options -Indexes
 +                Options -FollowSymLinks
 +                Options -Includes
 +                Options -ExecCGI
 +                Options MultiViews
 +                AllowOverride AuthConfig
 +                AuthType Basic
 +                AuthName "Ma zone est restreinte !"
 +                AuthBasicProvider file
 +                AuthUserFile /​usr/​local/​apache/​passwd/​passwords
 +                AuthGroupFile /​usr/​local/​apache/​passwd/​groups
 +                Require user web
         </​Directory>​         </​Directory>​
         ScriptAlias /cgi-bin/ /​usr/​lib/​cgi-bin/​         ScriptAlias /cgi-bin/ /​usr/​lib/​cgi-bin/​
Ligne 396: Ligne 570:
                 Allow from all                 Allow from all
         </​Directory>​         </​Directory>​
 + 
         ErrorLog ${APACHE_LOG_DIR}/​error.log         ErrorLog ${APACHE_LOG_DIR}/​error.log
 + 
         # Possible values include: debug, info, notice, warn, error, crit,         # Possible values include: debug, info, notice, warn, error, crit,
         # alert, emerg.         # alert, emerg.
Ligne 406: Ligne 580:
 </​code>​ </​code>​
  
-  * On active ​le site pegaseous.com : +===On supprime ​le fichier "​monsite.com" de /var/www/ === 
-<code root>a2ensite pegaseous.com</​code>​+(Si on a suivi précédemment ​[[atelier:​chantier:​apache2#​creation-du-site-web-dans-var-www|création de "​monsite.com"​ dans /​var/​www/​]]) 
 +<code root>cd /​var/​www/</​code>​ 
 +<code root>rm -r monsite.com</​code>​
  
-Et on recharge : ''​service apache2 reload''​.+===On crée un lien symbolique à la place===  
 +Le nom symbolique doit avoir pour nom celui du site ("​monsite.com") et il faut le placer dans /var/www/ et le faire pointer vers les répertoires et fichiers où le site est développé (/​home/​web/​monsite.com/​) :
  
-  * Enfin on teste tout ça  +<code root>ln -s /home/web/monsite.com/ /​var/​www/​monsite.com</​code>​
-Au niveau du navigateur : ''​http:​//ip-du-serveur/pegaseous.com''​+
  
-<​code>​Index of /​pegaseous.com +====Vérifier l'​appartenance et les droits des fichiers utilisés par "​apache"​====
-[ICO] Name Last modified Size Description +
-[DIR] Parent Directory -  +
-[DIR] public_htlm/​ 20-Sep-2014 09:15 -  +
-</​code>​+
  
-Si on clique sur : ''​public_html'​' ​+===Modifier le groupe de /var/www === 
 +Le groupe www-data ne doit pas être propriétaire de /var/www/ mais ce répertoire peut appartenir au groupe www-data. L'idée est ainsi de diminuer au maximum les droits du groupe www-data, tout en laissant possible la consultation du site web.
  
-<​code>​Bienvenue sur pegaseous.com+<code root>​chown -R root:​www-data /​var/​www/​*</​code>
  
-Site en cours de réalisation !</code>+===On vérifie les droits POSIX de /var/www/ === 
 +<note important> 
 +A priori le fichier /​var/​www/​index.php,​ au même titre que n'​importe quelle page web accessible depuis un navigateur web, devrait avoir les droits suivants :
  
-On peut réactiver "​monsite"​ si on le souhaite. +<code>-rw-r----- 1 root www-data 4096 sept22 11:47 index.php</​code>​
-> Dans ce cas on peut accéder à "​monsite"​ en tapant ''​http://​ip-du-serveur/​monsite.com'';​ +
-> ou à "​pegaseous.com"​ en tapant ''​http://​ip-du-serveur/​pegaseous.com''​.+
  
-Il reste à ajouter un module par exemple pour le php.  +On utilise les droits suivants : 
-===== Installer le module php===== +  * droits en lecture <​nowiki>​(r)</​nowiki>​ écriture ​(wsur les fichiers réguliers,​ 
-===Installer libapache2-mod-php5 === +  * droits en lecture <​nowiki>​(r)</​nowiki>​ écriture ​(w) exécution ​(x) sur les répertoires. 
-Ce paquet casse le MPM worker(([[http://​httpd.apache.org/​docs/​2.2/​mod/​worker.html]])) et engendre l'​installation du MPM prefork(([[http://​httpd.apache.org/docs/​2.2/​mod/​prefork.html]])).\\ ​+</note>
  
-<code root>install libapache2-mod-php5</​code>​+  * **Pour le répertoire /var/www** , il faut donc :\\ ''​drwxr-xr-x ​ 2 root root  4096 sept. 22 11:47 www''​ 
 +<code root>chmod 755 /var/www</​code>​
  
 +  * **Pour /​var/​www/​index.php**,​ il faut donc :\\ ''​-rw-r----- 1 root www-data 4096 sept. 22 11:47 index.php''​
 +<code root>​chmod 640 /​var/​www/​index.php</​code>​
  
-Une fois l'​installation effectuée on peut vérifier que php5 est apparu dans /etc/apache2/mod-available+  * **Pour ​/home/web/monsite.com**,​ il faut donc :\\ ''​drwxr-xr-x 3 root www-data 4096 sept22 11:44 monsite.com'':​ 
 +<code root>​chmod 755 /​home/​web/​monsite.com/</​code>​
  
-<code root>ls -l /etc/apache2/mods-available/php5*</​code>​ +  * **Pour ​/home/web/monsite.com/public_html**, il faut donc :\\ ''​drwxr-xr-x 2 root www-data 4096 sept22 11:44 public_html'':​ 
-<​code>​-rw-r--r-- 1 root root 898 août  21 10:49 /​etc/​apache2/​mods-available/​php5.conf +<​code ​root>chmod 755 /home/web/monsite.com/​public_html/​</​code>​
--rw-r--r-- 1 root root  59 août  21 10:49 /etc/apache2/mods-available/​php5.load</​code>​+
  
-Dans /etc/apache2/mod-enabledse sont des liens symboliques qui activent ce module: +  * **Pour ​/home/web/monsite.com/​public_html/​index.php**il faut donc :\\ ''​-rw-r----- 1 root www-data 4096 sept. 22 11:44 index.php''​ 
-<code root>​ls ​-l /​etc/​apache2/​mods-enabled/​php5*</​code>​ +<code root>​chown root:​www-data ​/home/web/monsite.com/public_html/index.php\ 
-<​code>​lrwxrwxrwx ​1 root root 27 sept. 20 11:40 /etc/apache2/mods-enabled/​php5.conf -> ../mods-available/php5.conf + && chmod 640 /home/web/monsite.com/public_html/index.php</​code>​
-lrwxrwxrwx 1 root root 27 sept. 20 11:40 /etc/apache2/mods-enabled/​php5.load -> ../mods-available/php5.load</​code>​+
  
--> Puisque les liens sont là, le module ​est activé.+  * **Pour ​le lien symbolique /​var/​www/​monsite.com** : on ne peut pas modifier ces droits mais ce n'est pas grave. Ce qui compte c'est le fichier vers lequel pointe un lien symbolique.
  
-===Activer/​désactiver un module ​===+===On vérifie depuis son navigateur===
  
-  * ''​a2enmod''​ : (apache2 enable module) : active ​un module apache2 +  * On ré-active ​le site "​default"​
-  * ''​a2dismod''​ : (apache2 disable module) : désactive un module apache2+
  
-Si on active ou désactive un module ne pas oublier après l'​opération de réactiver apache : ''​service apache2 restart''​+<code root>​a2ensite default</​code>​
  
-===Créer la page de test ===+  * On ré-active le site "​monsite.com"​
  
-<​code>​mv /​var/​www/​index.html /​var/​www/​index.php</​code>​ +<code root>a2ensite monsite.com</​code>​
-<code root>vim /​var/​www/​index.php</​code>​ +
-<​code>​ +
-<​html>​ +
- <​body>​ +
-  <​h1>​It works!</​h1>​ +
-  <​p>​This is the default web page for this server.</​p>​ +
-  <?php +
-echo "La date du jour est " . date("​d/​m/​Y"​) . "​!\n";​ +
-  ?> +
- </​body>​ +
-</​html>​ +
-</​code>​+
  
-  * Recharger apache :  +  * On recharge ​apache2 ​:
-  +
-<code root>​service ​apache2 ​restart</​code>​+
  
-  * Tester en tapant dans le navigateur : +<code root>​service apache2 reload</code>
-''​http:​//​ip-du-serveur/''​+
  
-<​code>​It works!+Enfin depuis son navigateur :\\ ''​http://​ip-serveur/​monsite.com/''​\\ ​
  
-This is the default web page for this server. +{{http://​pix.toile-libre.org/upload/img/1411461721.png?​250}} -{{http://​pix.toile-libre.org/​upload/​img/​1411461425.png?​250}}
-La date du jour est 20/09/2014! </code>+
  
-Puisque tout fonctionne pour utiliser php dans les autres sites, il n'y a qu'à modifier le nom de leur page d'​index en index.ph et entrer du code php. 
  
-  ​Par exemple pour "​pegaseous"​ :+8-) **Le login du compte apache (nom de l'​utilisateur du système Linux) est demandé ainsi que son mot de passe et on peut accéder à ses pages d'​index !**
  
-<code root>mv /​home/​web/​pegaseous.com/​public_htlm/​index.html /​home/​web/​pegaseous.com/​public_htlm/​index.php</​code>​+====La journalisation (Logging) ==== 
 +Il en faut consulter régulièrement au moins deux : Les logs d'​erreur et les logs d'​accès au serveur.
  
-<code root>vim /​home/​web/​pegaseous.com/​public_htlm/​index.php</​code>​ +===Paramétrer la journalisation === 
-<​code><​html>​ +Le niveau ​de consignation souhaité dépend de la directive ''​LogLevel'',​ dans le fichier de configuration par défaut ''​/etc/apache2/apache2.conf''​ qui est réglé par défaut sur :
- <​body>​ +
- <​h1>​Bienvenue sur pegaseous.com</​h1>​ +
-  <​p>​Site en cours de réalisation !</p> +
-<?php +
-echo "La date du jour est " . date("​d/m/Y"​) ​"​!\n";​ +
-  ?> +
- </​body>​ +
-</​html></​code>​+
  
-  ​* Recharger apache :  +  ​LogLevel warn
-  +
-<code root>​service apache2 reload</​code>​+
  
-  ​Tester en tapant dans le navigateur ​+**Ainsi paramétrer apache inscrit des logs d'​erreur.** 
-''​http://ip-du-serveur/​pegaseous.com''​+On peut mettre l'un des neuf niveau d'​alerte,​ pour être alerter de la moindre information jusqu'​au alerte grave 
 + -''​trace''​ : traçage des informations de différents niveaux (produit une grande quantité d'​informations);​\\  
 + ''​debug''​ : informations de débogage qui peut être utile pour repérer où un problème ;\\  
 + - ''​info'': ​ message d'​information qui pourrait être bon à savoir;\\  
 + - ''​notice''​ : signal un événement normal, mais à noter;\\  
 + - ''​warn''​ : signal un événement anormal, mais pas très préoccupant;​\\  
 + - ''​error''​ : signal que quelque chose a échoué;\\  
 + - ''​crit''​ : problèmes importants qui doivent être pris en compte;​\\ ​  
 + - ''​alert''​ : situation grave qui nécessite rapidement une action;​\\ ​  
 + - ''​emerg''​ : urgence de la situation, le système est dans un état inutilisable.\\ ​
  
-et cliquer sur ''​public_htlm/''​ :+-> Par défaut, on est informé à partir du niveau choisi jusqu'au niveau le plus grave.\\ ​
  
-<​code>​Bienvenue sur pegaseous.com+===Où Apache conserve-t-il ses journaux? ​ ===
  
-Site en cours de réalisation ! +Dans le fichier général **/etc/apache2/apache2.conf** une ligne indique le fichier où sont consigné les logs : 
-La date du jour est 20/09/2014! </code>+
  
-Tous les outils sont en place pour apprendre ​les langages html et php ! 8-)+  ErrorLog ${APACHE_LOG_DIR}/​error.log 
 + 
 +> Cette directive nomme le fichier où Apache tiendra ses messages d'​erreur. Comme vous pouvez le voir, il utilise une variable d'​environnement appelée "​APACHE_LOG_DIR" ​pour obtenir le préfixe du chemin de répertoire. 
 +> Pour savoir vers quel fichier renvoie cette variable d'​environnement il faut consulter le fichier **''/​etc/​apache2/​envvars''​** 
 + 
 +  export APACHE_LOG_DIR=/​var/​log/​apache2$SUFFIX 
 + 
 +>  Cela signifie que lorsqu'​il est combiné avec la directive (variable "​SUFFIX"​) dans le fichier "​apache2.conf",​ **Apache enregistre ​les logs d'​erreur dans un fichier appelé ''/​var/​log/​apache2/​error.log''​**. 
 + 
 +<code root>ls /​var/​log/​apache2</​code>​ 
 +<​code>​access.log ​ error.log ​ other_vhosts_access.log</​code>​ 
 + 
 +===Les logs d'​accès au serveur === 
 +Très important pour la sécurisation du serveur. On peut savoir s'il y a eu des tentatives de piratage.\\  
 + 
 +Ces logs sont consignés par défaut dans le fichier **''/​var/​log/​apache2/​access.log''​**.\\  
 + 
 +Le paramétrage des logs d'​accès n'est pas dans le fichier de configuration générale /​etc/​apache2/​apache2.conf,​ mais dans le fichier de l'​hôte par défaut.\\  
 + 
 +La déclaration du journal d'​accès se trouve donc dans : **''/​etc/​apache2/​sites-available/​default''​**. 
 + 
 +Nous pouvons y trouver trois valeurs distinctes concernant l'​exploitation des logs d'​accès.\\  
 + 
 +<​code>​ErrorLog ${APACHE_LOG_DIR}/​error.log 
 + 
 +LogLevel warn 
 + 
 +CustomLog ${APACHE_LOG_DIR}/​access.log combined</​code>​ 
 + 
 +La définition du journal des erreurs (ErrorLog et Loglevelcorrespond à celle dans le fichier de configuration par général. Il n'est pas nécessaire d'​avoir cette ligne dans les deux fichiers, mais ce doublon permet à modifier ici l'​emplacement des logs pour celui qu'on souhaite.  
 + 
 +===Paramétrer la directive "​CustomLog"​ pour améliorer la sécurité === 
 + 
 +  CustomLog ${APACHE_LOG_DIR}/​access.log combined 
 + 
 +Elle est constituée de deux partie : 
 +  * ${APACHE_LOG_DIR}/​access.log : localisation des logs d'​accès 
 +  * combined : le format des logs par défaut\\ il s'agit d'une étiquette qui renvoie à la directive ''​LogFormat''​ ( personnalisable) dans le fichier de configuration par général ''/​etc/​apache2/​apache2.conf''​ . 
 + 
 +===La directive "​LogFormat"​ /​etc/​apache2/​apache2.conf === 
 +Par défaut : 
 + 
 +  LogFormat "%h %l %u %t \"​%r\"​ %>s %O \"​{Referer}i\"​ \"​%{User-Agent}i\""​ combined 
 + 
 +Pour comprendre chacune de ces variables [[http://​httpd.apache.org/​docs/​2.2/​mod/​mod_log_config.html#​formats|voir la documentation d'​apache]]. 
 + 
 +  * Voici par exemple ma configuration :
  
 +<​code>​LogFormat "%h %l %u %t \"​%r\"​ %s %b" common</​code>​
 +> ''​%h''​ : sera remplacée par le nom de l'​hôte distant
 +> %l     : sera remplacée par logname a distance. Il faut que [[http://​httpd.apache.org/​docs/​2.2/​en/​mod/​mod_ident.html|le module "​mod_ident"​]] soit présent et que [[http://​httpd.apache.org/​docs/​2.2/​en/​mod/​mod_ident.html#​identitycheck|la directive "​IdentityCheck"​]] soit activé ("​On"​).
 +> u%     : sera remplacée par utilisateur distant.
 +> %t     : sera remplacée par moment où la demande a été reçue (format standard anglais)
 +> \"​%r\"​ : sera remplacée par la ligne de demande.
 +> %s     : sera remplacée par le statut de la demande.
 +> %b     : sera remplacée par la taille de la réponse en octets, à l'​exception des en-têtes HTTP. Dans le format CLF, I.S. un «-» plutôt que d'un 0 si aucune octets sont envoyés.
  
 +Pour aller plus loin, par exemple pour la rotation des journaux voir [[http://​httpd.apache.org/​docs/​trunk/​fr/​logs.html]]
doc/reseau/apache2/tp01.txt · Dernière modification: 01/11/2019 08:43 par smolski

Pied de page des forums

Propulsé par FluxBB