4 234
modifications
(→php) |
|||
(9 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 | ||
<Directory /usr/share> | <Directory /usr/share> | ||
AllowOverride None | AllowOverride None | ||
Ligne 84 : | Ligne 84 : | ||
</Directory> | </Directory> | ||
# | # Disable access to svt tree | ||
<DirectoryMatch "/\.svn"> | <DirectoryMatch "/\.svn"> | ||
Require all denied | Require all denied | ||
</DirectoryMatch> | </DirectoryMatch> | ||
# | # Disable access to git tree | ||
<DirectoryMatch "/\.git"> | <DirectoryMatch "/\.git"> | ||
Require all denied | Require all denied | ||
</DirectoryMatch> | </DirectoryMatch> | ||
# | # 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 | ||
<FilesMatch "htpasswd"> | <FilesMatch "htpasswd"> | ||
Require all denied | Require all denied | ||
Ligne 107 : | Ligne 107 : | ||
</FilesMatch> | </FilesMatch> | ||
<IfModule | <IfModule php7_module> | ||
php_admin_value open_basedir /var/www/ | php_admin_value open_basedir /var/www/ | ||
</IfModule> | </IfModule> | ||
# | # 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- | aptitude install libapache2-mod-php | ||
a2enmod | a2enmod php7* | ||
</pre> | </pre> | ||
Ligne 163 : | Ligne 163 : | ||
* open_basedir avec une règle par défaut définie dans [[#Configuration_de_sécurité_en_sus|/etc/apache2/mods-enabled/zzz_localsecurity.conf]] | * open_basedir avec une règle par défaut définie dans [[#Configuration_de_sécurité_en_sus|/etc/apache2/mods-enabled/zzz_localsecurity.conf]] | ||
* | * le mpm itk afin de pouvoir lancer les scripts php avec les permissions utilisateurs | ||
=la gestion des virtualhosts= | =la gestion des virtualhosts= | ||
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> | ||