« Installation de configuration du serveur web Apache 2.4 sous Debian Bullseye » : différence entre les versions

Aller à la navigation Aller à la recherche
(7 versions intermédiaires par le même utilisateur non affichées)
Ligne 13 : Ligne 13 :
* Même si les directives sont lues dans l'ordre dans lequel vous les inscrivez, certaines restent appliqués avant les autres (cf https://httpd.apache.org/docs/2.4/sections.html#merging). L'ordre d'application de apache est  <Directory> -> htaccess -> <DirectoryMatch> -> <files> et <filesmatch> -> <Location> et <LocationMatch>. La dernière directive appliquée prendra le dessus sur les autres.
* Même si les directives sont lues dans l'ordre dans lequel vous les inscrivez, certaines restent appliqués avant les autres (cf https://httpd.apache.org/docs/2.4/sections.html#merging). L'ordre d'application de apache est  <Directory> -> htaccess -> <DirectoryMatch> -> <files> et <filesmatch> -> <Location> et <LocationMatch>. La dernière directive appliquée prendra le dessus sur les autres.
* Encore une fois, prenez garder à la manière dont les directives se chaînent. Cela peut conduire à de graves défaut de sécurité étant donné que la directive [http://httpd.apache.org/docs/2.4/fr/mod/mod_authz_core.html#authmerging authmerging] est par défaut à off dans apache. En gros, si vous interdisez l'accès au répertoire "config" avec une directive <Directory> puis que vous autorisez l'accès au répertoire parent à l'aide d'une directive <Location>, le répertoire config deviendra accessible en lecture et ce pour deux raisons : l'ordre d'application des directives (Location appliqué après Directory) et le fait que les autorisations d'accès s'annulent les unes les autres (authmerging à off).
* Encore une fois, prenez garder à la manière dont les directives se chaînent. Cela peut conduire à de graves défaut de sécurité étant donné que la directive [http://httpd.apache.org/docs/2.4/fr/mod/mod_authz_core.html#authmerging authmerging] est par défaut à off dans apache. En gros, si vous interdisez l'accès au répertoire "config" avec une directive <Directory> puis que vous autorisez l'accès au répertoire parent à l'aide d'une directive <Location>, le répertoire config deviendra accessible en lecture et ce pour deux raisons : l'ordre d'application des directives (Location appliqué après Directory) et le fait que les autorisations d'accès s'annulent les unes les autres (authmerging à off).
* '''De manière globale, préférez la directive <Directory> (et ses dérivés comme <files> <DirectoryMatch> ou <FilesMatch>) a <Location> (et ses dérivés comme <LocationMatch>) quand vous sécurisez des chemins du système de fichier de votre machine.''' N'utilisez <Location> que si vous définissez les règles d'accès à une ressource qui ne se situe pas sur le système de fichier (page générée par une base de donnée par exemple)
* '''De manière globale, préférez la directive <Directory> (et ses dérivés comme <files> <DirectoryMatch> ou <FilesMatch>) a la directive <Location> (et ses dérivés comme <LocationMatch>) quand vous sécurisez des chemins du système de fichier de votre machine.''' N'utilisez <Location> que si vous définissez les règles d'accès à une ressource qui ne se situe pas sur le système de fichier (page générée par une base de donnée par exemple)
* La configuration de apache sous debian est modulaire, pensez cependant à lire l'ensemble de cette configuration, vous pourriez y trouver des surprises (y compris /etc/apache2/apache2.conf !). N'oubliez pas non l'ordre de lecture qui peut changer la manière dont les règles s'appliquant : <code>/etc/apache2/apache2.conf</code>, puis <code>conf-enabled/*.conf</code>, puis <code>sites-enabled/*.conf</code>
* La configuration de apache sous debian est modulaire, pensez cependant à lire l'ensemble de cette configuration, vous pourriez y trouver des surprises (y compris /etc/apache2/apache2.conf !). N'oubliez pas non l'ordre de lecture qui peut changer la manière dont les règles s'appliquant : <code>/etc/apache2/apache2.conf</code>, puis <code>conf-enabled/*.conf</code> (ordre alphanumérique), puis <code>sites-enabled/*.conf</code> (ordre alphanumérique).
* Faites attention aux directives Include fournies par certains paquets. Lisez toujours tout fichier que vous incluez à la configuration de apache ou d'une vhost !
* Faites attention aux directives Include fournies par certains paquets. Après installation, ils sont parfois automatiquement chargés, parfois il faudra passer par <code>a2enconf</code>. Lisez toujours tout fichier que vous incluez à la configuration de apache ou d'une vhost !
* De même, faites attentions à certains paquets qui ont tendance à ajouter par défaut un fichier de configuration et à l'activer dans  <code>conf-enabled/</code>
* De même, faites attentions à certains paquets qui ont tendance à ajouter par défaut un fichier de configuration et à l'activer dans  <code>conf-enabled/</code>
* Par défaut, debian autorise l'accès à <code>/usr/share</code>. Il peut être bon de désactiver globalement ce comportement en créant un fichier de configuration dans conf-enabled, quitte à réactiver l'accès au cas par cas.
* Par défaut, debian autorise l'accès à <code>/usr/share</code>. Il peut être bon de désactiver globalement ce comportement en créant un fichier de configuration dans conf-enabled, quitte à réactiver l'accès au cas par cas.
Ligne 73 : Ligne 73 :
Créez le fichier /etc/apache2/conf-available/zzz_localsecurity.conf (le faire commencer par zzz devrait vous assurer qu'il soit lu en dernier)
Créez le fichier /etc/apache2/conf-available/zzz_localsecurity.conf (le faire commencer par zzz devrait vous assurer qu'il soit lu en dernier)
<pre>
<pre>
#disable access to /usr/share by default
# Disable access to /usr/share by default
<Directory /usr/share>
<Directory /usr/share>
         AllowOverride None
         AllowOverride None
Ligne 84 : Ligne 84 :
</Directory>
</Directory>


#disable access to svt tree
# Disable access to svt tree
<DirectoryMatch "/\.svn">
<DirectoryMatch "/\.svn">
   Require all denied
   Require all denied
</DirectoryMatch>
</DirectoryMatch>


#disable access to git tree
# Disable access to git tree
<DirectoryMatch "/\.git">
<DirectoryMatch "/\.git">
   Require all denied
   Require all denied
</DirectoryMatch>
</DirectoryMatch>


#disable access to .htaccess and .htpasswd files
# Disable access to .htaccess and .htpasswd files
<FilesMatch "^\.ht">
<FilesMatch "^\.ht">
         Require all denied
         Require all denied
</FilesMatch>
</FilesMatch>


#disable access to htpasswd and htdigest files as some user don't make them hidden
# Disable access to htpasswd and htdigest files as some user don't make them hidden
<FilesMatch "htpasswd">
<FilesMatch "htpasswd">
         Require all denied
         Require all denied
Ligne 111 : Ligne 111 :
</IfModule>
</IfModule>


#for mpm itk
# For mpm itk
<IfModule mpm_itk_module>
<IfModule mpm_itk_module>
         # first uid need to be 33 for www-data (default uid/gid, can be tuned)
         # first uid need to be 33 for www-data (default uid/gid, can be tuned)
Ligne 156 : Ligne 156 :


<pre>
<pre>
aptitude install libapache2-mod-php5
aptitude install libapache2-mod-php
a2enmod php5
a2enmod php7*
</pre>
</pre>


Ligne 315 : Ligne 315 :
RewriteCond %{HTTPS} off
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
</pre>
Il peut être intéressant de ne pas rewrite certaine URLs. Dans l'exemple ci dessous, les urls en lien avec les challenges letsencrypt :
<pre>
RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge/.*
</pre>
</pre>


4 203

modifications

Menu de navigation