risposta-alla-domanda-sullo-sviluppo-web-bd.com

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

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?

402
Nick.h

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

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

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:

  • Puoi ls poems e otterrai un elenco di elementi presenti all'interno (-l non rivelerà alcun dettaglio!).
  • Puoi utilizzare il completamento della riga di comando, ad esempio touch poems/so <TAB> poems/somefile.
  • Non è possibile impostare 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:

  • accedere (leggere, scrivere, eseguire) oggetti che vivono all'interno.
  • modificare l'elenco stesso, ad esempio aggiungere, rinominare, eliminare 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 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.

274
Baldrick

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

linux directory permissions

(*) 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 :

  • Con X unset , R e W sono per lo più inutili.
  • [~ # ~] x [~ # ~] da solo disabilitando RW ti dà un falso senso di sicurezza poiché potresti leggere e scrivere alla cieca i contenuti dei file e accedere alle sottodirectory. 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 : consente la lettura/scrittura, ma non altera la struttura dell'albero delle directory stesso.
    • 7 : accesso completo.
49
David

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 .

45
Kusalananda

Dal Robert Love del libro "LINUX System Programming" capitolo 1 sezione permesso-

enter image description here

6
alhelal

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 .

4
Dagang

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.

2
Isaac

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.

0
NemoX