Permission denied sous Linux : 10 cas, dont /dev/null

Environnement de testFamille RHELAlmaLinux 9.8Compte rootDebian 12 compte standardVérifié le 2026-11-05
Trouver la cause de Permission denied

Permission denied est une erreur Linux qui apparaît quand votre compte actuel n'a pas le droit d'utiliser ce fichier, ce dossier ou cette commande. Choisissez votre cas d'après le nom de la commande et le chemin au début de la ligne d'erreur, vérifiez les droits et le propriétaire avec ls -l, puis relancez avec les droits ou le compte adaptés pour régler le problème.

La sortie ci-dessous provient du compte root d'un serveur AlmaLinux 9.8 et d'un compte ordinaire d'un serveur Debian 12 ; les noms de compte et d'hôte ainsi que l'heure dans la sortie de /dev/null sont des valeurs d'exemple.

1️⃣ Trouver la cause de Permission denied

Une ligne d'erreur se termine par la forme [commande: cible: Permission denied], et le nom de la commande et le chemin placés devant indiquent où le blocage a eu lieu. Dans le schéma ci-dessous, choisissez le message d'erreur qui ressemble à celui de votre écran pour voir la commande à vérifier en premier et la partie de cet article à lire.

🧭 Choisir votre cas d'après le message d'erreur
Schéma explicatif
🧭 Message d'erreur
Message d'erreurcat: secret.txt: Permission deniedls: cannot access 'web/index.html': Permission denied./deploy.sh: Permission deniedls: cannot open directory '/proc/1/fd': Permission deniedbash: /root/test.txt: Permission denieduser@server1: Permission denied (publickey)(13)Permission denied-bash: /dev/null: Permission denied
➜
À vérifier d'abordls -l secret.txtls -ld webls -l deploy.shidsudo sh -cDroits du dossier personnel et des fichiersgetenforce · findmntls -l /dev/null
➜
Où lire dans cet article🔲 Droits de lecture et d'écriture sur les fichiers🔲 Droit de traverser un dossier🔲 Droit d'exécution🔲 Lire des informations réservées à root🔲 Quand > est bloqué malgré sudo🔲 Connexion SSH refusée3️⃣ Erreurs Permission denied rares🔲 Quand /dev/null est devenu un fichier ordinaire
Si une commande qui lit ou modifie un fichier est refusée, vérifiez d'abord les droits r et w de ce fichier et son propriétaire.
Si le nom d'un dossier situé au milieu du chemin apparaît dans l'erreur, vérifiez que ce dossier a le droit x.
Si l'exécution directe d'un script est refusée, vérifiez que le fichier a le droit x.
Si la lecture d'informations système avec un compte ordinaire est bloquée, vérifiez le compte actuel et relancez en root.
Si une redirection > est bloquée malgré sudo, exécutez aussi la redirection en root.
Si le compte et l'adresse du serveur précèdent l'erreur, la connexion a été refusée à l'authentification.
Si c'est refusé alors que les droits sont corrects ou que vous l'avez lancé en root, vérifiez SELinux, noexec et les bits d'exécution.
Si cette ligne se répète juste après la connexion, vérifiez si /dev/null est devenu un fichier ordinaire.

2️⃣ Erreurs Permission denied fréquentes

🔲 Droits de lecture et d'écriture sur les fichiers

Pour lire un fichier, le compte a besoin du droit de lecture (r) ; pour le modifier ou en créer un nouveau, du droit d'écriture (w). secret.txt, dont les droits sont 600, ne peut être lu et écrit que par son propriétaire, root.

ls -l secret.txt
-rw------- 1 root root 16 Oct 29 00:29 secret.txt
runuser -u daemon -- cat secret.txt
cat: secret.txt: Permission denied

La lecture du même fichier avec un autre compte, daemon, a été refusée aussitôt. Créer un fichier dans un dossier sans droit d'écriture donne la même erreur : sur le serveur Debian 12, touch avec un compte ordinaire a été bloqué dans un dossier lock aux droits 000.

