Permission denied su Linux: 10 casi, compreso /dev/null

Ambiente di testFamiglia RHELAlmaLinux 9.8account rootDebian 12 account normaleVerificato il 2026-11-05
Trovare la causa di Permission denied

Permission denied è un errore di Linux che compare quando il tuo account attuale non ha il permesso di usare quel file, quella cartella o quel comando. Scegli il tuo caso in base al nome del comando e al percorso all'inizio della riga di errore, controlla permessi e proprietario con ls -l e riesegui con i permessi o l'account giusti per risolvere.

L'output qui sotto proviene dall'account root di un server AlmaLinux 9.8 e da un account normale di un server Debian 12; i nomi di account e di host e gli orari nell'output di /dev/null sono valori di esempio.

1️⃣ Trovare la causa di Permission denied

La riga di errore termina nella forma [comando: destinazione: Permission denied], e il nome del comando e il percorso che la precedono mostrano dove è avvenuto il blocco. Nel diagramma qui sotto, scegli il messaggio di errore simile a quello sul tuo schermo per vedere il comando da controllare per primo e la parte di questo articolo da leggere.

🧭 Scegli il tuo caso dal messaggio di errore
Diagramma esplicativo
🧭 Messaggio di errore
Messaggio di errorecat: 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
➜
Controlla primals -l secret.txtls -ld webls -l deploy.shidsudo sh -cPermessi di cartella home e filegetenforce · findmntls -l /dev/null
➜
Dove leggere in questo articolo🔲 Permessi di lettura e scrittura dei file🔲 Permesso di attraversare le cartelle🔲 Permesso di esecuzione🔲 Leggere informazioni riservate a root🔲 Quando > viene bloccato anche con sudo🔲 Accesso SSH rifiutato3️⃣ Errori Permission denied rari🔲 Quando /dev/null è diventato un file normale
Se un comando che legge o modifica un file viene rifiutato, controlla prima i permessi r e w di quel file e il proprietario.
Se nell'errore compare il nome di una cartella a metà del percorso, controlla se quella cartella ha il permesso x.
Se l'esecuzione diretta di uno script viene rifiutata, controlla se il file ha il permesso x.
Se la lettura di informazioni di sistema con un account normale viene bloccata, controlla l'account attuale e riesegui come root.
Se un reindirizzamento > viene bloccato anche con sudo, esegui come root anche il reindirizzamento.
Se prima dell'errore compaiono l'account e l'indirizzo del server, l'accesso è stato rifiutato in fase di autenticazione.
Se viene rifiutato anche se i permessi sono giusti o lo hai eseguito come root, controlla SELinux, noexec e i bit di esecuzione.
Se questa riga si ripete subito dopo l'accesso, controlla se /dev/null è diventato un file normale.

2️⃣ Errori Permission denied frequenti

🔲 Permessi di lettura e scrittura dei file

Per leggere un file l'account ha bisogno del permesso di lettura (r), per modificarlo o crearne uno nuovo del permesso di scrittura (w). secret.txt, con permessi 600, può essere letto e scritto solo dal proprietario, 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

Leggendo lo stesso file con un altro account, daemon, la lettura è stata rifiutata subito. Creare un file in una cartella senza permesso di scrittura dà lo stesso errore: sul server Debian 12, con un account normale, touch è stato bloccato in una cartella lock con permessi 000.

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

Nella prima colonna di ls -l guarda se ci sono r e w per proprietario, gruppo e altri account, in quest'ordine, poi aggiungi permessi solo all'account che ne ha bisogno con chmod oppure cambia il proprietario con chown.

🔲 Permesso di attraversare le cartelle

Anche se i permessi del file sono giusti, non arrivi al file se una cartella a metà del percorso non ha il permesso x. Per una cartella, x è il permesso di attraversarla per entrare, e r è il permesso di leggere l'elenco dei nomi che contiene.

web/ ── drw-r--r-- · r sì · x no → bloccato qui
css/ ── nome visibile, permessi · dimensione ?
style.css ── irraggiungibile
index.html ── nome visibile, permessi · dimensione ?
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

La cartella web ha solo r, quindi daemon ha potuto leggere i nomi al suo interno, css e index.html, ma senza x permessi e dimensioni sono rimasti punti interrogativi. Al contrario, la cartella site, che ha x ma non r, ha bloccato l'elenco, mentre un file di cui si conosceva già il nome si è potuto leggere.

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>

