Perché non posso elencare una directory con permessi di lettura?


14

Ho creato una directory de un file fal suo interno. Mi sono quindi dato solo i permessi di lettura su quella directory. Capisco che questo dovrebbe significare che posso elencare i file (ad esempio qui ), ma non posso.

will@wrmpb /p/t/permissions> ls -al
total 0
drwxr-xr-x   3 will  wheel  102  4 Oct 08:30 .
drwxrwxrwt  16 root  wheel  544  4 Oct 08:30 ..
dr--------   3 will  wheel  102  4 Oct 08:42 d
will@wrmpb /p/t/permissions> ls d
will@wrmpb /p/t/permissions>

Se cambio i permessi per scrivere ed eseguire, posso vedere il file.

will@wrmpb /p/t/permissions> chmod 500 d
will@wrmpb /p/t/permissions> ls d
f
will@wrmpb /p/t/permissions> 

Perchè è questo? Sto usando MacOS.

Modifica: con riferimento alla risposta di @ ccorn, è rilevante che io stia usando il pesce e type lsfornisce quanto segue:

will@wrmpb /p/t/permissions> type ls
ls is a function with definition
function ls --description 'List contents of directory'
    command ls -G $argv
end

Il duplicato non risponde alla domanda. Implica che puoi fare ciò che ti dimostro che non puoi. La risposta di @ ccorn è perfetta.
wrgrs,

Wow, la cosa Fish è un pezzo piuttosto importante di informazioni (inizialmente) mancanti.
Stephen Kitt,

Sì, hai ragione, avrei dovuto aggiungerlo, ma sembra che la stessa cosa succederebbe se tu alias ls='ls -G', cosa che penso facciano molte persone.
wrgrs,

Fa per me. Sei su MacOS? Forse c'è un'altra domanda qui. Modifica: sì, ho un comportamento diverso su Linux.
wrgrs,

Risposte:


8

Alcuni preparativi, solo per assicurarsi che lsnon provi più cose di quanto dovrebbe:

$ unalias ls 2>/dev/null
$ unset -f ls
$ unset CLICOLOR

Dimostrazione del rpermesso di directory:

$ ls -ld d
dr--------  3 ccorn  ccorn  102  4 Okt 14:35 d
$ ls d
f
$ ls -l d
ls: f: Permission denied
$ ls -F d
ls: f: Permission denied

Nei filesystem Unix tradizionali, una directory era semplicemente un elenco di coppie (nome, numero di inode). Un numero di inode è un numero intero utilizzato come indice nella tabella di inode del filesystem in cui è archiviato il resto dei metadati del file.

L' rautorizzazione su una directory consente di elencare i nomi in essa contenuti, ma non di accedere alle informazioni memorizzate nella tabella degli inode, ovvero ottenere il tipo di file, la lunghezza del file, le autorizzazioni del file ecc. O aprire il file. Per questo è necessario il xpermesso sulla directory.

Questo è il motivo per cui ls -l, ls -F, lscon uscita codice colore ecc fallire senza xautorizzazione, mentre una mera lsriesce.

L' xautorizzazione da sola consente l'accesso all'inode, ovvero, dato un nome esplicito all'interno di quella directory, xconsente di cercare il suo inode e accedere ai metadati della voce di directory:

$ chmod 100 d
$ ls -l d/f
-rw-r--r--  1 ccorn  ccorn  0  4 Okt 14:35 d/f
$ ls d
ls: d: Permission denied

Pertanto, per aprire un file /a/b/c/fo di elencare i suoi metadati, le directory /, /a, /a/b, e /a/b/cdeve essere concesso xil permesso.

Non sorprende, la creazione di voci di directory ha bisogno sia wdi xpermesso:

$ chmod 100 d
$ touch d/g
touch: d/g: Permission denied
$ chmod 200 d
$ touch d/g
touch: d/g: Permission denied
$ chmod 300 d
$ touch d/g
$

Wikipedia ha una breve panoramica in un articolo sulle autorizzazioni del file system .


Sorprendente. /bin/ls dmostra i contenuti per me. Grazie!
wrgrs,

OK, quindi si trattava di un problema di ridefinizione (con -Goutput colorato, che necessita di metadati, quindi xpermanenti). Pertanto i miei preparativi con unalias lse unset CLICOLOR. Avrei dovuto aggiungere anche unset -f lsper rimuovere tale definizione di funzione. Modificato.
ccorn


4

Per leggere una directory devi anche essere in grado di attraversarla (il bit x). Quindi, almeno hai bisogno di rx affinché una directory sia in grado di accedervi in ​​qualsiasi modo.


2
No, non lo fai; lsdovrebbe comunque essere in grado di elencare i file nella directory, anche se la directory non è eseguibile.
Stephen Kitt,

Puoi lasciare il permesso di lettura disattivato. Sarai quindi in grado di accedere ai file ma non di elencare i contenuti della directory.
Kusalananda

@Kusalananda - buon punto, anzi lo uso di tanto in tanto.
Soruk,

@Stephen Kitt - Forse DOVREBBE, ma l'implementazione è che non lo fa.
Soruk,

1
@Soruk e quindi la domanda rimane: perché no?
Stephen Kitt,
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.