Magento : permissions des fichiers

La documentation de Magento recommande (ici) que tous les fichiers et dossiers appartiennent à l’utilisateur du serveur web, avec des droits en 700 pour les dossiers et en 600 pour les fichiers. Ces recommandations sont à suivre pour ne jamais avoir à se poser de question sur les droits des fichiers. Cela dit, avoir tous les fichiers appartenants au serveur web lève la question de la sécurité. Dans un outil comme Magento où l’on peut installer des modules plus ou moins bien maintenu, il ne serait pas étonnant de voir une faille de sécurité qui permettrait à quiconque de modifier le contenu de vos fichiers simplement en demandant à apache de le faire.

La théorie

La règle de base que j’applique est donc simple: apache, ou n’importe quel serveur web ne peut écrire que là ou il doit absolument pouvoir écrire. Je distingue donc deux types de fichiers, ceux que le serveur web doit uniquement pouvoir lire (le code, les images, etc) et ceux dans lesquels il doit pouvoir écrire (fichiers ou dossiers de logs, de cache, etc). Ces deux groupes de fichiers doivent avoir des droits différents, pour gérer ces droits, j’utilise deux groupes Unix nommés team et www-team.

Tous les fichiers doivent appartenir au groupe team, sauf les fichiers dans lesquels le serveur web doit pouvoir écrire qui doivent appartenir au groupe www-team. Les utilisateurs amenés a devoir modifier les fichiers doivent être membre des groupes team et www-team. L’utilisateur du serveur web doit lui être membre du group www-team.

Pour terminer sur le paramétrage, les fichiers doivent être en 664, lecture et écriture au groupe et au propriétaire, lecture uniquement pour les autres. Les dossiers doivent être en 775, même principe que pour les fichiers mais en ajoutant le droit d’exécution.

La pratique

Création des groupes:

sudo addgroup team 
sudo addgroup www-team

Mettre l’utilisateur du serveur web  dans le groupe www-team (ici le serveur web est Apache et l’utilisateur est www-data)

sudo usermod -a -G www-team www-data

Assigner les utilisateurs aux groupes

sudo usermod -a -G team guillaume 
sudo usermod -a -G www-team guillaume

Changer les permissions des fichiers

cd magento/ 
chown -R guillaume:team . 
find . -type f -exec chmod 664 {} \; 
find . -type d -exec chmod 775 {} \;

Permettre à apache d’écrire là ou il doit pouvoir écrire

chown -R guillaume:www-team var media

Les inconvénients

Pour beaucoup l’inconvénient de cette méthode est qu’il n’est plus possible d’utiliser magento-connect pour installer ou mettre à jour des modules depuis le back-office puisque apache n’a pas le droit de modifier les fichiers.

Une solution est de configurer un serveur ftp et de configurer les paramètre ds le gestionnaire de Magento Connect. Un autre est de temporairement basculer les droits pour permettre à apache de pouvoir écrire

cd magento/
chown -R guillaume:www-team .

Il ne faut pas oublier ensuite de revenir à une version plus sécurisée en rejouant les commandes de la partie précédente. Une autre solution est de mettre l’utilisateur du serveur web dans le groupe team, toujours temporairement.

En ce qui me concerne j’ai choisi de ne pas utiliser Magento Connect sur un serveur de production, les installations ou mise à jour de modules sont faites et testées sur un serveur de développement, plus permissif au niveau des droits des fichiers, mais moins accessible depuis l’extérieur, puis déployées sur le serveur de production avec Git. Je détaillerais surement cette procédure dans un futur post.

 

About the Author: Guillaume Luchet

Guillaume Luchet est Directeur de la R&D et Lead Développeur chez Bilendi Technology, entrepreneur et développeur freelance.