Se il percorso è lungo, usa ls -ld per controllare cartella per cartella dall'alto se c'è x, e aggiungi alla cartella bloccata solo la x che serve all'account per attraversarla.

🔲 Permesso di esecuzione

Per eseguire uno script come ./nome del file, il file deve avere il permesso x. deploy.sh, con permessi 644, è stato rifiutato.

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

Dopo aver aggiunto x al proprietario con chmod u+x, la prima colonna è diventata [-rwxr--r--].

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

Se l'esecuzione viene rifiutata anche con il permesso x, controlla se il file system che contiene il file è montato con noexec.

🔲 Leggere informazioni riservate a root

Un account normale non può leggere le informazioni che il sistema riserva a root, come i processi avviati da root o i dati delle password di altri account. Sul server Debian 12, aprire con un account normale la cartella fd del processo 1 ha dato un errore di permessi.

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

Anche i dati di scadenza della password di un altro account sono stati bloccati per lo stesso motivo; /etc/shadow, che li contiene, è un file che gli utenti normali non possono leggere. Con errori così non allargare i permessi: riesegui il comando con sudo o come root.

🔲 Quando > viene bloccato anche con sudo

sudo esegue come root solo il comando scritto dopo di lui, mentre l'apertura di un file per il reindirizzamento (>) la fa la shell dell'account attuale prima che il comando parta. Per questo, se reindirizzi l'output di sudo echo verso un file che solo root può scrivere, la riga di errore inizia con il nome della shell, nella forma [bash: percorso del file: Permission denied].

sudo echo x > /root/test.txt

Per fare come root anche il reindirizzamento, racchiudi l'intera riga in sh -c così che la shell stessa giri con sudo; anche il manuale ufficiale di sudo riporta un esempio di esecuzione dentro sh -c perché il reindirizzamento funzioni.

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

tee riceve lo standard input e lo scrive direttamente nei file indicati, quindi se esegui tee con sudo, il file lo apre tee con i permessi di root. tee mostra inoltre ancora una volta a schermo ciò che riceve.

echo x | sudo tee /root/test.txt

🔲 Accesso SSH rifiutato

Se prima di Permission denied compare [account@indirizzo del server:] e tra parentesi c'è un metodo di autenticazione come publickey, l'accesso è stato rifiutato nella fase di autenticazione, e il punto da controllare è diverso dai permessi dei file. Sul server, sshd ha StrictModes al valore predefinito yes, quindi prima di accettare l'accesso controlla permessi e proprietario della cartella home e dei file di quell'account. Se anche solo uno tra cartella home, cartella ~/.ssh e ~/.ssh/authorized_keys è scrivibile da un altro account, sshd non usa quel file di chiavi; controlla quindi con ls -ld che nessuno dei tre dia il permesso w ad altri account.

⌨️ Simulatore di Permission denied

Il simulatore qui sotto parte dall'account root, e con runuser puoi diventare un altro account, daemon, e vedere da te l'output quando vengono bloccati la lettura dei file, l'attraversamento delle cartelle e il permesso di esecuzione.

Simulatore di Permission deniedcoreutils 8.32
[root@server1 work]#
Funziona solo nel tuo browser. Parte dall'account root; aggiungi cat o ls dopo runuser -u daemon -- per vedere l'output eseguito con un altro account, daemon.

3️⃣ Errori Permission denied rari

Se vieni rifiutato anche se i permessi sono giusti, qualcosa fuori dai bit di permesso ha bloccato, come una policy SELinux o un montaggio noexec. Se l'esecuzione viene rifiutata perfino come root, controlla se il file non ha nessun bit x.

Su un server con SELinux attivo compare Permission denied quando una policy SELinux blocca l'azione, anche se i bit di permesso sono giusti; in quel caso controlla prima i registri di rifiuto di SELinux. Sui server dove gira il demone audit, i rifiuti finiscono in /var/log/audit/audit.log come [avc: denied], insieme all'azione bloccata, al nome del comando (comm) e al nome della destinazione (name).

Controlla con getenforce se SELinux è attivo ed esegui ausearch come root per vedere i rifiuti di oggi.

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

