Se creo un file e poi ne cambio i permessi in 444
(sola lettura), come mai rm
puoi rimuoverlo?
Se faccio questo:
echo test > test.txt
chmod 444 test.txt
rm test.txt
…rm
mi chiederà se voglio rimuovere il file protetto da scrittura test.txt
. Mi sarei aspettato che rm
non posso rimuovere un file del genere e che dovrei fare un chmod +w test.txt
primo. Se eseguo rm -f test.txt
quindi rm
rimuoverà il file senza nemmeno chiedere, anche se è di sola lettura.
Qualcuno può chiarire? Sto usando Ubuntu 12.04/bash.
Risposta accettata:
Tutti rm
ha bisogno dell'autorizzazione di scrittura+esecuzione sulla directory principale. I permessi del file stesso sono irrilevanti.
Ecco un riferimento che spiega il modello di autorizzazione più chiaramente di quanto potrei mai:
Qualsiasi tentativo di accedere ai dati di un file richiede l'autorizzazione di lettura. Qualsiasi
tentativo di modificare i dati di un file richiede l'autorizzazione di scrittura. Qualsiasi
tentativo di eseguire un file (un programma o uno script) richiede l'autorizzazione di esecuzione
...
Poiché le directory non vengono utilizzate allo stesso modo dei normali file, le autorizzazioni
funzionano in modo leggermente (ma solo leggermente) diverso. Un tentativo
di elencare i file in una directory richiede l'autorizzazione di lettura per la directory
, ma non per i file all'interno. Un tentativo di aggiungere un file a una directory
, eliminare un file da una directory o rinominare un file, tutti
richiedono l'autorizzazione di scrittura per la directory, ma (forse sorprendentemente)
non per i file all'interno. L'autorizzazione di esecuzione non si applica alle directory
(una directory non può essere anche un programma). Ma quel
bit di autorizzazione viene riutilizzato per le directory per altri scopi.
È necessaria l'autorizzazione di esecuzione su una directory per potervi inserire cd
(ovvero, per creare una directory come directory di lavoro corrente).
Execute è necessario in una directory per accedere alle informazioni "inode" dei
file all'interno. È necessario per cercare una directory in cui leggere gli
inode dei file all'interno. Per questo motivo il permesso di esecuzione su
una directory è spesso chiamato invece permesso di ricerca.