Outils pour utilisateurs

Outils du site


Panneau latéral

linux:apache2.4 (lu 20289 fois)

Ceci est une ancienne révision du document !


Apache 2.4

Pour configurer chaque site web avec un utilisateur système différent, la méthode la plus courante et la plus robuste en PHP est d’utiliser PHP-FPM avec des pools séparés pour chaque site.

Voici les étapes générales :

Créer un utilisateur système et un groupe pour chaque site : Pour chaque site web, créez un utilisateur et un groupe dédiés. Par exemple, pour site1.com :

sudo groupadd site1
sudo useradd -g site1 -s /sbin/nologin site1user

# ou

adduser --allow-bad-names --shell /sbin/nologin site1.com
# ne rien mettre comme mot de passe (plusieurs fois)

Répétez pour chaque site (site2user, site2, etc.). L’option -s /sbin/nologin empêche ces utilisateurs de se connecter directement au système.

Définir les permissions des dossiers des sites : Changez le propriétaire des répertoires de vos sites web pour qu’ils appartiennent à leur utilisateur et groupe respectifs :

chown -R site1user:site1 /var/www/site1.com

# Assurez-vous que le répertoire du site est accessible en lecture par l'utilisateur
chmod -R ug+rwX,o+rX-w /var/www/site1.com

Faites de même pour chaque site.

Configurer des pools PHP-FPM séparés : Si vous utilisez PHP-FPM (ce qui est fortement recommandé pour cette configuration), créez un fichier de configuration de pool pour chaque site. Ces fichiers se trouvent généralement dans /etc/php/X.X/fpm/pool.d/ (où X.X est votre version de PHP).

Par exemple, créez /etc/php/X.X/fpm/pool.d/site1.conf :

[site1]
user = site1user
group = site1

listen = /run/php/phpX.X-site1.sock  ; Chemin unique pour le socket
listen.owner = www-data             ; L'utilisateur du serveur web (ex: nginx, apache) doit pouvoir accéder au socket
listen.group = www-data

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.process_idle_timeout = 10s

; Définir le répertoire racine du site
chdir = /var/www/site1.com

; Variables d'environnement si nécessaire
; php_admin_value[error_log] = /var/log/php-fpm/site1_error.log
; php_admin_flag[log_errors] = on

Répétez cette configuration pour chaque site, en changeant [site1], user, group, listen et chdir en conséquence.

Configurer votre serveur web (Nginx ou Apache) :

Nginx : Pour chaque hôte virtuel (server block), configurez-le pour qu’il utilise le socket PHP-FPM du pool correspondant. Exemple pour /etc/nginx/sites-available/site1.com :

Nginx

server {
    listen 80;
    server_name site1.com www.site1.com;
    root /var/www/site1.com/public; # Votre répertoire public

    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/phpX.X-site1.sock; # Pointer vers le bon socket
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Autres configurations (logs, ssl, etc.)
}

Apache (avec mod_proxy_fcgi) : Configurez un VirtualHost pour chaque site. Exemple pour /etc/apache2/sites-available/site1.com.conf :

Apache

<VirtualHost *:80>
    ServerName site1.com
    ServerAlias www.site1.com
    DocumentRoot /var/www/site1.com/public

    <Directory /var/www/site1.com/public>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    <FilesMatch ".+\.ph(?:ar|p|tml)$">
        SetHandler "proxy:unix:/run/php/phpX.X-site1.sock|fcgi://localhost/" # Pointer vers le bon socket
    </FilesMatch>

    ErrorLog ${APACHE_LOG_DIR}/site1_error.log
    CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
</VirtualHost>

Redémarrer les services : Après toutes ces modifications, redémarrez les services concernés :

Bash

sudo systemctl restart phpX.X-fpm
sudo systemctl restart nginx # ou sudo systemctl restart apache2

Avantages de cette méthode :

Sécurité accrue : Chaque site s’exécute avec des permissions limitées à son propre environnement, réduisant le risque qu’un site compromis n’affecte les autres.

Isolation des processus : Les processus PHP de chaque site sont isolés, ce qui améliore la stabilité.

Facilite la configuration de Postfix : Avec chaque site s’exécutant sous un user différent, Postfix verra des expéditeurs comme site1user@votre_serveur ou site2user@votre_serveur.

Vous pouvez alors utiliser la configuration sender_canonical_maps de Postfix mentionnée précédemment pour réécrire site1user@votre_serveur en no-reply@site1.com et site2user@votre_serveur en contact@site2.net, etc.

C’est la méthode standard pour héberger plusieurs sites PHP de manière isolée et sécurisée.

linux/apache2.4.1752094271.txt.gz · Dernière modification : de edmc73