Come dovrebbero funzionare le autorizzazioni r- directory su Linux?


11

Ho creato una directory creata ha queste autorizzazioni - l'altro utente ha

drwxr - r-- 5 utente utente 4096 2012-09-15 19:30 siti

Quando esegui ls -l nella directory come un altro utente

ls -l / home / utente / siti

questo è l'output della directory. Pensavo che senza il bit x impostato su quella directory i nomi dei file non mostrassero affatto.

d????????? ? ? ? ?                ? dev.user.com  
-????????? ? ? ? ?                ? user.20120914_082804.sql.gz   
d????????? ? ? ? ?                ? shared  
-????????? ? ? ? ?                ? shared.tar.gz  
-????????? ? ? ? ?                ? www.20120914_083256.tar.gz
d????????? ? ? ? ?                ? www.user.com

C'è qualche incoerenza qui?

Risposte:


16

xti dà il permesso di essere effettivamente nella directory e accedere ai file nella directory, rti dà il permesso di vedere il contenuto della directory.

Se hai invertito la situazione dando alla directory il xbit e rimuovendo il rbit, l'utente potrebbe aprirsi shared.tar.gz(assumendo le autorizzazioni appropriate sul file stesso) ma solo se avesse saputo in anticipo il nome del file poiché non lssarebbe stato in grado di elencare i file nella directory .


1
Lo proverò e ti ricontatterò. Ho sempre trovato confuso questo aspetto della condivisione di file Linux.
vfclists

Tale comportamento non è unico per Linux; risale ai primi giorni di UNIX - Linux, essendo un sistema compatibile UNIX, funziona in questo modo - e le voci ACL di Windows NT hanno bit di autorizzazione simili.

2

Questa interpretazione delle autorizzazioni risale ai primi file system Unix. All'inizio c'erano solo file. (Bene, e dispositivi, e pipe, e ... ma sto cercando di raccontare una storia qui, non essere del 100% rigorosamente accurato; inoltre, è tutto vero per dispositivi e pipe e tutto il resto perché tutto è un file, anche directory).

Le directory sono solo file che il file system utilizza per contenere i metadati che descrivono l'albero delle directory e i file che contiene. Ogni file in una directory è stato descritto da una semplice struttura di dati che conteneva spazio per un nome file (originariamente 14 caratteri, IIRC) insieme al numero di inode in cui erano archiviati i dati, la dimensione del file, i timestamp e la parola dei permessi . Ogni directory iniziava con due voci denominate .e .., la prima che puntava all'inode di questa stessa directory, e la seconda all'inode della sua directory padre.

La parola autorizzazioni aveva nove parti per descrivere il trattamento del proprietario, degli altri membri dello stesso gruppo e del mondo. I tre bit per ciascun flag indica se l'utente in questione può leggere, scrivere o eseguire il file. (Potresti notare che ci sono altri cinque bit nella parola delle autorizzazioni a 16 bit che sto ignorando. Alla fine sono stati assegnati significati ma non è rilevante per questa parte della storia.) (Inoltre, questa interpretazione dei nove i bit sono rimasti praticamente gli stessi in tutti i discendenti dei primi Unix, incluso Linux.)

Quindi, se una directory è davvero solo un tipo speciale di file e descritta da una voce in una directory, ovviamente ha anche bit di autorizzazione, e quei bit probabilmente significano qualcosa. Ma la domanda è cosa, esattamente. Il modo più semplice per assegnare significato a quei bit è di non cambiare in primo luogo ciò che significano. E questo è essenzialmente ciò che è stato fatto.

Quindi, il bit di lettura significa che l'utente può leggere la directory stessa. Ciò consente al lettore di accedere in modo classico al nome del file, ai timestamp, alle dimensioni e al numero di inode dei dati di ciascun file. In particolare, con rset è possibile utilizzare lsper visualizzare i nomi di tutti i file nella directory, ma ciò non è sufficiente per aprire (o utilizzare in alcun modo) uno dei file elencati.

Il bit di esecuzione indica che l'utente può "eseguire" la directory. Poiché le directory sono speciali, eseguire significa davvero cercare una voce per nome e usarla. Ciò significa che puoi provare ad aprire i file se xè impostato, ma senza di rte non puoi scoprire i loro nomi. Naturalmente, anche le autorizzazioni del file richiesto influiscono sull'accesso, quindi anche con xla directory non sarai in grado di leggere un file a meno che non ti offra anche r.

Il bit di scrittura indica che l'utente può scrivere nella directory, ma naturalmente mediato solo dal file system stesso. Ciò significa che con wset è possibile creare nuovi file in quella directory o modificare le voci della directory dei file esistenti. Ma senza xset, in realtà non è possibile utilizzare alcun file e senza rdi essi non è nemmeno possibile visualizzarli.

Poiché in Unix e nei suoi discendenti si sono evoluti modelli più complessi di identità utente, queste stesse descrizioni di base sono riuscite a rimanere notevolmente invariate.

In breve, rsignifica che puoi vederne il contenuto, xche puoi usarlo e wche puoi modificarlo anche per le directory.


Suppongo che tu possa spiegare mode_tqualcosa un po 'di più (in particolare la parte in cui le autorizzazioni e il tipo di file sono memorizzati nello stesso campo a 32 bit)
SaveTheRbtz,

1
Ero attivamente un utente unix e uno sviluppatore negli anni '80. Non stavo cercando di raccontare la storia completa di ciò che è vero oggi tanto quanto metterlo in un contesto storico, ed esporre il mio divertimento per lo stesso enigma che ho affrontato quando ho appreso il primo unix oggi e entrambi hanno potuto rispondere sostanzialmente stessa spiegazione che ho ricevuto dai guru locali nel 1983. Più le cose cambiano, più rimangono le stesse ....
RBerteig,
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.