Eseguire vs leggere bit. Come funzionano le autorizzazioni di directory in Linux?


381

Nel mio CMS, ho notato che le directory necessitano del bit eseguibile ( +x) impostato affinché l'utente possa aprirle. Perché è necessaria l'autorizzazione di esecuzione per leggere una directory e come funzionano le autorizzazioni di directory in Linux?


17
... perché è per quello che serve la bandiera "+ x" :)
badp


16
Pensa in questo modo: la voce della directory contiene i nomi dei file , quindi "leggere" una directory elenca i file, "usando" la directory accede ai file.
Tylerl,

7
Con il bit di esecuzione della directory impostato , è possibile attraversare la sua gerarchia . Dato che appartieni a "altre" persone e hai solo eseguito bit set ( chmod 771 dirOne) non puoi elencare il contenuto di dirOne. MA se contiene una sottodirectory "dirTwo" con diritti impostati come ( chmod 774 dirTwo) puoi effettivamente elencarne il contenuto!
Stphane,

1
I futuri visitatori dovrebbero anche vedere la domanda correlata su AskUbuntu: askubuntu.com/q/1106822/295286
Sergiy Kolodyazhnyy

Risposte:


352

Quando si applicano le autorizzazioni alle directory su Linux, i bit delle autorizzazioni hanno significati diversi rispetto ai file normali.

  • Il bit di lettura ( r) consente all'utente interessato di elencare i file all'interno della directory
  • Il bit di scrittura ( w) consente all'utente interessato di creare, rinominare o eliminare i file all'interno della directory e modificare gli attributi della directory
  • Il bit di esecuzione ( x) consente all'utente interessato di accedere alla directory e accedere ai file e alle directory all'interno
  • Il bit sticky ( To tse 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)

25
Ottima risposta, ma penso che l'ultima frase sia fuorviante. Nessuna di queste autorizzazioni può essere sovrascritta per file in realtà. Qui "access" è un po 'ambiguo: +xsulla directory concede l'accesso agli inode di file attraverso questa directory specifica (niente di meno, niente di più, beh ... forse anche chdirbisogno +x). Per leggere o scrivere il contenuto di un file, l'utente ha anche bisogno +r/ +wsu questo file, ma questi sono permessi distinti (non sovrascrivono nulla).
Stéphane Gimenez,

2
Il flag immutabile è specifico del filesystem e non sovrascriverà esattamente quei permessi, ecco perché penso che l'ultima frase sia fuorviante :-)
Stéphane Gimenez,

1
Penso che potrebbe essere utile menzionare ACL in questa e altre risposte, poiché la loro applicazione per alcune directory può essere fuorviante se si considerano solo le informazioni fornite da Chris Down
user907860

4
Sembra che questa risposta non menzioni l'effetto combinato di scrivere bit ed eseguire bit, come menziona la risposta di Baldrick di seguito? cioè se hai solo il permesso di scrivere ma non quello di esecuzione, allora è abbastanza inutile.
xji,

1
@ StéphaneGimenez " +xnella directory concede l'accesso agli inode dei file" - Sembra un buon nemonico, ma forse non racconta tutta la storia? Senza il bit di esecuzione impostato su una directory, non è possibile modificare il nome file di un file in quella directory. Mi chiedo perché, perché il nome file è memorizzato in una voce della directory, non in un inode.
Kevin Wheeler,

259

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. Quindi, ad esempio, se hai una directory chiamata poems:

  • Puoi ls poemse otterrai un elenco di oggetti all'interno ( -lnon rivelerai alcun dettaglio!).
  • È possibile utilizzare il completamento della riga di comando, ad es touch poems/so <TAB> poems/somefile.
  • Non puoi creare la poemstua directory di lavoro (cioè cdin essa).

Scrivi bit = 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.

Execute bit = Imposta questa directory come directory di lavoro, cioè cdin essa. È necessaria questa autorizzazione se si desidera:

  • accedere (leggere, scrivere, eseguire) oggetti che vivono all'interno.
  • modificare l'elenco stesso, cioè aggiungere, rinominare, cancellare i nomi su di esso (ovviamente il bit di scrittura deve essere impostato sulla directory).

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 evitarlo)

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 esempio 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 = È possibile impostare questa directory come directory di lavoro.

PS: l'articolo citato da Kusalananda è una buona lettura.