touch ~/touchtest/lock/x.txt
touch: cannot touch '/home/user/touchtest/lock/x.txt': Permission denied

Dans la première colonne de ls -l, regardez si r et w sont présents pour le propriétaire, le groupe et les autres comptes, dans cet ordre, puis ajoutez des droits uniquement au compte qui en a besoin avec chmod, ou changez le propriétaire avec chown.

🔲 Droit de traverser un dossier

Même si les droits du fichier sont corrects, vous ne pouvez pas l'atteindre si un dossier au milieu du chemin n'a pas le droit x. Pour un dossier, x est le droit de le traverser pour entrer, et r le droit de lire la liste des noms qu'il contient.

web/ ── drw-r--r-- · r oui · x non → bloqué ici
css/ ── nom visible, droits · taille ?
style.css ── inaccessible
index.html ── nom visible, droits · taille ?
ls -ld web web/css
drw-r--r-- 3 root root 35 Oct 29 00:29 web
drw-r--r-- 2 root root 23 Oct 29 00:29 web/css
runuser -u daemon -- ls -l web
ls: cannot access 'web/css': Permission denied
ls: cannot access 'web/index.html': Permission denied
total 0
d????????? ? ? ? ?            ? css
-????????? ? ? ? ?            ? index.html

Le dossier web n'a que r : daemon a donc pu lire les noms qu'il contient, css et index.html, mais faute de x, les droits et les tailles sont restés des points d'interrogation. À l'inverse, le dossier site, qui a x mais pas r, a bloqué le listage, alors qu'un fichier dont on connaissait le nom a pu être lu.

ls -ld site
drwx--x--x 2 root root 24 Oct 29 00:29 site
runuser -u daemon -- ls site
ls: cannot open directory 'site': Permission denied
runuser -u daemon -- cat site/index.html
<h1>index</h1>

Si le chemin est long, vérifiez avec ls -ld chaque dossier depuis le haut pour voir s'il a x, et ajoutez au dossier bloqué uniquement le x dont le compte a besoin pour le traverser.

🔲 Droit d'exécution

Pour lancer un script sous la forme ./nom du fichier, ce fichier doit avoir le droit x. deploy.sh, aux droits 644, a été refusé.

ls -l deploy.sh
-rw-r--r-- 1 root root 8 Oct 29 00:29 deploy.sh
./deploy.sh
bash: line 1: ./deploy.sh: Permission denied

Après avoir ajouté x au propriétaire avec chmod u+x, la première colonne est passée à [-rwxr--r--].

chmod u+x deploy.sh
ls -l deploy.sh
-rwxr--r-- 1 root root 8 Oct 29 00:29 deploy.sh

Si l'exécution est refusée malgré le droit x, vérifiez si le système de fichiers qui contient ce fichier est monté avec noexec.

🔲 Lire des informations réservées à root

Un compte ordinaire ne peut pas lire les informations que le système réserve à root, comme les processus lancés par root ou les informations de mot de passe des autres comptes. Sur le serveur Debian 12, ouvrir le dossier fd du processus 1 avec un compte ordinaire a donné une erreur de droits.

ls /proc/1/fd
ls: cannot open directory '/proc/1/fd': Permission denied
chage -l daemon
chage: Permission denied.

Les informations d'expiration du mot de passe d'un autre compte ont été bloquées pour la même raison ; /etc/shadow, qui les contient, est un fichier que les utilisateurs ordinaires ne peuvent pas lire. Pour ce genre d'erreur, n'élargissez pas les droits : relancez la commande avec sudo ou en root.

🔲 Quand > est bloqué malgré sudo

sudo n'exécute en root que la commande écrite après lui, alors que l'ouverture d'un fichier pour une redirection (>) est faite par le shell du compte actuel avant le lancement de la commande. Ainsi, si vous redirigez la sortie de sudo echo vers un fichier que seul root peut écrire, la ligne d'erreur commence par le nom du shell, sous la forme [bash: chemin du fichier: Permission denied].