Con il demone rsync, anche il [Permission denied (13)] in ricezione era un caso di SELinux che bloccava l'accesso al percorso del modulo.

Su un file system montato con noexec non si possono eseguire file direttamente, quindi anche se ls -l mostra x vengono rifiutati con [bash: percorso dello script: Permission denied]. Passa la cartella a findmnt -T per vedere dove è montata e con quali opzioni; se tra le opzioni c'è noexec, è questo il caso.

findmnt -T /tmp -o TARGET,OPTIONS

root supera quasi tutti i controlli sui permessi, ma l'esecuzione è consentita solo se almeno uno tra proprietario, gruppo e altri account ha x. Per questo uno script senza alcuna x viene rifiutato anche quando root lo esegue con ./.

Eseguendo con ./ come root deploy.sh, la cui prima colonna era [-rw-r--r-- 1 root root], è comparso [bash: line 1: ./deploy.sh: Permission denied].

🔲 Quando /dev/null è diventato un file normale

Se subito dopo l'accesso SSH con un account normale le righe qui sotto compaiono una dopo l'altra prima del prompt della shell, controlla prima se /dev/null, il dispositivo a caratteri che tutti gli account usano per scartare l'output, è diventato un file normale di proprietà di root. Il numero di righe varia da server a server in base a quanti script profile vengono letti all'accesso, e sullo stesso server l'errore non è comparso dopo il passaggio a 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 prima colonna era [-rw-r--r--] e al posto della dimensione c'era 55: il testo di errore scartato da altri comandi si era accumulato nel file. Se una riga di comandi di pulizia che contiene la forma qui sotto viene eseguita come root, rm cancella il file di dispositivo e il reindirizzamento 2>/dev/null del comando successivo crea con lo stesso nome un nuovo file normale di proprietà di root.

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

Esegui la riga qui sotto come root. Creando il nuovo dispositivo con un nome accanto e sovrascrivendo poi con mv, non c'è nessun momento in cui il nome manca, quindi tra cancellazione e creazione non resta spazio perché un altro reindirizzamento crei di nuovo un file normale.

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

Il [c 1 3] di mknod è il numero di /dev/null nell'elenco dei numeri di dispositivo del kernel. Dopo il ripristino anche echo x > /dev/null con un account normale è terminato senza errori. Anche un riavvio può riportarlo com'era, ma la riga sopra, che non ferma il server, è più veloce.

VerificaPrima della correzioneDopo la correzione
Prima colonna di ls -l-rw-r--r--crw-rw-rw-
Dimensione in ls -l551, 3
stat -c %Fregular filecharacter special file
Scrittura con account normalePermission deniedNessun errore

Manda l'output da scartare solo fino a >/dev/null o 2>/dev/null e, a meno che tu non lo stia ripristinando, non scrivere mai /dev/null come destinazione di rm o mv.

🔢 FAQ & contenuti consigliati

Scrivere su un file system montato in sola lettura dà [Read-only file system], un errore diverso (EROFS) da Permission denied. In quel caso, prima dei permessi controlla con quali opzioni è montato quel file system.

Aprire lettura, scrittura ed esecuzione a tutti gli account fa sparire quel Permission denied, ma anche gli altri account potranno modificare il file. Aggiungere permessi solo all'account che ne ha bisogno o cambiare il proprietario mantiene la portata più stretta.

Allargare solo i permessi fa sparire Permission denied, ma /dev/null resta un file normale e l'output scartato continua ad accumularsi al suo interno. È ripristinato come dispositivo solo quando stat torna a mostrare character special file.

ℹ️ Informativa sull'affiliazione
I contenuti di questo sito includono link di affiliazione. Se un visitatore acquista un prodotto o un servizio tramite uno di questi link, il sito riceve una commissione dal venditore. In questo processo l'importo pagato dall'acquirente (durante le promozioni l'importo scende↓) non aumenta. Prezzi, sconti e disponibilità indicati si riferiscono al momento della stesura e possono differire da quelli reali: prima di acquistare verifica sempre presso il venditore. I prodotti vengono scelti e valutati secondo criteri propri, e le commissioni non influiscono sull'ordine di presentazione né sul contenuto delle valutazioni.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Dimostra di essere umano: 2   +   4   =