Apache sécurité [Résolu]

Signaler
-
 r@ph -
Bonjour,

Je souhaiterais avoir des conseils sur des méthodes pour cloisonner les sites. Sur un serveur, j'ai plusieurs sites (avec des VHOSTS) et j'aimerais que si l'un des sites est compromis que ne se soit pas (facilement) possible pour que l'attaquant puisse accéder aux fichiers/dossiers des autres sites.

Existe-t-il des méthodes/modules/bonne pratique dans ce sens ?

J'avais pensé créer un utilisateur unix pour chaque projet et définir les sites dans chaque répertoire personnel, mais je me demande si cela est suffisant.

Cordialement,

r@ph

3 réponses

Messages postés
18490
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
18 janvier 2021
4 247
Bonjour,

Dans le cas de sites sans PHP, on ne peut pas compromettre un site. Si Apache est compromis, puisque Apache a accès à tous les sites qu'il doit servir, alors le hacker peut atteindre tous les sites. Mais une faille non résolue dans Apache est peu probable.

Pour l'organisation des dossiers, je préfère que les sites soient stockés dans le répertoire "home" de l'utilisateur propriétaire du site.
Par exemple, si le site "example1.com" appartient à "utilisateur1", alors le site est stocké dans /home/utilisateur1/example1.com/

Pour permettre à Apache de traverser le dossier /home/utilisateur1 sans autoriser les autres utilisateurs : mettre un chmod 610 sur /home/utilisateur1 et ajouter l'utilisateur "apache" (ou httpd ou autre, à vérifier dans la config Apache) dans le groupe "utilisateur1"
Exemple : sudo usermod -aG utilisateur1 apache

Dans le cas d'un site PHP, cela ne change rien concernant Apache, mais tu voudras probablement que les processus PHP soient exécutés avec des privilèges différents.

Sur un serveur partagé (type hébergement mutualisé), si les processus PHP sont exécutés avec un utilisateur privilégié, alors n'importe quel utilisateur peut écrire un script PHP qui va fouiner dans le dossier des autres utilisateurs.

On peut utiliser PHP FPM afin de créer des "pools" différentes pour chaque utilisateur, puisque chaque pool peut être exécutée avec un utilisateur/groupe défini. Dans la partie du VirtualHost où on assigne un "handler" pour les fichiers .php, il suffira alors d'assigner la pool qui correspond à l'utilisateur qui est le propriétaire du site.
Messages postés
29493
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 janvier 2021
7 012
Bonjour,

Supposons que ton serveur web soit apache2. Dans ce cas, c'est l'utilisateur système "apache2" qui lance le processus correspondant. Cela signifie que si un vhost est compromis, l'attaquant aura la même puissance de feu qu'apache2. Définir plusieurs utilisateur n'a pas de sens car il n'y en a qu'un : celui qui lance le serveur web, et qui aiguille la requête du navigateur client vers le bon vhost. En ce sens, définir plusieurs utilisateurs n'a pas vraiment de sens.

La technique dont tu parles (isoler dans plusieurs dossiers séparés) est communément appelée jail. Elle est typiquement utilisée au niveau d'un vhost dans apache, d'une utilisateur pour ftp. Pour des solutions comme ssh, des outils permettent de faire des jails même si ça n'est pas (par choix) le comportement par défaut.

Toutefois, il est possible de mettre l'intégralité du serveur web dans une jail afin de limiter la vulnérabilité du système d'exploitation si le serveur web venaît à être compromis (voir e.g.
mod_chroot
), mais cela n'est pas exactement ta question initiale.

De nombreux tutoriels indiquent comment tu peux sécuriser un serveur web, entre autres :

Bonne chance
Bonsoir,

merci de vos réponses et de la qualité de vos réponses, après quelques recherches, je pense que je vais utiliser PHP FPM qui semble intéressant pour la sécurité et les performances. Faire un chroot semblerait vraiment idéal mais me semble compliqué a gérer avec mon viveau de connaissances :)

Cordialement

r@ph