Nel mio CMS, ho notato che le directory hanno bisogno del bit eseguibile (+x
) impostato affinché l'utente possa aprirli. Perché è necessaria l'autorizzazione di esecuzione per leggere una directory e come funzionano le autorizzazioni di directory in Linux?
Quando si applicano le autorizzazioni alle directory su Linux, i bit delle autorizzazioni hanno significati diversi rispetto ai file normali.
r
) consente all'utente interessato di elencare i file all'interno della directoryw
) consente all'utente interessato di creare, rinominare o eliminare i file all'interno della directory e modificare gli attributi della directoryx
) consente all'utente interessato di accedere alla directory e accedere ai file e alle directory all'internoT
o t
se il bit di esecuzione è impostato per altri) indica che i file e le directory all'interno di quella directory possono essere eliminati o rinominati solo dal loro proprietario (o root)Innanzitutto, pensa: che cos'è una directory? È solo un elenco di elementi (file e altre directory) che vivono all'interno. Quindi: directory = elenco di nomi.
Bit di lettura = Se impostato, è possibile leggere questo elenco. Ad esempio, se hai una directory chiamata poems
:
ls poems
e otterrai un elenco di elementi presenti all'interno (-l
non rivelerà alcun dettaglio!).touch poems/so <TAB> poems/somefile
.poems
la directory di lavoro (ovvero cd
in essa).Bit di scrittura = Se impostato, è possibile modificare questo elenco, ad esempio è possibile {aggiungere, rinominare, eliminare} nomi su di esso. Ma! In realtà puoi farlo solo se è impostato anche il bit di esecuzione.
Esegui bit = Imposta questa directory come directory di lavoro, ovvero cd
in essa. È necessaria questa autorizzazione se si desidera:
Caso interessante 1: se si dispone delle autorizzazioni di scrittura + esecuzione su una directory, è possibile {eliminare, rinominare} gli elementi che vivono all'interno anche se non si dispone di autorizzazioni di scrittura su tali elementi. (usa un po 'di sticky stick per impedirlo)
Caso interessante 2: se si dispone dell'autorizzazione di esecuzione (ma non di scrittura) su una directory E si dispone dell'autorizzazione di scrittura su un file che vive all'interno, non è possibile eliminare il file (poiché comporta la rimozione dall'elenco) . Tuttavia, puoi cancellarne il contenuto, ad es. se è un file di testo puoi usare vi per aprirlo ed eliminare tutto. Il file sarà ancora lì, ma sarà vuoto.
Sommario:
Bit di lettura = È possibile leggere i nomi nell'elenco.
Scrivi bit = Puoi {aggiungere, rinominare, cancellare} nomi sulla lista SE è impostato anche il bit di esecuzione.
Esegui bit = Puoi rendere questa directory la tua directory di lavoro.
PS: l'articolo citato da Kusalananda è una buona lettura.
Ho preparato questa tabella con tutte le autorizzazioni possibili e i loro effetti pratici.
(*) Solo nomi di file: altri attributi come dimensione o data non sono accessibili. Per esempio. puoi usare il tasto tab per completare automaticamente ma non il comando ls.
Alcuni pensieri :
Ecco un buon articolo su questo.
Sommario:
Una directory con il suo set di bit x
consente all'utente di cd
(cambiare directory) in questa directory e accedere ai file in essa contenuti.
Dettagli:
Leggi (r
)
La possibilità di leggere i nomi dei file memorizzati in questa directory.
Scrivi (w
)
La possibilità di rinominare i file nella directory, creare nuovi file o eliminare i file esistenti, se si dispone anche delle autorizzazioni Esegui. Se non si dispone di esegui permanenti, scrivere permanenti non ha senso.
Esegui (x
)
La possibilità di
cd
in questa directory e accedere ai file in questa directory.
Ecco alcuni esempi che dovrebbero facilitare la comprensione:
# "Full Access". Reegen can list, create, delete, rename, delete,
# and stat any files in dir.
# Access to file contents is subject to the permissions
# of the file itself.
# New files can be created, any file can be deleted, regardless of
# file permissions.
drwx------ 1 reegen reegen 4096 Jan 01 2003 dir
# Reegen can do everything in the "Full Access" list except create,
# delete, or rename files in this directory.
dr-x------ 1 reegen reegen 4096 Jan 01 2003 dir
# Reegen can do everything in the "Full Access" list except list the
# filenames in this directory. If she suspects there is a file
# named "program" she can list it, but cannot do an 'ls'
# of the directory itself. She can access any file (file
# permissions permitting) if she knows its name. She can
# create new files, or rename/delete existing ones.
d-wx------ 1 reegen reegen 4096 Jan 01 2003 dir
# Reegen cannot create or delete any files in this directory.
# She can access any file (permissions permitting) if she
# knows its name already.
d--x------ 1 reegen reegen 4096 Jan 01 2003 dir
Ci sono ancora più informazioni nell'articolo Hacking Linux Exposed article .
Dal Robert Love del libro "LINUX System Programming" capitolo 1 sezione permesso-
Per qualsiasi operazione che accede a un file o una directory, deve prima risolvere il percorso del file o della directory. La risoluzione richiede che l'utente abbia i permessi di esecuzione su tutte le directory lungo il percorso, tranne il componente percorso finale. Quindi per le directory, puoi pensare che il bit di esecuzione significhi "risolvibile".
Prendi il percorso /a/b/c.txt
ad esempio, supponiamo che l'utente abbia 1) esegui l'autorizzazione su /
e /a
; 2) ha il permesso di lettura su /a/b
; 3) permesso di leggere e scrivere su /a/b/c.txt
.
L'utente non riuscirà a leggere (elenco) /a
, perché non ha i permessi di lettura. Ma la risoluzione del percorso non fallisce.
L'utente sarà in grado di leggere (elenco) /a/b
, poiché l'utente ha il permesso di esecuzione su /
, /a
e autorizzazione di lettura su /a/b
. Nota che, quando leggi /a/b
, il nome file c.txt
è visibile, ma i metadati (ad es. dimensione del file) e il contenuto no, perché il nome file è archiviato con la directory, non con il file, ma i metadati sono memorizzati nell'inode del file.
L'utente non riuscirà a leggere /a/b/c.txt
, perché durante la risoluzione del percorso da /
per /a
per /a/b
, non riesce a /a/b
poiché l'utente non ha i permessi di esecuzione.
Vedi anche come un percorso viene risolto in un file .
Un'analogia utile è pensare a ogni file come a un libro e ogni directory come una stanza in cui i libri sono conservati.
Esistono delle regole per poter elencare tutti i nomi in una stanza: il bit di lettura per le directory. Regole per rimuovere un libro dalla stanza: il bit di scrittura per le directory. E regole per entrare in una stanza ed esplorare: la directory risultante esegue il bit.
Tali regole sono separate e diverse dalle regole di ciascun libro. Esistono delle regole per consentire a qualcuno di aprire un libro e leggerne il contenuto: i bit di lettura per ciascun file. Ci sono regole per modificare il contenuto di un libro: i bit di scrittura per ogni file. E per eseguire un file: i bit di esecuzione per ciascun file.
Scrivo bit (s) perché ci sono tre bit per ogni azione. C'è un bit di lettura per il proprietario, un bit di lettura per il gruppo (i) e un bit di lettura per tutti gli altri (altri). Se uno di questi tre bit è impostato per un utente specifico, quell'utente ha il bit di lettura attivo. Non importa come quel bit sia stato trovato attivo da ser o g roup o o ther, ha lo stesso effetto risultati.
Pertanto, un utente potrebbe essere autorizzato a entrare in una stanza e rimuovere i libri dalla biblioteca, ma non può leggere il contenuto dello stesso libro.
Ecco perché è richiesto un leggi bit per le directory: per controllare chi è autorizzato a elencare il contenuto della stanza (titoli del libro).
E il esegui bit è usato per controllare chi può entrare nella stanza dei libri.
Il significato di Execute per le directory è abbastanza chiaro. Poiché non esiste l'autorizzazione Traverse, a differenza di Windows, è necessario sovraccaricare qualcosa. I designer hanno scelto Execute, che crea confusione senza fine. Come addetto alla sicurezza del computer che assegna i diritti di Execute a qualcosa che non intendi effettivamente eseguire Execute sembra complicato.