Dlaczego nie mogę wyświetlić katalogu z uprawnieniami do odczytu?

14

Utworzyłem w nim katalog di plik f. Następnie dałem sobie tylko uprawnienia do odczytu w tym katalogu. Rozumiem, że to powinno oznaczać, że mogę wymienić pliki (np. Tutaj ), ale nie mogę.

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>

Jeśli zmienię uprawnienia do zapisu i wykonania, zobaczę plik.

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

Dlaczego to? Używam MacOS.

Edycja: w odniesieniu do odpowiedzi @ ccorn ważne jest, że używam ryb i type lspodaje:

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
wrgrs
źródło
Duplikat nie odpowiada na pytanie. Oznacza to, że możesz zrobić to, czego nie potrafię. Odpowiedź @ ccorn jest idealna.
pisze
Wow, Ryba to raczej ważna część (początkowo) brakujących informacji.
Stephen Kitt
Tak, masz rację, powinienem to dodać, ale wygląda na to, że to samo wydarzy się w bashu, jeśli alias ls='ls -G'myślę, że wiele osób tak robi.
wrgrs
Robi dla mnie Czy korzystasz z systemu MacOS? Może tutaj jest inne pytanie. Edycja: tak, mam inne zachowanie w systemie Linux.
wrgrs

Odpowiedzi:

8

Niektóre przygotowania, aby upewnić się, że lsnie spróbuje się więcej rzeczy niż powinno:

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

Wykaz uprawnień do rkatalogu:

$ 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

W tradycyjnych systemach plików Uniksa katalog był po prostu listą par (nazwa, numer i-węzła). Numer i-węzła to liczba całkowita używana jako indeks do tabeli i-węzłów systemu plików, w której jest przechowywana reszta metadanych pliku.

rPozwolenie na katalogu pozwala na liście nazwisk w nim, ale nie do dostępu do informacji zapisanych w tabeli węzła, to znaczy coraz typ pliku, długość pliku, uprawnienia do plików etc, lub otwierania pliku. W tym celu potrzebujesz xuprawnień do katalogu.

To dlatego ls -l, ls -F, lsz wyjściem oznaczone kolorami itp zawieść bez xzgody, a jedynie lsudaje.

Samo xzezwolenie pozwala na dostęp do i-węzła, to znaczy, mając nadaną wyraźną nazwę w tym katalogu, xumożliwia wyszukiwanie jego i-węzła i dostęp do metadanych tego wpisu katalogu:

$ 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

Dlatego, aby otworzyć plik /a/b/c/flub wymienić swoje metadane, katalogi /, /a, /a/b, i /a/b/cmusi być udzielone xpozwolenie.

Nic dziwnego, że tworzenie pozycji katalogu wymaga zarówno uprawnień, jak wi xuprawnień:

$ 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 ma krótki przegląd w artykule na temat uprawnień do systemu plików .

kukurydza
źródło
Niesamowity. /bin/ls dpokazuje mi zawartość. Dzięki!
pisze
OK, więc był to problem redefinicji (w -Gprzypadku kolorowego wyjścia, który potrzebuje metadanych, a więc xperms). Dlatego moje przygotowania z unalias lsi unset CLICOLOR. Powinienem również dodać, unset -f lsaby usunąć taką definicję funkcji. Edytowane.
ccorn
4

Aby odczytać katalog, musisz także móc przejść do niego (bit x). Więc przynajmniej potrzebujesz rx, aby katalog mógł uzyskać do niego dostęp w jakikolwiek sposób.

Soruk
źródło
2
Nie, ty nie; lspowinien nadal być w stanie wyświetlić listę plików w katalogu, nawet jeśli katalog nie jest wykonywalny.
Stephen Kitt
Możesz wyłączyć uprawnienia do odczytu. Będziesz wtedy mógł uzyskać dostęp do plików, ale nie będziesz mógł wyświetlać zawartości katalogu.
Kusalananda
@Kusalananda - dobra uwaga, rzeczywiście używam tego od czasu do czasu.
Soruk
@Stephen Kitt - Może POWINIEN, ale implementacja jest taka, że ​​nie.
Soruk
1
@Soruk i pozostaje pytanie: dlaczego nie?
Stephen Kitt