17
Pensare alla directory come a una lista rende le cose più chiare e logiche.
Trismegisto

20
Ottima risposta, ma troppo focalizzata sul termine "directory di lavoro". Ho bisogno del xbit per ogni accesso a questo file: per cat a/b/c/d, ho bisogno di xpo 'su tutti a, be c, anche se io non li uso come cwd.
glglgl

1
È qui che ho scoperto che non puoi scrivere a meno che non sia anche eseguibile! Anche il caso 2 è interessante, ottima risposta!
Mirko,

1
Un'altra nota è che anche se si dispone xdell'autorizzazione per la directory, se non si dispone xdell'autorizzazione per il file , non è possibile "eseguire" il file. Puoi solo catper esempio, ma non puoi eseguire il file stesso.
xji,

2
Se si vuole ls -llavorare per una cartella, hanno bisogno di entrambi re xil permesso.
Eric Wang,

44

Ho preparato questa tabella con tutte le autorizzazioni possibili e i loro effetti pratici.

permessi directory linux

(*) Solo nomi di file : altri attributi come dimensione o data non sono accessibili. Ad esempio puoi usare il tasto tab per completare automaticamente ma non il comando ls.

Alcuni pensieri :

  • Con X unset , R e W sono per lo più inutili.
  • X solo disabilitando RW ti dà un falso senso di sicurezza dal momento che si potrebbe ciecamente leggere e scrivere il contenuto dei file e le sottodirectory di accesso. Dovresti essere sicuro che ogni figlio diretto della directory abbia autorizzazioni esplicite.
  • Raramente userete valori diversi da:
    • 0 : nessun accesso.
    • 1 : accesso minimo che consente l'attraversamento.
    • 5 : consentire la lettura / scrittura, ma non alterare la struttura dell'albero di directory stesso.
    • 7 : accesso completo.

1
Vorrei considerare 5 un valore utile, quando si desidera consentire la lettura / scrittura, ma non alterare la struttura dell'albero di directory stesso.
hgiesel,

Hai ragione. Aggiornato!
David

4
Ottimo grafico riassuntivo. Mi chiedo che cosa pensasse qualcuno fosse -W-funzionalmente equivalente ---per le directory. Non molto intuitivo Naturalmente questi tipi di bit di basso livello spesso non lo sono.
CivFan,

2
Ho provato questo sul mio Mac, ma con -W-, potrei rinominare la directory (in una directory con un bit appiccicoso) ma non con ---. Questa sembra essere una differenza
cozyconemotel,

3
@ David, ti stai perdendo la parte appiccicosa.
Pacerier,

42

Ecco un buon articolo su questo.

Sommario:

Una directory con il suo xset di bit consente all'utente di cd(cambiare directory) in questa directory e di 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 cdaccedere a 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 .



2

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, ad eccezione del componente percorso finale. Quindi per le directory, puoi pensare che il bit di esecuzione significhi "risolvibile".

Prendi il percorso /a/b/c.txtcome esempio, supponi che l'utente abbia 1) esegui il permesso su /e /a; 2) ha il permesso di leggere /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 (lista) /a/b, perché l'utente ha permesso di esecuzione su /, /ae il permesso di lettura su /a/b. Si noti che, durante la lettura /a/b, il nome del file c.txtè visibile, ma i metadati (ad es. Dimensione del file) e il contenuto non lo sono, perché il nome del file è memorizzato 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é quando si risolve il percorso da /a /aa /a/b, non riesce /a/bpoiché l'utente non dispone dell'autorizzazione di esecuzione.

Vedi anche come un percorso viene risolto in un file .


0

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 i gruppi 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 è risultato essere attivo sia per quel po ' u ser o g ruppo o o ther, ha gli stessi risultati efficaci.

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 bit di lettura per le directory: per controllare chi è autorizzato a elencare il contenuto della stanza (titoli di libri).

E il bit di esecuzione viene utilizzato per controllare chi può entrare nella stanza dei libri.


-1

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.


1
L'invenzione del bit di autorizzazione di esecuzione precede l'invenzione del concetto di permesso di attraversamento distinto di circa due decenni. La logica di questa risposta dipende da una cronologia storica che non assomiglia a quella del mondo reale e non riesce nemmeno a notare l'esistenza GENERIC_EXECUTEe ciò che è.
JdeBP,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.