Sécuriser un serveur Apache avec PHP : début de solution

apache_logoCe billet fait suite au précédent qui avait pour objectif de vous faire une démonstration des problématiques liées au déploiement d’un serveur web mutualisé basé sur Apache. Je vais donc vous présenter des solutions permettant de résoudre ces problèmes.

Limites

Je n’ai pas la prétention de vous permettre de sécuriser parfaitement un serveur Apache. Je vous présente ici une série d’éléments que j’ai pu apprendre à travers mon précédent emploi. Il faut dire qu’un hack de serveur web toutes les deux semaines, ca force à s’occuper de la sécurité des serveurs web. J’exagère, hélas, à peine.

Ces solutions de sécurisation permettent d’éviter qu’un site puisse nuire aux autres sites sur le serveur web. Si un site mal codé dispose de failles de sécurité rendant possible une attaque sur lui même, je n’ai pas de solution coté serveur à vous proposer. Dans ce cas, il faut se plonger dans le code et réparer les failles de sécurité. Ces solutions permettront tout de même de vous prémunir d’une attaque sur toute votre plateforme et de pouvoir rejeter la faute sur vos clients.

Choix du logiciel PHP

Tout d’abord, lorsque vous installez un serveur web, il est fortement recommandé d’installer la version Suhosin. Il s’agit d’une version de PHP qui a été patchée pour réparer des failles de sécurités connues. La liste des améliorations est disponible sur leur site. Si vous avez fait le choix judicieux de prendre une distribution Debian, les versions de PHP qui sont livrées avec disposent d’office du patch Suhosin. Je ne sais pas ce qu’il est des autres distributions mais je doute que ce soit le cas partout.

Ensuite, il faut avoir une version PHP à jour. Ca parait peut être inutile de dire ca mais ca reste une condition essentielle. La mise à jour des logiciels permet de bénéficier de la réactivité des communautés en termes de mises à jour de sécurité. Ce serait quand même dommage de ne pas en profiter et de se faire compromettre un serveur à cause de failles connues depuis plusieurs mois.

Configuration de PHP

La configuration de PHP peut largement influer sur la sécurité du serveur web. Il existe de nombreuses fonctionnalités de PHP qui permettent de faire des choses intéressantes pour le développeur mais très inquiétant pour l’administrateur système.

Tout d’abord, la directive fopen est une directive qui devrait être désactivée par défaut. Cette directive permet d’ouvrir un fichier et ensuite de le modifier ou bien de le lire. Par défaut, si cette directive est activée, il est possible de lire n’importe quel fichier dont /etc/passwd. « Mais /etc/passwd, tout le monde ne peut pas le lire ! ». Et bien si, les droits sur les fichiers /etc/passwd sont de 644. Le monde entier pourra donc trouver la liste des comptes utilisateurs de votre machine sur le web.

Ensuite, si un de vos clients a besoin de la directive fopen, car elle peut quand même être utile. Vous allez donc devoir restreindre l’accès aux fichiers ce qui est possible dans PHP via la directive open_basedir. Grace à cette directive, vous allez donc contraindre vos clients à ne pas sortir de leur répertoire que ce soit pour l’exécution de scripts PHP ou la modification/lecture de fichiers.. Il est également généralement recommandé de désactiver la directive register_globals mais je ne suis pas capable de justifier pourquoi. Je sais juste qu’il s’agit d’une option qui n’est plus d’actualité dans les versions de PHP d’aujourd’hui (Plus d’informations sur ce site).

Grace à ces éléments, la sécurité de votre serveur web sera déjà bien améliorée. Afin de pouvoir aller encore plus loin et améliorer le niveau de sécurité, je vous présenterais suPHP la prochaine fois.