Почему я не могу перечислить каталог с разрешениями на чтение?

14

Я создал каталог dи файл fвнутри него. Затем я дал себе только права на чтение в этом каталоге. Я понимаю, это должно означать, что я могу перечислить файлы (например, здесь ), но я не могу.

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>

Если я изменю права на запись и выполнение, я смогу увидеть файл.

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

Почему это? Я использую MacOS.

Изменить: со ссылкой на ответ @ ccorn, уместно, что я использую рыбу и type lsдает следующее:

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
источник
Дубликат не отвечает на вопрос. Это означает, что вы можете делать то, что я демонстрирую, вы не можете. Ответ @ ccorn идеален.
wrgrs
Вау, Рыба - довольно важная часть (изначально) недостающей информации.
Стивен Китт
Да, вы правы, я должен был добавить это, но похоже, что то же самое произошло бы в bash, если вы alias ls='ls -G', что, как я думаю, делают многие люди.
wrgrs
Делает для меня. Вы на MacOS? Может быть, есть еще один вопрос здесь. Изменить: да, я получаю другое поведение в Linux.
wrgrs

Ответы:

8

Некоторые приготовления, просто чтобы убедиться, что lsне пробует больше вещей, чем следует:

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

Демонстрация rразрешения каталога:

$ 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

В традиционных файловых системах Unix каталог был просто списком пар (имя, номер инода). Номер inode - это целое число, используемое в качестве индекса в таблице inode файловой системы, где хранятся остальные метаданные файла.

rРазрешение на каталоге позволяет перечислить имена в нем, но не для доступа к информации , хранящейся в таблице инф.узлов, то есть, получить тип файла, размер файла, права доступа к файлам и т.д., или открытие файла. Для этого вам нужно xразрешение на каталог.

Вот почему ls -l, ls -F, lsс помощью цветового кода и т.д. выходных не в состоянии без xразрешения, в то время как лишь lsуспешно.

xРазрешение в одиночку обеспечивает доступ инода, что, учитывая явное имя этого каталога, xпозволяет посмотреть его инод и доступ к метаданным , что запись каталога в:

$ 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

Поэтому, чтобы открыть файл /a/b/c/fили список его метаданных, в каталогах /, /a, /a/b, и /a/b/cдолжно быть предоставлено xразрешение.

Неудивительно, что для создания записей каталога требуются оба разрешения wи xразрешения:

$ 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
$

В Википедии есть краткий обзор в статье о разрешениях файловой системы .

ccorn
источник
Удивительный. /bin/ls dпоказывает содержимое для меня. Благодарность!
wrgrs
Итак, это была проблема переопределения ( -Gдля цветного вывода, который требует метаданных, то есть xхимической завивки). Поэтому мои препараты с unalias lsа unset CLICOLOR. Я должен был добавить, unset -f lsчтобы удалить любое такое определение функции, а также. Ред.
ccorn
Другие источники в вики: wiki.archlinux.org/index.php/File_permissions_and_attributes
loxaxs
4

Чтобы прочитать каталог, вы также должны быть в состоянии перейти в него (бит x). Итак, как минимум, вам нужен rx для каталога, чтобы иметь к нему доступ любым способом.

Soruk
источник
2
Нет, ты не; lsдолжен по-прежнему иметь возможность перечислять файлы в каталоге, даже если каталог не является исполняемым.
Стивен Китт
Вы можете оставить разрешение на чтение выключенным. После этого вы сможете получить доступ к файлам, но не для просмотра содержимого каталога.
Кусалананда
@Kusalananda - хорошая мысль, я действительно время от времени пользуюсь этим.
Сорук
@ Стефен Китт - Может быть, СЛЕДУЕТ, но реализация такова, что это не так.
Сорук
1
@ Сорук, и поэтому остается вопрос: почему бы и нет?
Стивен Китт