Que vous gériez un site web en local ou sur un serveur de production, la maîtrise des commandes chmod
et chown
sous GNU/Linux est indispensable. Ces outils permettent de contrôler précisément qui peut lire, modifier ou exécuter un fichier ou un dossier, un aspect fondamental pour garantir la sécurité et le bon fonctionnement de vos projets web. Dans cet article, découvrez comment attribuer les bons droits aux bons utilisateurs, interpréter les permissions octales, et éviter les pièges classiques liés aux erreurs d’accès ou aux droits trop permissifs.
La logique des permissions de fichiers sous GNU/Linux
Quand on installe un site web sur un serveur Apache sous GNU/Linux, la question des permissions n’est jamais bien loin. Bien souvent, une erreur d’accès ou un message « Forbidden » ne vient pas d’un bug dans le code, mais d’un simple problème de droits mal attribués. Comprendre comment Linux gère ces permissions est donc indispensable pour assurer la stabilité, la sécurité et l’accessibilité de votre site.
Le système d’exploitation GNU/Linux applique une logique simple mais puissante : chaque fichier ou dossier appartient à un utilisateur, à un groupe, et peut être consulté ou modifié par d’autres utilisateurs selon les règles que vous définissez.
Concrètement, on distingue trois catégories d’utilisateurs :
- Le propriétaire (user) : L’utilisateur qui a créé le fichier ou à qui il a été attribué,
- Le groupe (group) : Un ensemble d’utilisateurs partageant certains accès, comme les membres d’une même équipe,
- Les autres utilisateurs (others) : Tous ceux qui ne sont ni le propriétaire, ni membres du groupe.
Pour chacune de ces catégories, il est possible d’attribuer des droits précis :
r
– read : droit de lecture, permet d’ouvrir et de consulter le contenu d’un fichier ou la liste des fichiers dans un dossier,w
– write : droit d’écriture, autorise la modification ou la suppression d’un fichier, ou l’ajout de fichiers dans un dossier,x
– execute : droit d’exécution, permet de lancer un fichier exécutable ou d’entrer dans un répertoire en ligne de commande.
Ce système, bien que minimaliste, permet un contrôle extrêmement fin sur les accès aux ressources. Et c’est cette finesse qui fait la force de Linux en matière de sécurité.
Pour visualiser rapidement les droits d’un fichier ou d’un répertoire, la commande suivante est souvent utilisée :
ls -l /chemin/du/dossier
Elle affiche une liste détaillée où la première colonne est particulièrement importante. Celle-ci contient 10 caractères :
- le premier indique le type d’élément :
d
pour un dossier,-
pour un fichier,l
pour un lien symbolique, - les 9 suivants sont regroupés en trois blocs de trois caractères (
rwx
), représentant respectivement les droits du propriétaire, du groupe et des autres utilisateurs.
Voici quelques exemples pour illustrer :
-rw-r--r--
: un fichier classique, modifiable uniquement par son propriétaire, mais lisible par tous,drwxr-xr-x
: un dossier accessible à tous, mais modifiable uniquement par le propriétaire,-rwx------
: un script exécutable réservé à son propriétaire, inaccessible aux autres.
À ce stade, il est essentiel de retenir que la compréhension et la gestion de ces permissions constituent une première ligne de défense contre les accès non souhaités. Elles sont aussi la garantie d’une bonne collaboration entre utilisateurs d’un même système, surtout dans les environnements de développement partagés ou sur les serveurs de production.
Utiliser chmod et chown : Adapter les valeurs octales et comprendre les bonnes pratiques
Une fois que l’on comprend comment les permissions sont structurées, il devient essentiel de savoir comment les modifier. C’est précisément ce que permettent les commandes chmod
et chown
. La première ajuste les droits d’accès, tandis que la seconde gère les propriétaires et les groupes. Ensemble, elles forment les outils de base pour sécuriser efficacement vos fichiers et répertoires sous GNU/Linux, notamment dans un contexte de développement web.
Le fonctionnement de chmod
La commande chmod permet de modifier les droits d’accès d’un fichier ou d’un dossier. Elle fonctionne aussi bien en mode symbolique (ex : chmod g+w monfichier
) qu’en mode numérique (ex : chmod 755 monfichier
). Ce mode numérique repose sur une correspondance binaire :
Position binaire | Valeur octale | Signification |
---|---|---|
000 | 0 | Aucun droit |
001 | 1 | Exécution |
010 | 2 | Écriture |
011 | 3 | Écriture + exécution |
100 | 4 | Lecture |
101 | 5 | Lecture + exécution |
110 | 6 | Lecture + écriture |
111 | 7 | Tous les droits |
Par exemple, la commande suivante donne des droits différenciés à chaque type d’utilisateur :
sudo chmod 751 monscript
Ce qui signifie :
- Propriétaire :
rwx
(7), - Groupe :
r-x
(5), - Autres :
--x
(1).
Les valeurs recommandées pour les sites web
Voici un tableau récapitulatif des permissions les plus courantes dans le cadre de l’hébergement de sites web sous Apache :
Valeur | Utilisation typique |
---|---|
644 | Fichiers : lecture/écriture pour le propriétaire, lecture pour tous |
755 | Dossiers : tous les droits pour le propriétaire, lecture/exécution pour les autres |
700 | Accès exclusif au propriétaire |
775 | Lecture/écriture/exécution pour propriétaire et groupe |
777 | Tous les droits pour tous (fortement déconseillé sauf en local) |
Exemple d’application pour un site :
sudo chmod -R 755 /var/www/html/monsite
Le chown pour gérer les propriétaires
La commande chown
permet de modifier le propriétaire et/ou le groupe d’un fichier ou dossier. Elle est particulièrement utile pour attribuer les fichiers web au bon utilisateur, notamment à www-data
, utilisé par Apache :
sudo chown -R $USER:www-data ~/htdocs/mon-site
Et pour s’assurer que vous faites partie du groupe :
sudo usermod -a -G www-data $USER
Des cas pratiques : Appliquer les bonnes permissions sur un site WordPress ou PrestaShop
Maintenant que vous maîtrisez les principes de base des permissions Linux, voyons comment les appliquer concrètement dans un environnement de développement web. Que vous utilisiez WordPress ou PrestaShop, attribuer les bons droits dès le départ permet d’éviter de nombreuses erreurs et de sécuriser votre installation.
Cas n°1 : installer wordpress en local
Installer un site WordPress en local sur un serveur Apache (par exemple avec une stack LAMP ou MAMP) nécessite quelques étapes pour que le serveur ait accès aux bons fichiers, et que vous puissiez travailler confortablement sans rencontrer de restrictions liées aux droits d’accès.
- Commencez par copier votre site WordPress dans le répertoire
~/htdocs/mon-wordpress
. Vous pouvez le faire à l’aide de votre client FTP, d’un utilitaire commersync
ou encore en clonant un dépôt Git si votre projet est versionné :git clone https://votre-repo-git.com/mon-wordpress.git ~/htdocs/mon-wordpress
Ce dossier
htdocs
est généralement le répertoire racine accessible par Apache en environnement local. - Assignez ensuite le groupe
www-data
à tous les fichiers et dossiers du projet. Cela permet à Apache (qui s’exécute sous l’utilisateurwww-data
) d’y accéder sans rencontrer d’erreur de type « Permission denied » :sudo chown -R $USER:www-data ~/htdocs/mon-wordpress
Ici,
$USER
représente votre utilisateur actuel, qui devient le propriétaire des fichiers. Le groupewww-data
devient le groupe principal du projet. - Appliquez ensuite des permissions plus souples pour le développement. Le mode
775
autorise l’utilisateur et le groupe à lire, écrire et exécuter les fichiers et dossiers, ce qui est utile pour modifier les thèmes, plugins ou configurer le CMS :sudo chmod -R 775 ~/htdocs/mon-wordpress
Ces droits sont pratiques dans un environnement local, mais restent trop permissifs pour un hébergement en production.
- Lorsque vous préparez la mise en ligne de votre site, il est important de restreindre les droits pour garantir une meilleure sécurité. Vous pouvez définir les permissions suivantes :
755
pour les dossiers : permet à Apache d’y accéder et d’y naviguer, sans pouvoir les modifier,644
pour les fichiers : lecture pour tous, mais écriture uniquement pour le propriétaire.
Voici les commandes correspondantes :
sudo find ~/htdocs/mon-wordpress -type d -exec chmod 755 {} \; sudo find ~/htdocs/mon-wordpress -type f -exec chmod 644 {} \;
Cette configuration est généralement recommandée pour un environnement de production sécurisé, tout en permettant au site de fonctionner correctement.
Une fois ces permissions bien définies, vous éviterez la plupart des erreurs d’accès aux fichiers, que ce soit pour l’écriture dans le cache, le téléchargement de médias ou l’installation de plugins. Cela permet aussi de garder le contrôle sur qui peut faire quoi dans votre arborescence de projet. Pensez aussi à étudier les scripts PowerShell pour la sauvegarde de vos données WP.
Cas n°2 : Installer PrestaShop avec gestion des dossiers de cache et de modules
Contrairement à certains CMS plus légers, PrestaShop repose sur une architecture complexe qui nécessite l’accès en écriture à plusieurs dossiers, surtout lors de l’installation initiale, de l’ajout de modules, de la mise en cache ou du développement de thèmes personnalisés. Sans les bonnes permissions, vous risquez de rencontrer des erreurs bloquantes lors de l’exécution du site ou de la configuration de certaines fonctionnalités.
Avant tout, identifiez les dossiers dans lesquels le serveur web (Apache) doit pouvoir écrire. Les répertoires les plus concernés sont :
var/cache
: utilisé pour stocker les fichiers de cache générés par Symfony, le framework sur lequel repose PrestaShop,var/logs
: contient les fichiers de journalisation (logs) du site, utiles pour le débogage,var/sessions
: gère les sessions utilisateurs (clients, back-office),modules/
: indispensable pour installer ou personnaliser des modules,themes/
: nécessaire si vous travaillez sur un thème personnalisé ou installez un thème premium.
Pour un environnement de développement local uniquement, vous pouvez attribuer des permissions plus permissives à ces dossiers, afin d’éviter toute friction pendant la phase de configuration ou de tests :
sudo chmod -R 777 ~/htdocs/mon-prestashop/var/cache
sudo chmod -R 777 ~/htdocs/mon-prestashop/var/logs
sudo chmod -R 777 ~/htdocs/mon-prestashop/var/sessions
sudo chmod -R 777 ~/htdocs/mon-prestashop/modules
sudo chmod -R 777 ~/htdocs/mon-prestashop/themes
Important : ces permissions donnent un accès total à tous les utilisateurs du système, ce qui représente un risque important en production. Ne les utilisez que dans un cadre local et sécurisé.
Une configuration plus propre et sécurisée consiste d’abord à attribuer la propriété des fichiers à votre utilisateur local et au groupe du serveur Apache (www-data
) :
sudo chown -R $USER:www-data ~/htdocs/mon-prestashop
Ensuite, appliquez une politique de permissions plus restrictive pour l’ensemble du projet :
sudo find ~/htdocs/mon-prestashop -type d -exec chmod 755 {} \;
sudo find ~/htdocs/mon-prestashop -type f -exec chmod 644 {} \;
Ces commandes attribuent :
- le droit d’exécution (nécessaire pour naviguer dans un dossier) à tous sur les répertoires,
- la lecture seule des fichiers à tous, avec écriture réservée au propriétaire.
Ensuite, vous devez autoriser en écriture uniquement les dossiers nécessaires au fonctionnement dynamique du site :
sudo chmod -R 775 ~/htdocs/mon-prestashop/var
sudo chmod -R 775 ~/htdocs/mon-prestashop/modules
sudo chmod -R 775 ~/htdocs/mon-prestashop/themes
Ces droits permettent à votre utilisateur local et au serveur Apache (via le groupe www-data
) de lire, écrire et exécuter les fichiers dans ces dossiers spécifiques, sans ouvrir l’accès aux autres utilisateurs du système.
Dans certains cas, notamment pendant l’installation de PrestaShop, vous pourriez rencontrer une erreur liée au fichier de configuration. Assurez-vous alors que ce fichier est bien modifiable :
sudo chmod 664 ~/htdocs/mon-prestashop/app/config/parameters.php
Enfin, si vous utilisez la gestion avancée du cache via Symfony, vérifiez également les droits sur tous les sous-répertoires de var
. Ce dossier est souvent une source de conflits de permissions après une mise à jour ou une restauration :
sudo find ~/htdocs/mon-prestashop/var -type d -exec chmod 775 {} \;
En suivant cette méthode, vous garantissez à la fois la compatibilité avec les exigences de PrestaShop et une configuration plus sécurisée que le recours systématique à chmod 777
. Cette bonne pratique limite les risques tout en conservant une grande souplesse pour développer ou maintenir votre boutique en local.
La gestion fine avec setgid
Dans un projet collaboratif, où plusieurs développeurs interviennent sur les mêmes fichiers (que ce soit pour un site WordPress ou une boutique PrestaShop) il devient important de garantir une cohérence dans les droits d’accès. Par défaut, lorsqu’un utilisateur crée un fichier dans un dossier, c’est son propre groupe qui lui est attribué. Cela peut provoquer des conflits d’accès, notamment si le serveur Apache (groupe www-data
) ou un autre utilisateur ne peut plus modifier ou lire le fichier.
Pour éviter ce genre de situation, GNU/Linux propose une solution simple : le bit setgid. Lorsqu’il est activé sur un dossier, ce bit force tous les nouveaux fichiers ou sous-dossiers créés à hériter automatiquement du groupe du dossier parent, ici typiquement www-data
.
Voici comment l’appliquer sur un projet PrestaShop en local :
sudo chmod -R 2775 ~/htdocs/mon-prestashop
Cette commande a plusieurs effets bénéfiques :
- tous les fichiers et dossiers créés dans
mon-prestashop
hériteront automatiquement du groupewww-data
, ce qui évite les conflits d’accès, - la collaboration entre plusieurs utilisateurs (par exemple dans une équipe de développement) devient plus fluide,
- les actions du serveur Apache (écriture dans le cache, mise à jour automatique, installation de modules) se font sans erreur de permission,
- vous gagnez en sécurité et en maintenabilité, sans avoir à réattribuer les groupes manuellement à chaque ajout de fichier.
Dans la valeur 2775
, le 2
initial active le bit setgid
, tandis que 775
conserve des droits classiques : lecture, écriture et exécution pour le propriétaire et le groupe, et lecture + exécution pour les autres utilisateurs.
Cette méthode est particulièrement recommandée dans les environnements locaux partagés (machine commune, conteneur Docker utilisé par plusieurs personnes, etc.), ou sur un serveur distant où vous déployez un site en équipe. Elle permet de maintenir une structure de permissions claire, cohérente et sans surprises, ce qui est fondamental pour éviter les pertes de temps liées à des erreurs de droits.
0 commentaires