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

Aller à la navigation Aller à la recherche
 
(10 versions intermédiaires par le même utilisateur non affichées)
Ligne 71 : Ligne 71 :


Nous allons créer un fichier afin d'interdire l'accès à certains dossiers qu'apache autorise en général par défaut. Notez qu'activer ces options empêchera la configuration par défaut de nombreux paquets debian de fonctionner.<br>
Nous allons créer un fichier afin d'interdire l'accès à certains dossiers qu'apache autorise en général par défaut. Notez qu'activer ces options empêchera la configuration par défaut de nombreux paquets debian de fonctionner.<br>
Créez le fichier <code>/etc/apache2/conf-available/zzz_localsecurity.conf</code> (le faire commencer par zzz devrait vous assurer qu'il soit lu en dernier) contenant :
Créez le fichier <code>/etc/apache2/conf-available/zzz-local-security.conf</code> (le faire commencer par zzz devrait vous assurer qu'il soit lu en dernier) contenant :
<pre>
<pre>
# Disable access to / by default
# Disable access to / by default
Ligne 96 : Ligne 96 :
# Disable access to svn tree
# Disable access to svn 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>


Ligne 114 : Ligne 114 :
</Files>
</Files>
<Files htdigest>
<Files htdigest>
        Require all denied
</Files>
# Disable access to .user.ini (used by php for local config)
<Files .user.ini>
         Require all denied
         Require all denied
</Files>
</Files>


# Deny access to most php project configuration files (localsettings.php, config.php but also things like config.anything.php
# Deny access to most php project configuration files (localsettings.php, config.php but also things like config.anything.php
<FilesMatch "(?i)^(commonsettings|localsettings|config)(\.([a-z]|[0-9])+)*\.ph(ar|p|tml)$">
<FilesMatch "(?i)^(config-db|wp-config|commonsettings|localsettings|config)(\.([a-z]|[0-9])+)*\.ph(ar|p|tml)$">
         Require all denied
         Require all denied
</FilesMatch>
</FilesMatch>
Ligne 124 : Ligne 129 :
# Enforce a restricted open_basedir if php7 module is loaded
# Enforce a restricted open_basedir if php7 module is loaded
<IfModule php7_module>
<IfModule php7_module>
  php_admin_value open_basedir /var/www/
        php_admin_value open_basedir /var/www/
</IfModule>
</IfModule>


Ligne 142 : Ligne 147 :


Activez le fichier de configuration avec <code>a2enconf</code> :  
Activez le fichier de configuration avec <code>a2enconf</code> :  
<pre>a2enconf zzz_localsecurity.conf
<pre>a2enconf zzz-local-security.conf
/etc/init.d/apache2 reload</pre>
/etc/init.d/apache2 reload</pre>


Ligne 155 : Ligne 160 :
</pre>
</pre>


Pour les alias et les proxy, le mappage se fait dans le sens inverse, du plus spécifique au moins spécifique :
Pour les <code>Alias</code> et les proxy (<code>ProxyPass</code>), le mappage se fait dans le sens inverse, du plus spécifique au moins spécifique :
<pre>
<pre>
Alias "/foo/bar" "/srv/www/uncommon/bar"
Alias "/foo/bar" "/srv/www/uncommon/bar"
Ligne 189 : Ligne 194 :


Ce mode de fonctionnement est plus complexe, mais augmente les performances et permet d'utiliser les mpm worker et event (eux même plus performants que prefork et itk).<br>
Ce mode de fonctionnement est plus complexe, mais augmente les performances et permet d'utiliser les mpm worker et event (eux même plus performants que prefork et itk).<br>
Le principe est d'avoir un daemon php-fpm exécutant les scripts php. Apache s'y connecte au moyen d'un socket.<br>
Le principe est d'avoir un daemon php-fpm exécutant les scripts php. Apache s'y connecte en fcgi au moyen d'un socket.<br>
Chaque daemon php-fpm existe au sein d'un pool qui a son propre socket. Pour des raisons de sécurité, il est conseillé d'utiliser un pool (donc un socket) différent pour chaque site. En effet, si un script malveillant est exécuté au sein d'un pool, il a le potentiel de contaminer l'ensemble du pool et donc l'ensemble des sites utilisant le pool. Il est également possible d'attribuer un utilisateur/groupe spécifique à chaque pool ce qui compense l'impossibilité d'utiliser mpm-itk.
Chaque daemon php-fpm existe au sein d'un pool qui a son propre socket. Pour des raisons de sécurité, il est conseillé d'utiliser un pool (donc un socket) différent pour chaque site. En effet, si un script malveillant est exécuté au sein d'un pool, il a le potentiel de contaminer l'ensemble du pool et donc l'ensemble des sites utilisant le pool. Il est également possible d'attribuer un utilisateur/groupe spécifique à chaque pool ce qui compense l'impossibilité d'utiliser mpm-itk.


Ligne 224 : Ligne 229 :


La première méthode consiste à modifier directement le fichier de configuration principal de php/fpm : <code>/etc/php/7.4/fpm/php.ini</code>.<br>
La première méthode consiste à modifier directement le fichier de configuration principal de php/fpm : <code>/etc/php/7.4/fpm/php.ini</code>.<br>
Les options appliquées le seront à l'ensemble des scripts lancé par php/fpm et ce quelque soit le pool utilisé. '''Cela n'est donc viable que pour une configuration "par défaut" valable pour l'ensemble de vos sites (ou que vous modifierez par d'autre méthode décrites plus bas).'''
Les options appliquées le seront à l'ensemble des scripts lancé par php/fpm et ce quelque soit le pool utilisé. '''Cela n'est donc viable que pour une configuration "par défaut" valable pour l'ensemble de votre serveur et quelque soit le site (ou que vous modifierez par d'autre méthode décrites plus bas).'''


===php-fpm.conf===
===php-fpm.conf===
Ligne 299 : Ligne 304 :
Si la même valeur est définie dans le pool.d et dans un .user.ini, c'est celle de .user.ini qui sera appliquée. Attention quand même à quelques spécificités, par exemple, la valeur de open_basedir locale ne peut-être définie que dans des sous-dossiers de la valeur globale de pool.d.
Si la même valeur est définie dans le pool.d et dans un .user.ini, c'est celle de .user.ini qui sera appliquée. Attention quand même à quelques spécificités, par exemple, la valeur de open_basedir locale ne peut-être définie que dans des sous-dossiers de la valeur globale de pool.d.


Vous pouvez désactiver cette fonctionnalité (par sécurité et si vous n'en avez pas besoin) en vidant la variable suivante dans <code>user_ini.filename</code> :
Vous pouvez désactiver cette fonctionnalité (par sécurité et si vous n'en avez pas besoin) en vidant la variable suivante dans <code>/etc/php/7.4/php.ini</code> :
<pre>user_ini.filename =</pre>
<pre>user_ini.filename =</pre>
==Attribuer un pool a une vhost==
<pre>
# PHP-FPM admin sock
<FilesMatch ".+\.ph(ar|p|tml)$">
        SetHandler "proxy:unix:/run/php/php7.4-fpm-poolname.sock|fcgi://localhost"
</FilesMatch>
</pre>


=Note on PHP=
=Note on PHP=
Ligne 448 : Ligne 462 :


Notez que ces vhosts ne spécifient pas de <code>ServerName</code>, il sera donc déduit du nom d'hôte FQDN de la machine (<code>hostname -f</code>).<br>
Notez que ces vhosts ne spécifient pas de <code>ServerName</code>, il sera donc déduit du nom d'hôte FQDN de la machine (<code>hostname -f</code>).<br>
Attention, cela implique que vous ne créez aucune autre virtualhost ayant "simplement" le nom d'hôte de la machine comme ServerName, sinon vous aurez 2 virtualhost avec le même nom d'hôte, et la première chargée en configuration (ordre alphamumérique) sera celle présentée au client (mais pas forcément celle que vous souhaitez).
'''Attention, cela implique que vous ne créez aucune autre virtualhost ayant "simplement" le nom d'hôte de la machine comme ServerName''', sinon vous aurez 2 virtualhost avec le même nom d'hôte, et la première chargée en configuration (ordre alphamumérique) sera celle présentée au client (mais pas forcément celle que vous souhaitez).


==Activer server-status / vhost d'admin==
==Activer server-status / vhost d'admin==
4 231

modifications

Menu de navigation