Sur un VPS Linux, une erreur « Permission denied » vient souvent d’un propriétaire, d’un groupe, d’un mode de fichier ou d’un répertoire parent mal compris. Ce guide explique comment lire les permissions Unix avec ls -l, les modifier avec chmod et changer le propriétaire avec chown, sans appliquer des droits trop larges.
Le modèle de permissions Unix
Linux associe à chaque fichier et répertoire un propriétaire, un groupe et un ensemble de droits. Le système vérifie ces informations lorsqu’un utilisateur, un script shell ou un service tente de lire, écrire ou exécuter une ressource. Le compte root dispose de privilèges étendus, mais l’administration quotidienne doit rester ciblée et traçable.
Sur Debian ou Ubuntu, ces contrôles s’appliquent aux fichiers d’une application web, d’un script Python, d’un projet PHP, d’un service Apache ou d’un service lancé par systemd. Le compte effectif doit avoir le droit nécessaire, que la session soit ouverte sur le serveur ou via SSH.
Lire les permissions avec ls -l
Depuis un terminal et une ligne de commande Bash, placez-vous dans le répertoire courant ou indiquez un chemin absolu :
pwd
cd /chemin/vers/repertoire
ls -la /chemin/vers/repertoire
ls -ld /chemin/vers/dossier
Une ligne commence par un indicateur de type, puis neuf caractères de permission. Les trois premiers concernent le propriétaire, les trois suivants le groupe et les trois derniers les autres utilisateurs. r désigne la lecture, w l’écriture et x l’exécution ou la traversée d’un répertoire. Un tiret indique que le droit correspondant n’est pas accordé.
Le premier caractère indique un fichier ordinaire avec -, un répertoire avec d ou un lien symbolique avec l. L’option -a affiche aussi les fichiers cachés. Cette lecture permet de distinguer un fichier de configuration, un dossier de données et un lien dans l’arborescence.
Vérifier le propriétaire et le groupe
La commande ls -l affiche le propriétaire et le groupe associés. Un processus peut fonctionner avec un compte différent de celui qui a créé le fichier. Vérifiez l’identité effective du compte qui exécute le service avant de modifier les permissions.
id
whoami
ls -ln /chemin/vers/fichier
ps -eo user,group,comm
Pour un répertoire, examinez les permissions de traversée de chaque dossier parent. Un fichier lisible peut rester inaccessible si un répertoire situé plus haut ne permet pas sa traversée. Un accès SSH réussi ne signifie pas que chaque chemin applicatif est accessible.
Modifier un droit avec chmod en notation symbolique
La notation symbolique ajoute ou retire un droit ciblé :
chmod u+w /chemin/vers/fichier
chmod g-r /chemin/vers/fichier
Les lettres u, g et o représentent le propriétaire, le groupe et les autres. Pour un répertoire, l’exécution correspond à la possibilité de le traverser. Ajouter x n’accorde pas automatiquement la lecture de la liste des éléments.
Comprendre la notation octale
La notation octale représente les droits de lecture, écriture et exécution par une somme : lecture vaut 4, écriture vaut 2 et exécution vaut 1. Les trois chiffres correspondent au propriétaire, au groupe et aux autres utilisateurs.
chmod 640 /chemin/vers/fichier
chmod 750 /chemin/vers/dossier
640 donne lecture et écriture au propriétaire, lecture au groupe et aucun droit aux autres. 750 donne tous les droits au propriétaire, lecture et traversée au groupe, et aucun droit aux autres. La valeur 777 n’est pas une correction générique : elle accorde écriture et exécution à tous.
Changer le propriétaire avec chown
Si le fichier appartient au mauvais compte, chown permet de changer le propriétaire et le groupe :
sudo chown compte-service:compte-service /chemin/vers/fichier
sudo chown -R compte-service:compte-service /chemin/vers/dossier
L’option récursive agit sur tout le contenu du répertoire. Vérifiez toujours le chemin avant de l’utiliser. Sur des données sensibles, préférez une modification ciblée et contrôlez ensuite avec find ou ls -l.
Contrôler les nouveaux fichiers avec umask
Les permissions d’un nouveau fichier dépendent aussi de l’umask du compte qui le crée. Elle retire certains droits par défaut :
umask
umask 027
Contrôlez le mode réel après la création d’un fichier texte ou d’un fichier de configuration et documentez le choix dans la configuration du service.
Diagnostiquer Permission denied
Identifiez le nom du fichier et le chemin d’accès, vérifiez le compte du processus, lisez les permissions, puis contrôlez les répertoires parents. Un nouveau sous-répertoire peut avoir un propriétaire différent.
namei -l /chemin/vers/fichier
stat /chemin/vers/fichier
find /chemin/vers/dossier -maxdepth 2 -type f -print
sudo -u compte-service test -r /chemin/vers/fichier && echo OK
namei -l suit les permissions de chaque composant du chemin. stat fournit les métadonnées détaillées. Le test avec sudo -u vérifie la lecture avec le compte réel du service. Pour filtrer la sortie standard, ls -l | grep config recherche une chaîne de caractères dans une liste de fichiers.
Lister des fichiers et répertoires sans se tromper de chemin
Une erreur de permissions est parfois une erreur de chemin. Spécifiez le répertoire racine de la recherche, distinguez un chemin relatif d’un chemin absolu et vérifiez les noms avant une commande récursive.
ls -la /var/www
find /var/www -type d -name 'config*' -print
find /var/www -type f -perm /111 -print
find /var/www -type f -name '*.conf' -print
Ces exemples listent des répertoires, des fichiers de configuration et des fichiers exécutables. Ils repèrent les sous-répertoires, les fichiers cachés et les noms inattendus avant un chmod ou un chown. Le répertoire personnel et le répertoire racine ne doivent pas être confondus.
Vérifier les droits d’accès et le contenu
Pour comprendre une permission refusée, comparez le type de fichier, le contenu du répertoire, la dernière modification et le compte qui effectue l’action. La sortie de ls -la donne le nom du répertoire, le propriétaire, le groupe, le mode et la date. Un identifiant de processus peut ensuite être relié au compte avec lequel le service travaille.
ls -la /chemin/vers/dossier
file /chemin/vers/fichier
head -n 5 /chemin/vers/fichier
ps -o pid,user,group,comm -C nom-du-service
Ne modifiez pas le contenu du fichier pendant ce contrôle. Cette vérification distingue un fichier lisible d’un exécutable, un dossier traversable d’un fichier ordinaire, et une erreur de droits d’une erreur de chemin.
Quand les permissions classiques ne suffisent pas
Certains systèmes utilisent des ACL, des profils de sécurité ou des restrictions de service en plus du propriétaire, du groupe et du mode. Si les permissions semblent correctes mais que l’accès échoue encore, vérifiez les ACL et les journaux :
getfacl /chemin/vers/fichier
systemctl status nom-du-service
journalctl -u nom-du-service --no-pager
Erreurs fréquentes à éviter
- Ne remplacez pas systématiquement les droits par
777. - Ne confondez pas propriétaire et compte du service.
- Ne lancez pas
chown -Rsur un chemin non vérifié. - Ne retirez pas l’exécution d’un répertoire que l’application doit parcourir.
- Ne testez pas uniquement avec
root. - Après chaque changement, relisez les permissions et gardez une trace.
Besoin d’un VPS Linux pour votre projet ?
ElypseCloud propose des environnements VPS Linux pour héberger vos applications et services. Consultez nos offres et choisissez une base adaptée à votre usage.
Découvrir les VPS LinuxPour aller plus loin, consultez notre guide des premiers réglages de sécurité d’un serveur dédié, la page sur l’installation de Docker sur un VPS, le guide pour publier un service Linux en HTTPS, notre page VPS Ubuntu et les autres guides ElypseCloud.