Modification des permissions de fichiers et recommandations pour WordPress sur un système Linux

Pour renforcer la sécurité de votre installation WordPress, il est important d’avoir les permissions de fichiers recommandées. Voici quelques recommandations à ce sujet, recueillies sur le web.

Tout d’abord, un bref résumé des recommandations :

# réinitialiser aux valeurs sûres par défaut
find /usr/share/wordpress -exec chown www-data:www-data {} \;
find /usr/share/wordpress -type d -exec chmod 755 {} \;
find /usr/share/wordpress -type f -exec chmod 644 {} \;

# permettre à WordPress de gérer wp-config.php (mais empêcher l'accès mondial)
chgrp www-data /usr/share/wordpress/wp-config.php
chmod 660 /usr/share/wordpress/wp-config.php

# permettre à WordPress de gérer .htaccess
chgrp www-data /usr/share/wordpress/.htaccess
chmod 664 /usr/share/wordpress/.htaccess

# permettre à WordPress de gérer wp-content
find /usr/share/wordpress/wp-content -exec chgrp www-data {} \;
find /usr/share/wordpress/wp-content -type d -exec chmod 775 {} \;
find /usr/share/wordpress/wp-content -type f -exec chmod 664 {} \;

Ceci est principalement destiné à ceux qui sont pressés et veulent aller droit au but. En gros, vous essayez de limiter qui peut faire quoi sur votre serveur web. Voici les instructions de wordpress.org sur la gestion des permissions plus en détail : Source : http://codex.wordpress.org/Changing_File_Permissions

Sur les systèmes de fichiers informatiques, différents fichiers et répertoires ont des permissions qui spécifient qui et quoi peut les lire, les écrire, les modifier et y accéder. C’est important car WordPress peut avoir besoin d’un accès en écriture aux fichiers de votre répertoire wp-content pour activer certaines fonctionnalités.

Modes de permissions

  7       5     5
 user   group  world
 r+w+x  r+x    r+x
 4+2+1  4+0+1  4+0+1  = 755

Le mode de permission est calculé en additionnant les valeurs suivantes pour l’utilisateur, le groupe du fichier et pour tous les autres :

  • L ecture 4 - Autorisé à lire les fichiers
  • É criture 2 - Autorisé à écrire/modifier les fichiers
  • eX écution 1 - Lire/écrire/supprimer/modifier/répertoire

Exemples de modes de permissions

ModePermissionsExplication
0477-r—rwxrwxle propriétaire a la lecture seule (4), les autres et le groupe ont rwx (7)
0677-rw-rwxrwxle propriétaire a rw seulement (6), les autres et le groupe ont rwx (7)
0444-r—r—r—tous ont la lecture seule (4)
0666-rw-rw-rw-tous ont rw seulement (6)
0400-r--------le propriétaire a la lecture seule (4), le groupe et les autres n’ont aucune permission (0)
0600-rw-------le propriétaire a rw seulement, le groupe et les autres n’ont aucune permission

Schéma de permissions pour WordPress

Les permissions varient d’un hébergeur à l’autre, ce guide ne détaille donc que les principes généraux. En règle générale, tous les fichiers doivent appartenir à votre compte utilisateur (ftp) sur votre serveur web et être accessibles en écriture par ce compte. Sur les hébergements mutualisés, les fichiers ne doivent jamais appartenir au processus du serveur web lui-même (parfois c’est l’utilisateur www, apache ou nobody).

Les permissions de fichiers et de dossiers WordPress doivent être les mêmes pour la plupart des utilisateurs, selon le type d’installation effectuée et les paramètres umask de votre système au moment de l’installation.

REMARQUE : Si vous avez installé WordPress vous-même, vous n’avez probablement pas besoin de modifier les permissions de fichiers. Sauf si vous rencontrez des erreurs de permissions, vous ne devriez probablement pas y toucher.

Hébergement mutualisé avec suexec

Ce qui précède peut ne pas s’appliquer aux systèmes d’hébergement mutualisé qui utilisent l’approche “suexec” pour exécuter les binaires PHP. Dans un tel système, le processus PHP s’exécute en tant que propriétaire des fichiers PHP eux-mêmes. Le schéma de permissions correct est simple :

  • Tous les fichiers doivent appartenir au compte de l’utilisateur réel, pas au compte utilisateur du processus httpd.
  • Tous les répertoires doivent être en 755 ou 750.
  • Tous les fichiers doivent être en 644 ou 640. Exception : wp-config.php doit être en 600 pour empêcher les autres utilisateurs du serveur de le lire.
  • Aucun répertoire ne doit jamais être en 777, même les répertoires d’upload.

