Par défaut, la plupart des logiciels sont installés avec les permissions et les droits de propriété les plus souples sur les fichiers et les répertoires. Ceci est normalement fait dans l’intérêt du développeur du logiciel, étant donné que son logiciel doit être installé sur une gamme de systèmes divers avec des configurations variées. Cet article a pour but de vous donner un aperçu de la façon de configurer votre installation Magento avec les permissions les plus strictes pour des raisons de sécurité.

Sous Linux, il existe deux environnements principaux :

Les scripts PHP qui s’exécutent via mod_php ou équivalent et tous les scripts sont exécutés en tant qu’utilisateur du serveur web. Cela signifie que lorsque votre script est en cours d’exécution, il peut lire (et parfois écrire) avec le même niveau de privilège que le serveur web. Cela peut permettre l’espionnage entre comptes dans les configurations d’hébergement partagé et n’est pas idéal dans un environnement partagé, en particulier lorsqu’il s’agit de commerce électronique.

Les scripts PHP qui s’exécutent en tant qu’utilisateur propriétaire des fichiers eux-mêmes via une construction intermédiaire telle que suPHP, PHP suEXEC, PHP-FPM, etc. Dans ce cas, vos scripts s’exécutent en votre nom et il s’agit d’une configuration globale plus sûre lorsqu’elle est exécutée sur un serveur partagé.

