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
apache2 [Le 23/06/2019, 13:27]
82.237.71.42 [Fichiers de configuration]
apache2 [Le 12/10/2023, 11:28] (Version actuelle)
krodelabestiole [Création d'hôtes virtuels] +pi-hole
Ligne 1: Ligne 1:
-{{tag>​réseau serveur internet ​Xenial Bionic}} +{{tag>​réseau serveur internet ​Focal}} 
- +{{ :​logo:​apache-logo.png?​80nolink| Logo du logiciel Apache 2}}
----- +
-{{ apache_logo.png?​80nolink| Logo du logiciel Apache 2}}+
  
 ====== Serveur HTTP Apache 2 ====== ====== Serveur HTTP Apache 2 ======
  
-Un [[https://​fr.wikipedia.org/​wiki/​Serveur_HTTP|serveur HTTP]] permet à un site web de communiquer avec un navigateur en utilisant le protocole [[https://​fr.wikipedia.org/​wiki/​Hypertext_Transfer_Protocol|HTTP(S)]] et ses extensions ([[https://​fr.wikipedia.org/​wiki/​WebDAV|WebDAV]],​ etc.). **Apache** est probablement le serveur HTTP le plus populaire. C'est donc lui qui met à disposition la plupart des sites internet ​du [[https://​fr.wikipedia.org/​wiki/​World_Wide_Web|WWW]].\\+Un [[wpfr>Serveur_HTTP|serveur HTTP]] permet à un site web de communiquer avec un navigateur en utilisant le protocole [[wpfr>Hypertext_Transfer_Protocol|HTTP(S)]] et ses extensions ([[wpfr>WebDAV|WebDAV]],​ etc.). **Apache** est probablement le serveur HTTP le plus populaire. C'est donc lui qui met à disposition la plupart des sites Web du [[wpfr>World_Wide_Web|WWW]].\\
 Il est produit par la //Apache Software Foundation//​. C'est un logiciel libre fourni sous la [[wpfr>​Licence_Apache|licence spécifique Apache]]. Il est produit par la //Apache Software Foundation//​. C'est un logiciel libre fourni sous la [[wpfr>​Licence_Apache|licence spécifique Apache]].
  
Ligne 17: Ligne 15:
 ===== Installation ===== ===== Installation =====
  
-Pour installer Apache seul, [[:​tutoriel:​comment_installer_un_paquet|installez simplement le paquet]] **[[apt>apache2|apache2]]**.+Pour installer Apache seul, [[:​tutoriel:​comment_installer_un_paquet|installez simplement le paquet]] **[[apt>​apache2]]**.
  
 Pour installer Apache avec PHP et MySQL ou MariaDB, reportez vous à l'​[[:​lamp#​installation|installation de LAMP]]. Pour installer Apache avec PHP et MySQL ou MariaDB, reportez vous à l'​[[:​lamp#​installation|installation de LAMP]].
Ligne 40: Ligne 38:
 ==== Autres commandes utiles ==== ==== Autres commandes utiles ====
  
-Pour arrêter apache2 : +  * Pour arrêter apache2 : ''​sudo systemctl stop apache2''​ 
-<​code>​sudo systemctl stop apache2</​code>​ +  ​* ​Pour lancer apache2 : ''​sudo systemctl start apache2''​ 
- +  ​* ​Pour relancer apache2 : ''​sudo systemctl restart apache2''​ 
-Pour lancer apache2 : +  ​* ​Pour recharger la configuration d'​apache2 : ''​sudo systemctl reload apache2''​ 
-<​code>​sudo systemctl start apache2</​code>​ +  ​* ​Pour voir la version d'​Apache utilisée : ''​sudo apache2ctl -v''​ ou ''​a2query -v''​ 
- +  ​* ​Pour tester l'​ensemble de la configuration d'​Apache : ''​sudo apache2ctl -t''​ 
-Pour relancer apache2 :  +  * Pour lister les hôtes virtuels chargés : ''​a2query -s''​ 
-<​code>​sudo systemctl restart apache2</​code>​ +  * Pour lister les hôtes virtuels chargés et leurs configurations : ''​sudo apache2ctl -S''​ 
- +  ​* ​Pour tester la configuration des hôtes virtuels : ''​sudo apache2ctl -t -D DUMP_VHOSTS''​ 
-Pour recharger la configuration d'​apache2 : +  ​* ​Pour voir les modules d'​Apache chargés : ''​sudo apache2ctl -M''​ ou ''​a2query -m''​
-<​code>​sudo systemctl reload apache2</​code>​ +
-  +
-Pour voir la version d'​Apache utilisée : +
-<​code>​sudo apache2ctl -v</​code>​ +
- +
-Pour tester l'​ensemble de la configuration d'​Apache : +
-<​code>​sudo apache2ctl -t</​code>​ +
- +
-Pour tester la configuration des hôtes virtuels : +
-<​code>​sudo apache2ctl -t -D DUMP_VHOSTS</​code>​ +
- +
-Pour voir les modules d'​Apache chargés : +
-<​code>​sudo apache2ctl -M</​code>​+
  
 ===== Mode de fonctionnement sommaire ===== ===== Mode de fonctionnement sommaire =====
Ligne 68: Ligne 53:
 Lorsqu'​il démarre, Apache charge les fichiers de configuration et se met en attente de requêtes sur les interfaces réseaux. On dit qu'il écoute (//listen// en anglais) certains ports. Lorsqu'​il démarre, Apache charge les fichiers de configuration et se met en attente de requêtes sur les interfaces réseaux. On dit qu'il écoute (//listen// en anglais) certains ports.
  
-Lorsqu'​on utilise un navigateur web, que l'on clique sur un lien ou qu'on rentre directement une [[web#​url|URL]] dans la barre d'​adresse,​ on effectue une requête : +Lorsqu'​on utilise un navigateur web, que l'on clique sur un lien ou qu'on rentre directement une [[web#​url|URL]] dans la barre d'​adresse,​ on effectue une requête :
   * Le navigateur résout le nom de domaine (il obtient l'​adresse IP du serveur).   * Le navigateur résout le nom de domaine (il obtient l'​adresse IP du serveur).
   * Il envoie une requête HTTP avec la méthode GET à l'IP du serveur sur le port 80 (ou HTTPS sur le port 443) pour lui demander de retourner un contenu particulier.   * Il envoie une requête HTTP avec la méthode GET à l'IP du serveur sur le port 80 (ou HTTPS sur le port 443) pour lui demander de retourner un contenu particulier.
   * Le serveur HTTP reçoit la requête, et en fonction de divers paramètres (URL appelée, configuration du serveur, etc.), va chercher un contenu dans un fichier ou lance un script qui va générer un contenu.   * Le serveur HTTP reçoit la requête, et en fonction de divers paramètres (URL appelée, configuration du serveur, etc.), va chercher un contenu dans un fichier ou lance un script qui va générer un contenu.
-  * Le serveur renvoie ce contenu à l'IP du navigateur ​depuis le même port (80 ou 443).+  * Le serveur renvoie ce contenu à l'IP du navigateur.
   * Le navigateur traite le contenu et le rend accessible à l'​internaute (en l'​affichant à l'​écran par ex.).   * Le navigateur traite le contenu et le rend accessible à l'​internaute (en l'​affichant à l'​écran par ex.).
  
Ligne 91: Ligne 76:
   * ''​mods-enabled''​ contient des [[:​lien_physique_et_symbolique|liens symboliques]] vers les configurations,​ dans ''​mods-available'',​ des modules activés   * ''​mods-enabled''​ contient des [[:​lien_physique_et_symbolique|liens symboliques]] vers les configurations,​ dans ''​mods-available'',​ des modules activés
  
-<note important>​Normalement les fichiers de configuration globale ''​apache2.conf'',​ ''​envars''​ et ''​ports.conf''​ n'ont pas à être modifiés. Toute la configuration devrait se faire dans les sous dossiers ''​xxx-available''​.</​note>​+<note important>​Normalement les fichiers de configuration globale ''​apache2.conf'',​ ''​envars''​ et ''​ports.conf''​ n'ont pas à être modifiés. 
 + 
 +Ces fichiers généraux sont susceptibles d'​être écrasés lors d'une mise à jour majeure de son système, et on perd dans ce cas sa configuration personnalisée. 
 + 
 +Toute la configuration devrait se faire dans les sous dossiers ''​xxx-available''​.</​note>​
  
 Les diverses configurations sont activées (''​a2en''​ pour //Apache 2 enable//) ou désactivées (''​a2dis''​ pour //Apache 2 disable//) avec les commandes suivantes : Les diverses configurations sont activées (''​a2en''​ pour //Apache 2 enable//) ou désactivées (''​a2dis''​ pour //Apache 2 disable//) avec les commandes suivantes :
Ligne 128: Ligne 117:
  
 <note important>​ <note important>​
-Ce chapitre est ici à titre d'​information.\\  +Ce chapitre est ici à titre d'​information. 
-Il n'est a priori pas nécessaire de modifier les fichiers existant par défaut. Chaque site ou service devrait correspondre à un hôte virtuel unique, définit dans un fichier indépendant (voir [[#​creation_d_hotes_virtuels|création d'​hôtes virtuels]]).\\ +Il n'est a priori pas nécessaire de modifier les fichiers existant par défaut. Chaque site ou service devrait correspondre à un hôte virtuel unique, définit dans un fichier indépendant (voir [[#​creation_d_hotes_virtuels|création d'​hôtes virtuels]]).
 De plus ces fichiers existant par défaut peuvent éventuellement être écrasés lors de mises à jour majeures du système. De plus ces fichiers existant par défaut peuvent éventuellement être écrasés lors de mises à jour majeures du système.
 </​note>​ </​note>​
Ligne 194: Ligne 183:
 CustomLog /​var/​log/​apache2/​access.example.com.log combined</​file>​ | Il est pratique d'​avoir des logs séparés pour chaque hôte virtuel, afin de ne pas mélanger toutes les informations. | CustomLog /​var/​log/​apache2/​access.example.com.log combined</​file>​ | Il est pratique d'​avoir des logs séparés pour chaque hôte virtuel, afin de ne pas mélanger toutes les informations. |
  
-Après ​avoir l'​avoir créée, il faut activer cette configuration avec la commande ''​sudo a2ensite [nom du fichier sans son extension]''​. Par exemple :+Après l'​avoir créée, il faut activer cette configuration avec la commande ''​sudo a2ensite [nom du fichier sans son extension]''​. Par exemple :
 <​code>​sudo a2ensite example.com</​code>​ <​code>​sudo a2ensite example.com</​code>​
 On recharge ensuite la configuration d'​Apache : On recharge ensuite la configuration d'​Apache :
 <​code>​sudo systemctl reload apache2</​code>​ <​code>​sudo systemctl reload apache2</​code>​
  
-<note tip>On peut définir un hôte virtuel ​par un nom de domaine même sans avoir de nom de domaine enregistré chez un registrar.+<note tip> 
 +On peut définir un hôte virtuel sans avoir de nom de domaine enregistré chez un registrar
 +Cela peut être très pratique en phase de développement sur une machine ou un réseau local, par exemple.
  
-Il faut dans ce cas résoudre l'IP du serveur pour un domaine fictif côté client. Cela se fait en [[:​tutoriel:​comment_modifier_un_fichier|éditant le fichier]] ''/​etc/​hosts'' ​côté ​client avec les [[:​sudo|droits d'​administration]] pour y ajouter la ligne : +Il existe plusieurs méthodes :\\  
-<file - hosts>​127.0.0.1 example</​file>​ +\\  
-où ''​127.0.0.1''​ est l'​adresse IP du serveur (locale dans ce cas) et ''​example''​ est le nom de domaine choisi.\\+ 
 +  * on peut utiliser un sous-domaine de ''​localhost'',​ comme ''​example.localhost'',​ qui pointera directement sur la machine locale (et qui ne sera donc valable que sur la machine qui fait tourner Apache)\\  
 +\\  
 + 
 +  * on peut profiter des services [[:​zeroconf#​mDNS]] qui sont aujourd'​hui fonctionnels sur la plupart des réseaux domestiques,​ sans qu'on ne touche à rien : on peut tester la connexion depuis le client en tapant la commande ''​ping''​ suivi par le nom de la machine (sans accent et en remplaçant les espaces par des ''​-''​) ''​.local''​ (tout attaché) : 
 +<​code>​ping mon-ordi.local</​code>​ 
 +Si on a une réponse c'est que ça fonctionne, on peut utiliser ce nom de domaine sur le réseau local.\\  
 +\\  
 + 
 +  * ou on peut créer un nouveau nom de domaine "​fictif"​. 
 +Il faut dans ce cas résoudre l'IP du serveur pour un domaine fictif côté client. Cela se fait soit en utilisant un résolveur de DNS local "​menteur"​ (voir le projet [[wpfr>​Pi-hole]] par ex.), soit en [[:​tutoriel:​comment_modifier_un_fichier|éditant le fichier]] ''/​etc/​hosts'' ​de chaque ​client avec les [[:​sudo|droits d'​administration]] pour y ajouter la ligne : 
 +<file - hosts>​127.0.0.1 example.lan</​file>​ 
 +où ''​127.0.0.1''​ est l'​adresse IP du serveur (locale dans ce cas) et ''​example.lan''​ est le nom de domaine choisi.\\
 (Voir la [[:​hosts|documentation concernant le fichier hosts]]) (Voir la [[:​hosts|documentation concernant le fichier hosts]])
  