Utilisation d’un client FTP

Les clients FTP vous permettent de définir les permissions des fichiers et répertoires sur votre hôte distant. Cette fonction est souvent appelée chmod ou set permissions dans le menu du programme.

Utilisation de la ligne de commande

Si vous avez un accès shell/SSH à votre compte d’hébergement, vous pouvez utiliser chmod pour modifier les permissions des fichiers. Avant de commencer, il est recommandé de lire quelques tutoriels pour vous assurer de comprendre ce que vous pouvez accomplir. Définir des permissions incorrectes peut rendre votre site inaccessible.

Vous pouvez rendre tous les fichiers de votre répertoire wp-content accessibles en écriture en deux étapes, mais essayez d’abord des alternatives plus sûres comme modifier uniquement le répertoire. Essayez chacune de ces commandes et si elles ne fonctionnent pas, passez à la récursive. Remplacez DIR par le dossier dans lequel vous voulez écrire :

chmod -v 746 DIR
chmod -v 747 DIR
chmod -v 756 DIR
chmod -v 757 DIR
chmod -v 764 DIR
chmod -v 765 DIR
chmod -v 766 DIR
chmod -v 767 DIR

Si ces commandes ne vous permettent pas d’écrire, réessayez-les toutes dans l’ordre, mais cette fois remplacez -v par -R, qui modifiera récursivement chaque fichier du dossier. Si après cela vous ne pouvez toujours pas écrire, vous pouvez essayer 777.

À propos de Chmod

chmod est une commande Unix qui signifie “change mode” sur un fichier. Le drapeau -R signifie appliquer le changement récursivement à tous les fichiers et répertoires à l’intérieur du répertoire.

Les dangers du 777

  7      7      7
 user   group  world
 r+w+x  r+w+x  r+w+x
 4+2+1  4+2+1  4+2+1  = 777

Souvent, le serveur Apache est “possédé” par les comptes utilisateur dhapache ou nobody. Ces comptes ont un accès limité aux fichiers sur le serveur, pour une très bonne raison. En définissant vos fichiers et dossiers personnels comme accessibles en écriture par tout le monde (World-Writable), vous les rendez littéralement accessibles en écriture par tout le monde. Les utilisateurs dhapache et nobody qui font tourner votre serveur auront un accès complet aux fichiers de votre compte utilisateur.

Le pire scénario

Le pire qui puisse arriver en utilisant les permissions 777 sur un dossier ou même un fichier, c’est que si un pirate malveillant parvient à télécharger un fichier malicieux ou à modifier un fichier existant pour exécuter du code, il aura un contrôle complet sur votre blog, y compris les informations de votre base de données et votre mot de passe.

Trouver une solution de contournement

C’est généralement assez facile d’obtenir les fonctionnalités améliorées fournies par les plugins WordPress impressionnants, sans vous mettre en danger. Contactez l’auteur du plugin ou le support de votre serveur et demandez une solution de contournement.

Trouver des permissions de fichiers sécurisées

Le fichier .htaccess est l’un des fichiers accédés par le propriétaire du processus exécutant le serveur. Si vous définissez des permissions trop basses, votre serveur ne pourra pas accéder au fichier et cela causera une erreur. La méthode consiste donc à commencer avec des restrictions trop élevées et à augmenter les permissions jusqu’à ce que cela fonctionne.

Exemples de paramètres de permissions

Permissions par défaut (umask 022) :

644 -rw-r--r--  /home/user/wp-config.php
644 -rw-r--r--  /home/user/cgi-bin/.htaccess
644 -rw-r--r--  /home/user/cgi-bin/php.ini
755 -rwxr-xr-x  /home/user/cgi-bin/php.cgi
755 -rwxr-xr-x  /home/user/cgi-bin/php5.cgi

Permissions sécurisées :

600 -rw-------  /home/user/wp-config.php
604 -rw----r--  /home/user/cgi-bin/.htaccess
600 -rw-------  /home/user/cgi-bin/php.ini
711 -rwx--x--x  /home/user/cgi-bin/php.cgi
100 ---x------  /home/user/cgi-bin/php5.cgi

Voir aussi