sudo echo x > /root/test.txt

Pour faire aussi la redirection en root, entourez toute la ligne de sh -c afin que le shell lui-même s'exécute avec sudo ; le manuel officiel de sudo donne lui aussi un exemple d'exécution dans sh -c pour que la redirection fonctionne.

sudo sh -c 'echo x > /root/test.txt'

tee reçoit l'entrée standard et l'écrit directement dans les fichiers indiqués : si vous lancez tee avec sudo, c'est donc tee, avec les droits root, qui ouvre le fichier. tee affiche aussi une fois de plus à l'écran ce qu'il reçoit.

echo x | sudo tee /root/test.txt

🔲 Connexion SSH refusée

Si [compte@adresse du serveur:] précède Permission denied et qu'une méthode d'authentification comme publickey figure entre parenthèses, la connexion a été refusée à l'étape d'authentification, et ce qu'il faut vérifier n'est pas du côté des droits de fichiers. Sur le serveur, sshd a StrictModes à sa valeur par défaut yes : avant d'accepter la connexion, il contrôle les droits et le propriétaire du dossier personnel et des fichiers de ce compte. Si un autre compte peut écrire dans un seul des trois, le dossier personnel, le dossier ~/.ssh ou ~/.ssh/authorized_keys, sshd n'utilise pas ce fichier de clés ; vérifiez donc avec ls -ld qu'aucun des trois ne donne le droit w aux autres comptes.

⌨️ Simulateur Permission denied

Le simulateur ci-dessous démarre avec le compte root ; avec runuser, vous pouvez devenir un autre compte, daemon, et voir par vous-même la sortie quand la lecture de fichiers, la traversée de dossiers et le droit d'exécution sont bloqués.

Simulateur Permission deniedcoreutils 8.32
[root@server1 work]#
Fonctionne uniquement dans votre navigateur. Il démarre avec le compte root ; ajoutez cat ou ls après runuser -u daemon -- pour voir la sortie obtenue avec un autre compte, daemon.

3️⃣ Erreurs Permission denied rares

Si c'est refusé alors que les droits sont corrects, quelque chose a bloqué en dehors des bits de droits, comme une politique SELinux ou un montage noexec. Si l'exécution est refusée même en root, vérifiez si le fichier n'a aucun bit x.

Sur un serveur où SELinux est activé, Permission denied apparaît quand une politique SELinux bloque l'action, même si les bits de droits sont corrects ; dans ce cas, vérifiez d'abord les journaux de refus de SELinux. Sur les serveurs où le démon audit tourne, les refus sont consignés dans /var/log/audit/audit.log sous la forme [avc: denied], avec l'action bloquée, le nom de la commande (comm) et le nom de la cible (name).

Vérifiez avec getenforce si SELinux est activé, puis lancez ausearch en root pour voir les refus du jour.

getenforce
ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts today

Avec le démon rsync, le [Permission denied (13)] obtenu en réception venait lui aussi de SELinux, qui bloquait l'accès au chemin du module.

Sur un système de fichiers monté avec noexec, les fichiers ne peuvent pas être exécutés directement : même si ls -l affiche x, ils sont refusés avec [bash: chemin du script: Permission denied]. Donnez le dossier à findmnt -T pour voir où il est monté et avec quelles options ; si noexec figure parmi les options, c'est ce cas.

findmnt -T /tmp -o TARGET,OPTIONS

root passe la plupart des contrôles de droits, mais l'exécution n'est autorisée que si au moins l'un des trois, propriétaire, groupe ou autres comptes, a x. C'est pourquoi un script sans aucun x est refusé même quand root le lance avec ./.

Lancer avec ./ en root deploy.sh, dont la première colonne était [-rw-r--r-- 1 root root], a donné [bash: line 1: ./deploy.sh: Permission denied].

