Sécuriser votre serveur Web avec 2 modules apache : suEXEC et suPHP

sécuriser son serveur

Dans ce tuto vidéo (sommaire ici), nous allons voir comment installer et configurer 2 extensions apache, suEXEC et suPHP, qui permettent d’augmenter la sécurité de votre serveur. Par défaut, lorsque apache travaille sur un fichier ou un script php, il le fait en tant qu’utilisateur www-data (l’utilisateur apache du système, qui possède des droits particuliers). Le problème, c’est que si un de ces scripts est mal conçu et possède une faille de sécurité, un pirate peut avoir accès à cet utilisateur système qui possède des droits importants.

Les extensions suEXEC et suPHP permettent de remédier à ce problème. En effet, avec ces extensions le serveur web travaille sur ces fichiers avec l’utilisateur propriétaire des fichiers (qui possèdent des droits classiques). Si vous avez suivi depuis le début de mes vidéos sur le serveur dédié, vous devriez déjà avoir une configuration similaire, c’est-à-dire : un site = un utilisateur. C’est maintenant que ça prend tout sont sens, car ça va nous simplifier grandement les choses.

En plus d’améliorer la sécurité, ces 2 modules permettent de régler certains problèmes avec vos scripts et CMS comme WordPress. En effet, sur WordPress pour mettre à jour son blog ou ajouter des extensions, on peut utiliser un script qui le fait de manière automatique. Le problème, c’est que ce script doit pouvoir créer des fichiers sur votre serveur, ce qui n’est pas possible si l’utilisateur qui exécute le script est www-data (puisque le dossier appartient à l’utilisateur qui possède le site).


(Pour la version Dailymotion, cliquez sur ce lien) – Télécharger la vidéo

Installation de suEXEC

Le premier module à installer est suEXEC, c’est lui qui permet de lancer les scripts de types CGI avec l’utilisateur qui possède le script. L’installation se fait en 2 temps :


apt-get install apache2-suexec
apt-get install apache2-suexec-custom
Installation de suexec

En ce qui concerne la configuration c’est très simple, un fichier à éditer ici /etc/apache2/suexec/www-data. Sur la première ligne vous placer le chemin du dossier qui contient tout vos sites web, dans notre cas « /home ». Sur la seconde ligne, vous placer le dossier qui contient tout les fichiers du site web, par défaut c’est « public_html » mais comme nous avons modifié /etc/apache2/mods-available/userdir.conf, c’est « www ».

Installation de suPHP

On doit ensuite installer suPHP qui permet d’exécuter les scripts php avec l’utilisateur propriétaire. Il est dépendant de suEXEC, vous devez donc installer et configurer suEXEC d’abord.


apt-get install libapache2-mod-suphp
Installation de suPHP

Au niveau de la configuration, encore une fois c’est très simple, il suffit d’éditeur /etc/suphp/suphp.conf.

Modification des virtualhosts

On doit modifier tout les fichiers virtualhosts de nos différents sites pour préciser à suPHP avec quel utilisateur et groupe il doit exécuter les scripts. C’est à cette étape que ça devient compliqué si vous n’avez pas suivi mes conseils de « 1 site = 1 utilisateur ».

Avant de faire les modif, vous devez désactiver le module php5 d’apache pour que suPHP prenne la relève. Pour cela un petit a2dismod php5 fait l’affaire.

Vous devez donc ajouter sur chaque fichier virtualhost de vos sites (sauf default), cette ligne :


# Nom d’utilisateur, nom du groupe, généralement identique
SuexecUserGroup tutorielvideo tutorielvideo
Configuration de l'utilisateur sur Apache

Problèmes avec les htaccess et les erreurs 500

Lorsqu’on installe suEXEC et suPHP on rencontre plusieurs problèmes. Comme on est obligé de désactiver php5 pour que suPHP prenne le relais, on doit refaire tout nos fichiers .htaccess. En effet, toute les directives spécifiques à php (donc celle qui commence par php_flag ou php_value) feront planter le .htaccess et provoquera une erreur 500. Ça vient tout simplement du fait qu’apache ne sait pas quoi faire, pour lui php n’est pas installé, donc il ne connaît pas ces directives.

La solution est de créer un fichier php.ini à la racine de votre site avec toutes les configurations pour php et de placer ce bout de code dans votre fichier .htaccess en prenant garde de bien noter le chemin absolue vers la racine de votre site.


<IfModule mod_suphp.c>
suPHP_ConfigPath /home/roundcube/www
</IfModule>
Configuration php.ini personnalisé

Et voici, par exemple, la ligne qu’il faut ajouter dans le fichier php.ini pour Roundcube : suhosin.session.encrypt=Off. La syntaxe est légèrement différentes des .htaccess, donc si vous avez du mal à comprendre, je vous renvoie sur cette page de la documentation PHP qui explique toutes les directives que l’on peut mettre dans un fichier php.ini.

Voilà, ce tutoriel est terminé, n’hésitez pas à faire vos propres recherches pour augmenter la sécurité de votre serveur. Vous pouvez par exemple creuser du côté du module apache pour la sécurité (mod_security), ou bien Chrooter tous les répertoires home des utilisateurs, installer l’application « snort », désactiver les services inutiles, surveiller les logs régulièrement et etc… .

Si vous avez des questions, n’hésitez pas à laisser un commentaire. Si vous avez apprécié le tutoriel, vous pouvez le partager sur Twitter/Facebook et rejoindre la page facebook du blog.

(Image à la une : Barbed wire fence)

52 commentaires ont été ajoutés, ajoutez le vôtre.

Vous pouvez laisser un commentaire, cependant je ne peux pas vous garantir qu'il sera modéré rapidement ou qu'il aura une réponse, faute de temps pour m'occuper du site.

  1. Gerge

    En faisant l’install de suexec sur ma debian wheezy, la version suexec-custom remplace la version initiale de suexec, ce qui est je pense logique. Je dirais que la version custom, ajoute simplement le dossier de config suexec dans apache pour justement customiser le module suexec étant donné que nous avons modifié le root directory d’apache en le mettant dans les userhome.
    Donc je pense qu’il est inutile de faire la commande « apt-get install apache2-suexec »