Sécuriser les applications PHP avec suexec

Si votre application fonctionne sur Apache (comme plus de la moitié des sites Web sur Internet le font), vous voudrez peut-être envisager de permettre SUEXEC dans votre configuration d'Apache. SUEXEC est un mécanisme qui est fourni avec Apache qui provoque des scripts pour être exécuté en tant que l'utilisateur qui possède le script, plutôt que de le faire fonctionner de l'utilisateur du serveur web.

Dans un environnement non-suexec, tous les scripts sont exécutés avec le même ID utilisateur que le serveur Web lui-même. Malheureusement, un seul script vulnérable peut donner à un utilisateur malveillant d'accès porte arrière au serveur Web en entier, y compris l'exécution de scripts sur d'autres sites hébergés sur le même serveur.

SUEXEC tente d'atténuer ce problème en limitant les applications Web à leurs propres domaines et les faire fonctionner sous les noms d'utilisateur de leurs propriétaires, plutôt que sous l'ID utilisateur du serveur web. Par exemple, ce script serait exécuté sous l'ID utilisateur de jsmith:




/home/~jsmith/public_html/scripts/please_hack_me.php

Un utilisateur malveillant pourrait exploiter ce script, mais il ou elle aurait accès uniquement aux fichiers et programmes que le jsmith l'utilisateur est autorisé à utiliser. Toute autre utilisateur sur le serveur serait protégé de jsmith's de script insécurité.

Malheureusement, pour obtenir SUEXEC pour fonctionner correctement avec hôtes virtuels, ou plusieurs sites Web indépendants situés physiquement sur le même serveur web, peut être délicat. Suexec est conçu pour exécuter des scripts qui existent dans le document de la racine du serveur web.

La plupart des hôtes virtuels sont mis en place d'une manière qui donne à chaque individu son propre site racine du document, et la racine de chaque site ne se trouve pas sous la racine des documents du serveur Web. Pour contourner cette restriction, l'administrateur système doit ajouter la racine de chaque hôte virtuel à la variable document racine du serveur Web dans le fichier de configuration d'Apache.

SUEXEC exige également que les scripts PHP être gérées comme Common Gateway Interface (CGI), qui est plus lent que l'utilisation de PHP en tant que module précompilé sous Apache. CGI a été le premier modèle viable pour les applications Web, et il est encore utilisé pour les scripts simples. Cependant, dès que vous quittez le domaine de script PHP et de commencer à écrire des applications à part entière, vous aurez besoin du coup de pouce de PHP précompilé de performance.

Pour les serveurs web assez simples, suEXEC peut garder une application insécurité de piétiner tous sur tout le reste. Cependant, dans un environnement plus complexe avec des serveurs virtuels, modules précompilés, et des dizaines ou des centaines d'utilisateurs, vous avez besoin d'un modèle de sécurité qui est un peu plus robuste.


» » » » Sécuriser les applications PHP avec suexec