Как разрешения r- каталога должны работать в Linux?

Я создал каталог, созданный имеет эти разрешения - другой пользователь имеет

drwxr- r-- 5 пользователь user 4096 2012-09-15 19:30 сайтов

Когда делать ls -l в каталоге как другой пользователь

ls -l /home/user/sites

это вывод каталога. Я думал, что без бита x, установленного в этом каталоге, имена файлов вообще не будут отображаться.

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

Есть ли здесь какое-то несоответствие?

2 ответа

Решение

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

Если вы изменили ситуацию, предоставив директории x немного и удаляя r немного, тогда пользователь может открыть shared.tar.gz (при условии наличия надлежащих разрешений для самого файла), но только если он заранее знал имя файла с ls не сможет перечислить файлы в каталоге.

Эта интерпретация разрешений восходит к ранним файловым системам Unix. В начале были только файлы. (Ну, и устройства, и каналы, и... но я пытаюсь рассказать историю здесь, а не быть на 100% строго точным; кроме того, все это верно для устройств и каналов и всего остального, потому что все является файлом, даже каталоги).

Каталоги - это просто файлы, которые файловая система использует для хранения метаданных, описывающих дерево каталогов, и файлов, которые в нем содержатся. Каждый файл в каталоге был описан простой структурой данных, которая содержала место для имени файла (первоначально 14 символов, IIRC) вместе с номером инода, где хранились данные, размером файла, временными метками и словом разрешений., Каждый каталог начинается с двух записей . а также ..первый указывает на индекс этого самого каталога, а второй - на индекс его родительского каталога.

Слово разрешений содержало девять битов для описания обращения с владельцем, другими членами той же группы и миром. Три бита для каждого флага указывают, может ли соответствующий пользователь прочитать, записать или выполнить файл. (Вы можете заметить, что в 16-разрядном слове разрешений есть еще пять битов, которые я игнорирую. В конечном итоге они получили назначенные значения, но это не относится к этой части истории.) (Кроме того, это толкование девяти биты остались почти одинаковыми у всех потомков ранних версий Unix, включая Linux.)

Таким образом, если каталог действительно является особым видом файла и описывается записью в каком-либо каталоге, он, очевидно, также имеет биты прав доступа, и эти биты, вероятно, что-то значат. Но вопрос в том, что именно. Самый простой способ присвоить значение этим битам - это не изменять то, что они имеют в виду. И это по сути то, что было сделано.

Таким образом, бит чтения означает, что пользователь может читать сам каталог. Это классически дает читателю доступ к имени файла, меткам времени, размеру и номеру узла для каждого файла. В частности, с r установить вы можете использовать ls чтобы увидеть имена всех файлов в каталоге, но этого недостаточно, чтобы открыть (или использовать каким-либо образом) любой из перечисленных файлов.

Бит выполнения означает, что пользователь может "выполнить" каталог. Поскольку каталоги особенные, выполнить действительно означает найти запись по имени и использовать ее. Это означает, что вы можете попробовать открыть файлы, если x установлен, но без r Вы не можете обнаружить их имена. Конечно, права доступа запрашиваемого файла также влияют на доступ, поэтому даже при x в каталоге вы не сможете прочитать файл, если он также не предлагает вам r,

Бит записи означает, что пользователь может записывать в каталог, но, естественно, только с помощью самой файловой системы. Это означает, что с w установить вы можете создавать новые файлы в этом каталоге, или редактировать записи каталога существующих файлов. Но без x установить, вы не можете использовать любые файлы, и без r ты тоже их не видишь.

По мере того как в Unix и его потомках развивались более сложные модели идентификации пользователей, эти же базовые описания смогли остаться на удивление неизменными.

Короче, r означает, что вы можете увидеть его содержание, x означает, что вы можете использовать его, и w означает, что вы можете изменить его даже для каталогов.

Другие вопросы по тегам