🔲 Quand /dev/null est devenu un fichier ordinaire

Si, juste après une connexion SSH avec un compte ordinaire, les lignes ci-dessous s'affichent à la suite avant l'invite du shell, vérifiez d'abord si /dev/null, le périphérique caractère que tous les comptes utilisent pour jeter la sortie, est devenu un fichier ordinaire appartenant à root. Le nombre de lignes varie selon le serveur, en fonction du nombre de scripts profile lus à la connexion, et sur le même serveur l'erreur n'est pas apparue après le passage en root.

-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
...
ls -l /dev/null
-rw-r--r-- 1 root root 55 Jan 10 09:00 /dev/null
stat -c %F /dev/null
regular file

La première colonne était [-rw-r--r--] et l'emplacement de la taille affichait 55 : le texte d'erreur jeté par d'autres commandes s'était accumulé dans le fichier. Si une ligne de commandes de nettoyage contenant la forme ci-dessous est exécutée en root, rm supprime le fichier de périphérique, puis la redirection 2>/dev/null de la commande suivante crée sous le même nom un nouveau fichier ordinaire appartenant à root.

rm -f /dev/null 2>/dev/null

Exécutez la ligne ci-dessous en root. En créant le nouveau périphérique sous un nom voisin puis en l'écrasant avec mv, le nom ne disparaît à aucun moment : aucune autre redirection n'a le temps de recréer un fichier ordinaire entre la suppression et la création.

mknod -m 666 /dev/null.new c 1 3 && mv -f /dev/null.new /dev/null && ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 Jan 10 09:05 /dev/null
stat -c %F /dev/null
character special file

Le [c 1 3] de mknod est le numéro de /dev/null dans la liste des numéros de périphériques du noyau. Après la réparation, echo x > /dev/null avec un compte ordinaire s'est aussi terminé sans erreur. Un redémarrage peut aussi le remettre en place, mais la ligne ci-dessus, qui n'arrête pas le serveur, est plus rapide.

VérifierAvant le correctifAprès la correction
Première colonne de ls -l-rw-r--r--crw-rw-rw-
Taille dans ls -l551, 3
stat -c %Fregular filecharacter special file
Écriture avec un compte ordinairePermission deniedAucune erreur

Envoyez la sortie à jeter seulement vers >/dev/null ou 2>/dev/null et, sauf pour une réparation, n'écrivez jamais /dev/null comme cible de rm ou de mv.

🔢 FAQ & contenus recommandés

Écrire sur un système de fichiers monté en lecture seule donne [Read-only file system], une erreur différente (EROFS) de Permission denied. Dans ce cas, vérifiez avec quelles options ce système de fichiers est monté avant de regarder les droits.

Ouvrir la lecture, l'écriture et l'exécution à tous les comptes fait disparaître ce Permission denied, mais les autres comptes peuvent alors eux aussi modifier le fichier. Ajouter des droits uniquement au compte qui en a besoin, ou changer le propriétaire, garde une portée plus étroite.

Élargir les droits fait disparaître Permission denied, mais /dev/null reste un fichier ordinaire, et la sortie jetée continue de s'y accumuler. Il n'est réparé en tant que périphérique que lorsque stat indique de nouveau character special file.

ℹ️ Mention d'affiliation
Le contenu de ce site contient des liens d'affiliation. Lorsqu'un visiteur achète un produit ou un service via l'un de ces liens, le site perçoit une commission du vendeur. Le montant payé par l'acheteur(il baisse lors des promotions ↓), lui, n'augmente pas. Les prix, remises et stocks indiqués correspondent à la date de rédaction et peuvent différer ; vérifiez-les donc auprès du vendeur avant d'acheter. Les produits sont choisis et évalués selon nos propres critères, et les commissions n'influencent ni l'ordre de présentation ni le contenu des évaluations.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Prouvez que vous êtes humain : 1   +   2   =