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 [22/09/2014 18:04]
Hypathie [Sécuriser son site web]
doc:reseau:apache2:tp01 [23/09/2014 14:53]
Hypathie [Sécuriser son site web]
Ligne 375: Ligne 375:
         <​Directory />         <​Directory />
                 Options -FollowSymLinks                 Options -FollowSymLinks
-                AllowOverride ​AuthConfig+                AllowOverride ​None
         </​Directory>​         </​Directory>​
         <​Directory /​var/​www/>​         <​Directory /​var/​www/>​
Ligne 394: Ligne 394:
 >  ''​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. Désactiver cette option seulement 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]])).
 +
 +> Si on ne peut pas mettre l'​option ''​-FollowSymLinks''​ dans le fichier "​sites-available/​default",​ on peut dans celui de son site.
 +
 +> 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]]
  
 ====Création d'un nouvelle utilisateur du système Linux==== ====Création d'un nouvelle utilisateur du système Linux====
-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/ ! Cela évitera aussi de mettre en place le module [[http://​httpd.apache.org/​docs/​current/​fr/​mod/​mod_userdir.html|userdir]] déconseillé par la documentation d'​apache.+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/ !  
 + 
 +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"​))
  
   * Par exemple du nom de "​web"​   * Par exemple du nom de "​web"​
Ligne 414: Ligne 422:
 <​code><​html>​ <​code><​html>​
  <​body>​  <​body>​
- <​h1>​Bienvenue sur pegaseous.com</​h1>​+ <​h1>​Bienvenue sur monsite.com</​h1>​
   <​p>​Site en cours de réalisation !</p>   <​p>​Site en cours de réalisation !</p>
   <?php   <?php
Ligne 422: Ligne 430:
 </​html></​code>​ </​html></​code>​
  
-====Restreindre l'​accès à "​monsite.com"​ par login et mot de passe ====+====Restreindre l'​accès à "​monsite.com"​ par login et mot de passe apache2====
 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.\\ ​ 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 ​un compte ​utilisateur du système Linux et un compte ​apache avec la commande htpasswd.+**Pour ce faire on va créer ​en correspondance au utilisateur ​"​web" ​du système Linuxun mot de passe apache avec la commande ​''​htpasswd''​**.
  
 ===Création d'un mot de passe pour accéder à "​monsite.com"​=== ===Création d'un mot de passe pour accéder à "​monsite.com"​===
-Le dossier /etc/local est un bon endroit pour créer les fichiers de mots de passe de ce compte ​apache.+Le dossier /etc/local est un bon endroit pour créer les fichiers de mots de passe apache.
  
 <code root>cd /usr/local/ && ls</​code>​ <code root>cd /usr/local/ && ls</​code>​
Ligne 449: Ligne 457:
 Par exemple du nom de "​groups"​ : Par exemple du nom de "​groups"​ :
 <code root>vim groups</​code>​ <code root>vim groups</​code>​
-<​code>​goupe1 web toto</​code>​+<​code>​goupe1web</​code>​
  
 ====Modifier les fichiers des sites actifs de /​etc/​apache2/​sites-available ==== ====Modifier les fichiers des sites actifs de /​etc/​apache2/​sites-available ====
Ligne 468: Ligne 476:
                 Options FollowSymLinks                 Options FollowSymLinks
                 AllowOverride AuthConfig                 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 FollowSymLinks MultiViews 
-                AllowOverride AuthConfig 
-                Order allow,deny 
-                allow from all 
-                AuthType Basic 
                 AuthName "Ma zone est restreinte !"                 AuthName "Ma zone est restreinte !"
                 AuthBasicProvider file                 AuthBasicProvider file
                 AuthUserFile /​usr/​local/​apache/​passwd/​passwords                 AuthUserFile /​usr/​local/​apache/​passwd/​passwords
                 AuthGroupFile /​usr/​local/​apache/​passwd/​groups                 AuthGroupFile /​usr/​local/​apache/​passwd/​groups
-                Require ​valid-user+                Require user web 
 +                require group group1 
 +                ​
         </​Directory>​         </​Directory>​
 +
 +        ScriptAlias /cgi-bin/ /​usr/​lib/​cgi-bin/​
 +        <​Directory "/​usr/​lib/​cgi-bin">​
 +                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>​ </​code>​
  
 <​note>​ <​note>​
 **Bien remarquer que pour pouvoir ajouter cette directive**\\ ​ **Bien remarquer que pour pouvoir ajouter cette directive**\\ ​
--> on a mis ''​AllowOverride AuthConfig''​ à la place de ''​AllowOverride ​none''​. +-> 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 :\\  **Pour autoriser l'​accès à tous les utilisateurs** qui ont un mot de passe apache :\\ 
--> ''​Require valid-user''​\\ ​ 
- 
-**On aurrait pu mettre** :\\  
 -> ''​Require user web''​\\ ​ -> ''​Require user web''​\\ ​
 -> ''​Require group groupe1''​\\ ​ -> ''​Require group groupe1''​\\ ​
  
-**On remarque que l'option ​''​Options ​-FollowSymLinks''​** : qui évite de suivre les liens symbolique depuis ​la racine ​/var/www +**On aurrait pu mettre** :\\  
-</note>+-> ''​Require valid-user''​\\  
 +Voir aussi la directive "​Satisfy"​ : [[http://httpd.apache.org/docs/​2.2/​howto/​auth.html]]
  
-===Pour "/​etc/​apache2/​sites-available/​monsite.com"​=== 
  
-<code root>vim /​etc/​apache2/​sites-available/​monsite.com</​code>​+**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>​ <​code>​
Ligne 513: Ligne 539:
                 Options -FollowSymLinks                 Options -FollowSymLinks
                 AllowOverride AuthConfig                 AllowOverride AuthConfig
 +                Order deny,allow
 +                deny from all
 +                allow from 192.168.0.0/​24
         </​Directory>​         </​Directory>​
-        <​Directory /​var/​www/>​+        <​Directory /var/www/monsite.com>
                 Options -Indexes                 Options -Indexes
                 Options -FollowSymLinks                 Options -FollowSymLinks
Ligne 520: Ligne 549:
                 Options -ExecCGI                 Options -ExecCGI
                 Options MultiViews                 Options MultiViews
-                AllowOverride ​None +                AllowOverride ​AuthConfig 
-                ​Order deny,allow +                ​AuthType Basic 
-                ​deny from all +                ​AuthName "Ma zone est restreinte !" 
-                ​allow from 192.168.0.0/24+                ​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 542: Ligne 574:
 </​code>​ </​code>​
  
-  * On supprime le fichier "​monsite.com"​ de /​var/​www/ ​:+===On supprime le fichier "​monsite.com"​ de /​var/​www/ ​===
 (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/​]]) (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>cd /​var/​www/</​code>​
 <code root>rm -r monsite.com</​code>​ <code root>rm -r monsite.com</​code>​
  
-  * On crée un lien symbolique "​monsite.com"​ dans /var/www/ vers /​home/​web/​monsite.com/​ :+===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/​: 
 <code root>ln -s /​home/​web/​monsite.com/​ /​var/​www/​monsite.com</​code>​ <code root>ln -s /​home/​web/​monsite.com/​ /​var/​www/​monsite.com</​code>​
  
Ligne 553: Ligne 587:
  
 ===Modifier le groupe de /var/www === ===Modifier le groupe de /var/www ===
-Le groupe www-data ne doit pas être propriétaire de /var/www/ ce fichier ​peut appartenir ​à son groupe.+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 root>​chown -R root:​www-data /​var/​www/​*</​code>​ <code root>​chown -R root:​www-data /​var/​www/​*</​code>​
Ligne 561: Ligne 595:
 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 : 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 :
  
-  ​-rw-r----- 1 root www-data 4096 sept. 22 11:47 index.php+<​code>​-rw-r----- 1 root www-data 4096 sept. 22 11:47 index.php</​code>​
  
 On utilise les droits suivants : On utilise les droits suivants :
Ligne 600: Ligne 634:
 <code root>​service apache2 reload</​code>​ <code root>​service apache2 reload</​code>​
  
-Enfin depuis son navigateur : ''​http://​ip-serveur/​monsite.com/''​\\ ​+Enfin depuis son navigateur :\\ ''​http://​ip-serveur/​monsite.com/''​\\ ​ 
 + 
 +{{http://​pix.toile-libre.org/​upload/​img/​1411461721.png?​250}} -> {{http://​pix.toile-libre.org/​upload/​img/​1411461425.png?​250}} 
  
 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 !** 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 !**
  
 +====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.
 +
 +===Paramétrer la journalisation ===
 +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 :
 +
 +  LogLevel warn
 +
 +**Ainsi paramétrer apache inscrit des logs d'​erreur.**
 +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.\\ ​
 +
 +-> Par défaut, on est informé à partir du niveau choisi jusqu'​au niveau le plus grave.\\ ​
 +
 +===Où Apache conserve-t-il ses journaux? ​ ===
 +
 +Dans le fichier général **/​etc/​apache2/​apache2.conf** une ligne indique le fichier où sont consigné les logs : 
 +
 +  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 Loglevel) correspond à 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