-Avec la directive ''​ServerName example''​ dans le //​VirtualHost//,​ l'​hôte virtuel sera accessible depuis ce client à l'​adresse [[http://​example/​]].+Avec la directive ''​ServerName example.lan''​ dans le //​VirtualHost//,​ l'​hôte virtuel sera accessible depuis ce client à l'​adresse [[http://​example.lan/]].
  
-Cela peut être très pratique en phase de développement sur une machine ou un réseau localpar exemple.</​note>​+Les TLD recommandés dans ce contexte sont ''​.intranet''​''​.internal'',​ ''​.private'',​ ''​.corp'',​ ''​.home'',​ et ''​.lan''​.(([[https://​datatracker.ietf.org/​doc/​html/​rfc6762#​appendix-G|RFC6732 - Private DNS Namespaces]])) 
 +</​note>​
  
 ===== HTTPS ===== ===== HTTPS =====
Ligne 216: Ligne 220:
 Il n'est ni nécessaire,​ ni faisable de mettre en place HTTPS avec un certificat valide sur un serveur de développement local. Il n'est ni nécessaire,​ ni faisable de mettre en place HTTPS avec un certificat valide sur un serveur de développement local.
  
-Pour rendre disponible les sites de manière sécurisée via HTTPS avec des certificats valides, la solution la plus simple est d'​utiliser l'​outil **[[https://​certbot.eff.org/​|Cerbot]]** de [[https://​letsencrypt.org/​|Let'​s Encrypt]].+Pour rendre disponible les sites de manière sécurisée via HTTPS avec des certificats valides, la solution la plus simple est d'​utiliser l'​outil **[[https://​certbot.eff.org/​|Certbot]]** de [[https://​letsencrypt.org/​|Let'​s Encrypt]].
 <​note>​Vous trouverez une documentation plus détaillée à ce sujet sur [[:​tutoriel:​securiser_apache2_avec_ssl|cette page de la documentation]],​ mais nous verrons ici une méthode spécifique à Apache.</​note>​ <​note>​Vous trouverez une documentation plus détaillée à ce sujet sur [[:​tutoriel:​securiser_apache2_avec_ssl|cette page de la documentation]],​ mais nous verrons ici une méthode spécifique à Apache.</​note>​
  
Ligne 228: Ligne 232:
 ==== Mise en place de HTTPS avec Certbot ==== ==== Mise en place de HTTPS avec Certbot ====
  
-Prérequis : +Prérequis :
   * avoir un ou plusieurs noms de domaine enregistrés,​ pointant sur le serveur depuis plus de 48 heures.   * avoir un ou plusieurs noms de domaine enregistrés,​ pointant sur le serveur depuis plus de 48 heures.
   * avoir un serveur web apache déjà configuré, fonctionnel et accessible publiquement.   * avoir un serveur web apache déjà configuré, fonctionnel et accessible publiquement.
Ligne 236: Ligne 240:
 === Installation de Certbot === === Installation de Certbot ===
  
-Pour installer Certbot, [[:​ppa#​ajout_d_un_ppa_a_vos_sources_logicielles|ajoutez le PPA]] officiel **ppa:​certbot/​certbot**,​ puis installez le paquet [[apt>​python-certbot-apache]] ​+Pour installer Certbot : 
-<​code>​sudo apt install ​python-certbot-apache</​code>​+<​code>​sudo apt install ​python3-certbot-apache</​code>​
  
 === Utilisation de Certbot === === Utilisation de Certbot ===
Ligne 248: Ligne 252:
 Après cette opération les sites devraient être accessibles en HTTPS de manière sécurisée,​ sans que les navigateurs affichent de message d'​alerte. Après cette opération les sites devraient être accessibles en HTTPS de manière sécurisée,​ sans que les navigateurs affichent de message d'​alerte.
  
-<​note>​Grâce à l'​option ''​--apache'',​ Certbot s'​occupe automatiquement de créer des fichiers de configuration de la forme ''/​etc/​apache2/​sites-available/​example.com-le-ssl.conf''​ pour les hôtes virtuels en HTTPS sur le port 443 et de les activer (''​-le-ssl''​ pour //​Let'​s Encrypt//​).</​note>​+<​note>​Grâce à l'​option ''​%%--%%apache'',​ Certbot s'​occupe automatiquement de créer des fichiers de configuration de la forme ''/​etc/​apache2/​sites-available/​example.com-le-ssl.conf''​ pour les hôtes virtuels en HTTPS sur le port 443 et de les activer (''​-le-ssl''​ pour //​Let'​s Encrypt//​).</​note>​
  
 === Renouvellement automatique === === Renouvellement automatique ===
  
-Pour information c'est la commande ''​certbot renew''​ qui permet de renouveler les certificats très simplement, mais Certbot créé automatiquement une [[:​cron|tâche cron]] à cet effet dans ''/​etc/​cron.d/​certbot''​.+Pour information c'est la commande ''​certbot renew''​ qui permet de renouveler les certificats très simplement, mais Certbot créé automatiquement une [[:​cron|tâche cron]] à cet effet dans ''/​etc/​cron.d/​certbot''​. Il est également créé un « //timer// » systemd qui fait la même chose (/​lib/​systemd/​system/​certbot.timer et certbot.service).
  
 Le script est lancé automatiquement toutes les 12 heures, mais les certificats ne seront renouvelés que si nécessaire. En principe il n'y a donc rien à faire. Le script est lancé automatiquement toutes les 12 heures, mais les certificats ne seront renouvelés que si nécessaire. En principe il n'y a donc rien à faire.
Ligne 265: Ligne 269:
  
 <note tip>Ces fichiers sont très pratiques pour redéfinir des paramètres sur un serveur mutualisé à l'​administration duquel on n'a pas accès, ou pour définir dynamiquement des règles spécifiques à certaines solutions web (comme la [[#​mod_rewrite|réécriture d'​URL]]).</​note>​ <note tip>Ces fichiers sont très pratiques pour redéfinir des paramètres sur un serveur mutualisé à l'​administration duquel on n'a pas accès, ou pour définir dynamiquement des règles spécifiques à certaines solutions web (comme la [[#​mod_rewrite|réécriture d'​URL]]).</​note>​
 +
 +Exemple de protection d'un répertoire et d'un fichier dans ce répertoire :
 +<file - .htaccess>​
 +# la ligne ci-dessous va interdire (forbidden) l'​accès au répertoire,​ mais l'​accès à un fichier à la fois du répertoire reste autorisé
 +RedirectMatch 403 ^/​~images/?​$
 +# la ligne ci-dessous va retourner (not found), on peut mettre aussi 403, mais il peut être intéressant que la personne qui tente l'​accès (un robot de hacker par exemple) croit que le fichier n'​existe pas !
 +RedirectMatch 404 ^/​~images/​fichier_à_protéger?​$
 +</​file>​
  
 ===== Index  ===== ===== Index  =====
Ligne 307: Ligne 319:
 De nombreux services ont recours à cette pratique afin d'​augmenter leur référencement et de clarifier leur contenu.\\ De nombreux services ont recours à cette pratique afin d'​augmenter leur référencement et de clarifier leur contenu.\\
 Ces services utilisent parfois une terminologie exotique pour mentionner cette pratique : [[:​WordPress]] parle par ex. de //​permalinks//​.\\ Ces services utilisent parfois une terminologie exotique pour mentionner cette pratique : [[:​WordPress]] parle par ex. de //​permalinks//​.\\
-On peut aussi s'en servir pour déployer une [[https://​fr.wikipedia.org/​wiki/​Interface_de_programmation|API]] web propre.\\+On peut aussi s'en servir pour déployer une [[wpfr>Interface_de_programmation|API]] web propre.\\
 On utilise aussi parfois cette méthode afin de mettre en place des [[https://​httpd.apache.org/​docs/​current/​fr/​rewrite/​remapping.html|redirections web]] un peu complexes. On utilise aussi parfois cette méthode afin de mettre en place des [[https://​httpd.apache.org/​docs/​current/​fr/​rewrite/​remapping.html|redirections web]] un peu complexes.
  
Ligne 319: Ligne 331:
  
 <​file>​RewriteEngine on <​file>​RewriteEngine on
 +
 +RewriteRule ^page-([0-9]+)$ /​page.php?​id=$1 [L]
  
 # Lorsque l'on tape dans la barre d'​adresse www.example.com/​page-* c'est la page www.example.com/​page.php?​id=* qui s'​affiche # Lorsque l'on tape dans la barre d'​adresse www.example.com/​page-* c'est la page www.example.com/​page.php?​id=* qui s'​affiche
 # ^ et $ dans le bloc modèle signifient respectivement le début et la fin d'une ligne. # ^ et $ dans le bloc modèle signifient respectivement le début et la fin d'une ligne.
 # $1 est une variable qui récupère la valeur entre les premières parenthèses du bloc modèle # $1 est une variable qui récupère la valeur entre les premières parenthèses du bloc modèle
-# [L]=[last] signifie que si cette règle s'​applique on n'en cherche pas d'​autre +# [L]=[last] signifie que si cette règle s'​applique on n'en cherche pas d'​autre</​file>​
-RewriteRule ^page-([0-9]+)$ /​page.php?​id=$1 [L]</​file>​+
  
 <​note>​On peut écrire ces règles de réécriture dans une section //​[[#​hotes_virtuels|<​VirtualHost>​]]//​ ou  //​[[#​hotes_virtuels|<​Directory>​]]//​ (le comportement n'est pas le même), ou dans un fichier //​[[#​.htaccess]]//​.</​note>​ <​note>​On peut écrire ces règles de réécriture dans une section //​[[#​hotes_virtuels|<​VirtualHost>​]]//​ ou  //​[[#​hotes_virtuels|<​Directory>​]]//​ (le comportement n'est pas le même), ou dans un fichier //​[[#​.htaccess]]//​.</​note>​
  
 +<note important>​N'​oubliez pas de modifier le virtualhost en conséquence sinon les règles de réécriture .htaccess ne fonctionneront pas correctement. Voici un exemple de configuration qui marche :
 +<​code>​
 +    <​Directory /​var/​www/​html>​
 +            AllowOverride All
 +    </​Directory>​
 +</​code>​
 +</​note>​
 ==== mod_proxy==== ==== mod_proxy====
  
Ligne 353: Ligne 373:
  
 ==== mod_userdir ==== ==== mod_userdir ====
- 
-<​note>​Ce module est également documenté sur [[:​xampp#​modifier_le_dossier_racine_du_serveur_apache|la page xampp]].</​note>​ 
  
 Il peut être utile, et c'est prévu par Apache, que chaque utilisateur puisse mettre un contenu web à disposition depuis son espace personnel (dans le répertoire ''​home''​).\\ Il peut être utile, et c'est prévu par Apache, que chaque utilisateur puisse mettre un contenu web à disposition depuis son espace personnel (dans le répertoire ''​home''​).\\
Ligne 388: Ligne 406:
  
 # Cet en-tête empêchera les autres sites d'​intégrer les pages de ce site dans des frames. # Cet en-tête empêchera les autres sites d'​intégrer les pages de ce site dans des frames.
-# C'est une mesure de portection ​contre les attaques par détournement de clic (clickjacking)+# C'est une mesure de protection ​contre les attaques par détournement de clic (clickjacking)
 # Attention cet en-tête est rendue obsolète par les CSP # Attention cet en-tête est rendue obsolète par les CSP
 # #
 Header set X-Frame-Options:​ "​sameorigin"​ Header set X-Frame-Options:​ "​sameorigin"​
  
-# Cet en-tête ​oblige les navigateurs à utiliser ​la protection XSS même s'​il ​l'ont désactivé +# Cet en-tête ​est obsolète et doit être spécifiquement désactivée avec la valeur O 
-# +# Pour une protection XSS, utilisez des CSP empêchant ​l'exécution des scripts « en ligne » 
-Header set X-XSS-Protection "1; mode=block"+Header set X-XSS-Protection "0"
  
 # En-tête qui permet de masquer la technologie utilisée (par exemple PHP 7.0) # En-tête qui permet de masquer la technologie utilisée (par exemple PHP 7.0)
Ligne 414: Ligne 432:
 </​VirtualHost></​file>​ </​VirtualHost></​file>​
  
-Enfin, toujours dans un objectif de sécurité, vous pourrez être amené à utiliser les en-têtes [[https://​developer.mozilla.org/​en-US/​docs/​Web/​HTTP/​CSP|Content-Security-Policy]],​ exemple :+Enfin, toujours dans un objectif de sécurité, vous devez utiliser les en-têtes [[https://​developer.mozilla.org/​en-US/​docs/​Web/​HTTP/​CSP|Content-Security-Policy]],​ exemple :
  
 <​file>​Header always set Content-Security-Policy:​ "​default-src '​self';​ img-src *; media-src media1.com media2.com; script-src userscripts.example.com"</​file>​ <​file>​Header always set Content-Security-Policy:​ "​default-src '​self';​ img-src *; media-src media1.com media2.com; script-src userscripts.example.com"</​file>​
Ligne 437: Ligne 455:
  
 Pour des raisons de sécurité il est recommandé de modifier le propriétaire des fichiers auxquels peut accéder Apache.\\ Pour des raisons de sécurité il est recommandé de modifier le propriétaire des fichiers auxquels peut accéder Apache.\\
-Le propriétaire devrait être l'​utilisateur qui va maintenir le contenu localement, mais le groupe propriétaire devrait rester //​www-data//​ :+Le propriétaire devrait être l'​utilisateur qui va maintenir le contenu localement, mais le groupe propriétaire devrait rester //​www-data//​ :((cette méthode se base sur [[https://​serverfault.com/​a/​357109|cette réponse]], qui a reçu le plus d'avis positifs sur [[wpfr>​Stack_Exchange_Network|Server Fault]].))
 <​code>​sudo chown -R $USER:​www-data /​var/​www/​example</​code>​ <​code>​sudo chown -R $USER:​www-data /​var/​www/​example</​code>​
  
 On change ensuite les [[:​permissions]] du contenu de manière à ce que l'​utilisateur puisse le lire et le modifier, mais qu'​Apache (dans le groupe //​www-data//​) ne puisse que le lire. On change ensuite les [[:​permissions]] du contenu de manière à ce que l'​utilisateur puisse le lire et le modifier, mais qu'​Apache (dans le groupe //​www-data//​) ne puisse que le lire.
  
-On attribue donc les [[:droits]] ''​rwx r-x ---''​ (750) pour les répertoires,​ et ''​rw- r-- ---''​ (640) pour les fichiers :+On attribue donc les [[:droits]] ''​%%rwx r-x ---%%''​ (750) pour les répertoires,​ et ''​%%rw- r-- ---%%''​ (640) pour les fichiers :
 <​code>​chmod -R a-rwx,​u+rwX,​g+rX /​var/​www/​example</​code>​ <​code>​chmod -R a-rwx,​u+rwX,​g+rX /​var/​www/​example</​code>​
 (pour rappel ''​x''​ concerne les répertoires et les fichiers tandis que ''​X''​ ne concerne que les répertoires - et autorise à les ouvrir) (pour rappel ''​x''​ concerne les répertoires et les fichiers tandis que ''​X''​ ne concerne que les répertoires - et autorise à les ouvrir)
  
-Si Apache doit pouvoir modifier du contenu (pour un répertoire d'​upload par exemple), on ne modifie que la permission concernant le groupe (le second numéro), donc ''​rwx rwx ---''​ (770) pour les répertoires et ''​rw- rw- ---''​ (660) pour les fichiers :+Si Apache doit pouvoir modifier du contenu (pour un répertoire d'​upload par exemple), on ne modifie que la permission concernant le groupe (le second numéro), donc ''​%%rwx rwx ---%%''​ (770) pour les répertoires et ''​%%rw- rw- ---%%''​ (660) pour les fichiers :
 <​code>​chmod -R g+w /​var/​www/​example/​upload</​code>​ <​code>​chmod -R g+w /​var/​www/​example/​upload</​code>​
  
 ==== Fail2ban ==== ==== Fail2ban ====
  
-Pour contrer ​les attaques par force brute sur un système d'​authentification d'une application web, il est vivement ​recommandé d'​utiliser l'​application [[:​Fail2ban]].+Pour limiter ​les attaques par force brute sur un système d'​authentification d'une application web, il est parfois ​recommandé d'​utiliser l'​application [[:​Fail2ban]].
  
 ===== Problèmes courants ===== ===== Problèmes courants =====
  • apache2.1561289222.txt.gz
  • Dernière modification: Le 23/06/2019, 13:27
  • par 82.237.71.42