Avendo lavorato con Linux per anni e trovandomi con un po 'di tempo libero, ho deciso di rivisitare alcune basi. Quindi ho riletto le informazioni sulle autorizzazioni (senza controllare il codice sorgente) e i suoi casi speciali per le cartelle e ho trovato un nuovo (almeno per me ...) modo di pensare alle autorizzazioni delle cartelle (per un utente specifico / gruppo / altri): immagino una cartella come una tabella con due colonne, in questo modo:
filename | inode
foo | 111
bar | 222
L' autorizzazione di lettura significa che è possibile leggere (ed elencare) la colonna di sinistra della tabella, l' autorizzazione di scrittura corrisponde all'aggiunta e alla rimozione di voci nella tabella e l' autorizzazione di esecuzione corrisponde alla possibilità di tradurre dal nome del file all'inode; cioè puoi accedere al contenuto della cartella.
Ho fatto alcuni esperimenti, e i risultati sono tutti coerenti con questa mia "visione del mondo", ma una conclusione sembra inevitabile: che una cartella con autorizzazioni d-w-------
sia totalmente inutile. Elaborazione: non puoi elencarne il contenuto, non puoi leggere tutti i file che conosci esistono all'interno (perché non puoi tradurre i nomi in inode), non puoi rimuovere o rinominare o aggiungere file, perché di nuovo ciò implicherebbe la traduzione e non puoi nemmeno aggiungere hardlink (perché, suppongo, ciò significherebbe aggiungere un nome e un numero di inode, il che significa che potresti conoscere entrambi, che a sua volta, ancora una volta supponendo, viola lo scopo di annullare l'autorizzazione all'esecuzione) . E, naturalmente, se ci sono file all'interno di una di queste cartelle, allora non puoi nemmeno cancellare quella cartella, perché non puoi eliminare il suo contenuto.
Quindi ... vorrei fare due domande:
- Questa mia analogia è corretta o è un grosso errore?
- Indipendentemente dalla risposta precedente, c'è qualche situazione in cui è appropriata avere una cartella con le autorizzazioni descritte?
mkdir foo ; chmod 200 foo ; touch foo/bar
lo capisco touch: cannot touch ‘foo/bar’: Permission denied
. Questo succede anche se foo / bar esiste già. Sto testando in bash (Arch Linux).