suPHP: php4 et php5 sur le même serveur et exécution des scripts PHP avec les droits de leur propriétaire

Sur un serveur accueillant de nombreux utilisateurs, tous n’étant pas de confiance, il est très pratique que les scripts PHP s’éxécutent avec les droits de leur propriétaire ! C’est possible grâce à suPHP !

De plus grâce à ce module nous pourrons exécuter et des scripts PHP4 et des scripts PHP5. C’est très pratique car la plupart des applications PHP disponibles utilisent encore PHP4 (phpBB, DotClear, Xoops, …) mais PHP5 c’est l’avenir et peut-être que vos utilisateurs, ou vous même, souhaitent déjà développer des scripts PHP. Il est donc utile que les deux versions soient présentes sur votre serveur.

suPHP

Cet article est écrit pour l’installation et la configuration de suPHP sur les système basé Debian. Il à été testé sous Debian sarge (stable) et Ubuntu Hoary. Nous utiliserons Apache 2.

Dépôts supplémentaires

suPHP est bien présent dans Ubuntu et Debian mais uniquement en version 0.5.2. Or seul la version 0.6.0 permet d’utiliser deux versions distinctes de PHP (ici la 4 et la 5). Nous installerons donc suPHP 0.6.0 en provenance d’un dépôt non officiel. Malheureusement les paquets binaires fournis sur ce dépôt ne s’installent ni sous Sarge, ni sous Hoary, nous utiliserons donc le paquet source. De même php5 n’est disponible, ni dans Debian Sarge, ni dans Ubuntu Hoary, nous installerons une version provenant d’un dépôt non officiel.

  • Editez /etc/apt/sources.list et ajoutez-y les lignes suivantes, pour php5 changez sarge par le nom de votre distribution (woody, sid pour Debian ou encore hoary ou breezy pour Ubuntu):

  • Mettez à jour les listes de paquets

Installation

  • Si apache2 n’est pas installé tapez juste:

  • Installons d’abord la version cgi de php4 et php5:

  • Si vous aviez php4 installé en tant que module, c’est l’heure de le retirer:

  • Installons maintenant suPHP, nous installons d’abord les dépendances puis nous construisons le paquet, finalement nous installons le paquet suPHP que nous avons construit.

suPHP est maintenant installé sur notre système, passons à sa configuration ! Les plus curieux auront notés qu’un troisième paquet à été utilisé et que nous ne l’avons pas installé. Il s’agit du module suPHP pour apache 1.x.

Configuration

Nous allons configurer suPHP pour que les scripts ayant l’extension .php3, .php4, .php et .phtml s’éxécutent avec l’interpréteur PHP4 et ceux avec l’extension .php5 avec PHP5 (les fichiers source .phps seront aussi affichés avec PHP4). Nous veilleront aussi a ce que seuls les scripts et répertoires n’étant pas accessibles par tout le monde en écriture (chmod 777) soient exécutables. Pour configurer suPHP aux petits oignons consultez sa documentation: /usr/share/doc/suphp-common/CONFIG

Indiquons d’abord à Apache de gérer les fichiers PHP avec suPHP.

  • Editez le fichier /etc/apache2/apache2.conf et ajoutez (ou dé-commentez) ces lignes:

  • Editez ensuite /etc/apache2/mods-enabled/suphp.conf pour qu’il contienne (dé-commentez les lignes commençants par # pour activer suPHP pour les scripts CGI aussi):

  • Passons à la configuration de suPHP lui même, ouvrez /etc/suphp/suphp.conf copiez y ce contenu puis personalisé le si nécéssaire:

suPHP est maintenant configuré et installé, reste à redémarrer Apache avec /etc/init.d/apache2 restart ! Vérifiez bien qu’aucun script PHP n’est modifiable par les membres du même groupe ou pire par tout le monde pour que tout ce passe bien ! N’hésitez par à faire des chmod -R 744 sur vos répertoires.

Modules

Vous aurez certainement besoin de modules pour PHP, les plus commun étant celui pour MySQL qui permet d’utiliser ce gestionnaire de base de donnée avec PHP.
Pour obtenir la liste des modules disponibles pour php4 tapez apt-cache search php4- et pour php5 apt-cache search php5-.
Un fois les modules installés il vous faudra les activer dans les fichiers de configuration de PHP, respectivement /etc/php4/cgi/php.ini pour PHP4 et /etc/php5/cgi/php.ini pour PHP5. Pour php4-mysql ajoutez par exemple extension=mysql.so ou encore extension=gd.so pour php4-gd. La syntaxe est la même pour PHP5. N’oubliez pas de redémarrer apache avec /etc/init.d/apache2 restart après chaque ajout de module.

Test

Un petit test, créez un fichier dans votre répertoire web avec votre compte utilisateur nommé whoami.php qui contient:

Si tout va bien le nom de votre utilisateur s’affichera lorsque vous chargerez le script. Dans le cas contraire ca sera www-data (l’utilisateur éxécuantant apache et PHP par défaut sous les systèmes basés Debian) qui apparaîtra. Si c’est le cas c’est que vous avez commis une erreur de configuration.

Renommez maintenant whoami.php en whoami.php5 pour vérifier que PHP5 fonctionne bien. Le résultat doit être le même.

Merci à Philippe pour son aide !

Leave a Reply