Exécution en tant qu’utilisateur du serveur web (#1)

NOTE : Ces instructions sont destinées à être utilisées avec Magento Enterprise. Si vous faites ce qui suit avec Magento Community Edition, la fonctionnalité Magento Connect ne fonctionnera pas. Cela dit, nous avons inclus un script permettant d’activer et de désactiver ces changements si vous souhaitez utiliser ces instructions de manière flexible.

Par défaut, de nombreux hébergeurs mutualisés et dédiés exécutent vos scripts en tant qu’utilisateur du serveur web, comme indiqué ci-dessus. C’est le système d’exploitation par défaut sur la plupart des systèmes Linux et bien que dans un environnement partagé ce ne soit pas le plus sûr, il est possible d’y remédier partiellement. Cela se fait en limitant l’accès par le biais de permissions de fichiers plus strictes, ce qui atténue certains des problèmes de sécurité inhérents. Dans les environnements d’hébergement dédiés, cette méthode est en fait souhaitable, principalement pour des raisons de performance, et tous nos plans Magento SIP dédiés et en grappe utilisent cette méthode. Aucune des mises en garde relatives à l’hébergement partagé ne s’applique aux serveurs dédiés étant donné que le serveur ne sert qu’un seul client.

Voici les étapes que nous suivons en anglais, suivies des commandes de script :

Si vous avez le droit de modifier la propriété des fichiers et des répertoires (ce qui signifie normalement que vous avez un accès root), définissez la propriété de l’utilisateur et du groupe de tous les fichiers dans le répertoire Magento à votre utilisateur local. Il se peut que cela soit déjà fait dans votre environnement et il s’agit simplement d’une précaution pour une bonne mesure afin d’éliminer tous les fichiers ou répertoires appartenant au serveur web.

Changez les permissions Linux pour tous les fichiers dans votre répertoire de base Magento en lecture et écriture par l’utilisateur propriétaire (vous) et en lecture seulement par tous les autres. Ceci afin d’obtenir une base où le serveur web lui-même peut lire tous les fichiers. Il aura besoin d’un accès en lecture pour exécuter des scripts et servir du contenu statique comme des images, des CSS et des fichiers Javascript.

En relation  Comment utiliser les icônes de type de fichier joint avec WordPress ?

Changez les permissions Linux pour tous les répertoires dans votre répertoire de base Magento pour qu’ils soient listables, modifiables et navigables pour l’utilisateur propriétaire et simplement navigables pour tous les autres.

Les répertoires ?media ? et ?var ? requièrent un traitement spécial puisque le serveur web lui-même doit être capable de lire et de créer/modifier des fichiers. C’est là que la plupart des instructions donnent le change et vont directement chercher les droits d’édition des fichiers et des répertoires. Nous adopterons une approche moins privilégiée en modifiant les permissions Linux pour tous les répertoires afin qu’ils soient listables, modifiables et navigables par l’utilisateur propriétaire et seulement navigables par tous les autres. Nous allons également prendre une mesure supplémentaire en définissant les permissions de « groupe » Linux sur le fichier de sorte que n’importe qui dans le groupe puisse lister, éditer les fichiers et naviguer dans les répertoires également.

find -type d N-exec chmod 775 {} N- ;[/bash]

Nous ferons quelque chose de similaire pour les fichiers des répertoires ?media ? et ?var ? également. Il s’agit d’accorder à l’utilisateur propriétaire les droits de lecture et d’écriture, à l’utilisateur du groupe les droits de lecture et d’écriture et à tous les autres les simples droits de lecture.

find -type f exec chmod 664 {} N ;[/bash]

Cette étape nécessite également un accès au niveau racine ou un hébergeur flexible (comme nous). Vous devrez définir la propriété des fichiers et des répertoires pour les répertoires ?media ? et ?var ? comme étant la propriété du serveur web et avoir la propriété du groupe pour votre utilisateur local. Vous pourriez dire que c’est un peu à l’envers, mais pour des raisons techniques concernant le calcul de l’utilisation de l’espace disque, c’est ce qui est recommandé et fait sur nos systèmes.

find exec chown webuser.youruser {} N ;[/bash]

Cette étape nécessite à nouveau un accès root et/ou un hôte flexible et est probablement la moins bien comprise de toutes les étapes. Dans les étapes 5 et 6, nous avons mis en place un système dans lequel vous autorisez le serveur web à lire et écrire vos fichiers, mais d’une manière très spécifique – ce qui est une bonne chose. Nous l’avons fait pour un ensemble spécifique de fichiers et de répertoires existants. Nous devons nous assurer que les futurs fichiers et répertoires créés suivent un ensemble égal (ou plus strict) de propriété et d’autorisations. Pour ce faire, nous utilisons certaines caractéristiques spéciales des répertoires Linux, à savoir les bits SUID et SGID. Ces bits, lorsqu’ils sont activés, indiquent à Linux d’hériter de la propriété du répertoire qui englobe immédiatement le fichier ou le répertoire en cours de création. Simplement, lorsque Magento crée des fichiers et des répertoires dans ?media ? et ?var ? leur propriété reflétera ce que nous avons défini à l’étape 6.

find -type d exec chmod u+s,g+s {} N ;[/bash]

Enfin, pour une protection minimale contre les fouineurs, changez les permissions sur les fichiers de configuration de Magento pour qu’ils soient lisibles et inscriptibles par le propriétaire du fichier et lisibles par le groupe uniquement.

En relation  Comment graver un fichier ISO sur CD ou DVD avec votre Mac ?

Script de permissions pour les utilisateurs web de Magento :

#!/bin/bash

if [ ! -f ./app/etc/local.xml ] ; then

echo « ? ERROR »

echo « ? Cela ne ressemble pas à une installation de Magento. Please make sure »

echo « ? que vous exécutez ceci depuis le répertoire racine de la documentation principale de Magento »

exit

if [ `id -u` != 0 ] ; then

echo « ? ERROR »

echo « ? Ce script doit être exécuté en tant que root afin que la propriété du fichier »

echo « ? les changements puissent être définis correctement »

exit

echo -n « Entrez l’utilisateur du compte UNIX local (utilisateur ftp) : »

read user

echo -n « Entrez l’utilisateur local du serveur web UNIX (normalement ?apache ?): »

read webuser

if [ ! `id -u $user` ] ; then

echo « ? ERROR »

echo « ? No such user : $user »

exit

if [ ! `id -u $webuser` ] ; then

echo « ? ERROR »

echo « ? No such user : $webuser »

exit

find . N-exec chown $user.$user {} ;

find . -type f N-exec chmod 644 {} ;

find . -type d exec chmod 711 {} ;

find ./media -type d exec chmod 775 {} ;

find ./var -type d exec chmod 775 {} ;

find ./media -type f exec chmod 664 {} ;

find ./var -type f exec chmod 664 {} ;

find ./media -exec chown $webuser.$user {} ;

find ./var -exec chown $webuser.$user {} ;

find ./media -type d N-exec chmod u+s,g+s {} N ;

find ./var -type d exec chmod u+s,g+s {} N ;

chmod 640 ./app/etc/*.xml

C’est tout ce qu’il y a à faire. En faisant ce qui précède, vous obtiendrez certaines des permissions les plus strictes disponibles sur une installation Magento.

Exécuter en tant qu’utilisateur local (#2)

Dans les environnements partagés, cette méthode est préférable en raison du niveau de sécurité supplémentaire fourni par Linux si les permissions sont configurées correctement, comme nous allons le faire. Tous nos plans Magento SIP partagés fournissent cet environnement et il est préférable étant donné qu’il fournit une isolation des permissions basées sur l’utilisateur de sorte que des permissions de propriété et de fichier plus strictes peuvent être utilisées.

Voici les étapes que nous suivons en anglais, suivies des commandes du script :

Si vous avez le droit de modifier la propriété des fichiers et des répertoires (ce qui signifie normalement que vous avez un accès root), définissez la propriété de l’utilisateur et du groupe de tous les fichiers dans le répertoire Magento à votre utilisateur local. Il se peut que cela soit déjà fait dans votre environnement et il s’agit simplement d’une précaution pour une bonne mesure.

Changez les permissions Linux pour tous les fichiers dans votre répertoire de base Magento en lecture et écriture par l’utilisateur propriétaire (vous) et en lecture seulement par tous les autres. Ceci afin d’obtenir une base où le serveur web lui-même peut lire tous les fichiers. Il aura besoin d’un accès en lecture pour servir le contenu statique comme les images, les CSS et les fichiers Javascript. Contrairement à la méthode ci-dessus, nous ajusterons les permissions des scripts pour qu’elles soient plus strictes à l’étape 4.

Modifiez les permissions Linux pour tous les répertoires de votre répertoire de base Magento en les rendant listables, éditables et navigables pour l’utilisateur propriétaire et simplement navigables pour tous les autres.

En relation  Comment créer un module personnalisé dans Magento 2 : un guide pour les débutants

Réduisez les permissions pour tous les scripts PHP afin que seul votre utilisateur puisse les lire. C’est l’idéal car seul votre utilisateur doit avoir besoin de connaître le contenu des scripts.

Enfin, et c’est la partie la plus intéressante de cette méthode, désactivez tous les accès à vos fichiers de configuration locaux pour Magento, sauf pour vous-même. Puisque les scripts PHP sont les seuls à avoir besoin de lire ces fichiers et que PHP s’exécute en votre nom, vous pouvez désactiver l’accès à tous les autres, ce qui est très agréable !

Script des permissions de l’utilisateur local de Magento : ?

#!/bin/bash

if [ ! -f ./app/etc/local.xml ] ; then

echo « ? ERROR »

echo « ? Cela ne ressemble pas à une installation de Magento. Please make sure »

echo « ? que vous exécutez ceci depuis le répertoire racine de la documentation principale de Magento »

exit

if [ `id -u` != 0 ] ; then

echo « ? ERROR »

echo « ? Ce script doit être exécuté en tant que root afin que la propriété du fichier »

echo « ? les changements puissent être définis correctement »

exit

echo -n « Entrez l’utilisateur UNIX sous lequel les scripts Magento doivent être exécutés : »

read user

if [ ! `id -u $user` ] ; then

echo « ? ERROR »

echo « ? No such user : $user »

exit

find . N-exec chown $user.$user {} ;

find . -type f N-exec chmod 644 {} ;

find . -type d exec chmod 711 {} ;

find . -type f -name « *.php » -exec chmod 600 {} ;

chmod 600 ./app/etc/*.xml

Une dernière note

J’ai vu de nombreuses instructions pour des logiciels basés sur le web qui indiquent que les fichiers doivent avoir des permissions de 777 (lecture/écriture/exécution pour tous). Cela peut être nécessaire pour certains répertoires, mais c’est rarement le cas pour les fichiers. Des permissions de 666 (lecture/écriture pour tous) sont suffisantes dans ces cas (si des permissions plus strictes ne peuvent pas être définies). Les permissions 777 définissent également le bit d’exécution sur les fichiers, ce que la plupart des serveurs web n’exigent pas (et ne devraient pas exiger) dans la plupart des cas. Le réglage des permissions 666 indique simplement « lecture et écriture pour tous les utilisateurs », ce qui n’est pas génial non plus, mais est plus correct.

Script de réinitialisation des permissions : (applicable aux deux méthodes ci-dessus)

#!/bin/bash

if [ ! -f ./app/etc/local.xml ] ; then

echo « ? ERROR »

echo « ? Cela ne ressemble pas à une installation de Magento. Please make sure »

echo « ? que vous exécutez ceci depuis le répertoire racine de la documentation principale de Magento »

exit

if [ `id -u` != 0 ] ; then

echo « ? ERROR »

echo « ? Ce script doit être exécuté en tant que root afin que la propriété du fichier »

echo « ? les changements puissent être définis correctement »

exit

echo -n « Entrez l’utilisateur UNIX sous lequel les scripts Magento doivent être exécutés : »

read user

if [ ! `id -u $user` ] ; then

echo « ? ERROR »

echo « ? No such user : $user »

exit

find . N-exec chown $user.$user {} ;

find . -type f N-exec chmod 644 {} ;

find . -type d N-exec chmod 711 {} ;

find . -type f -name « *.php » -exec chmod 600 {} ;

chmod 600 ./app/etc/*.xml