Как разрешения 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
означает, что вы можете изменить его даже для каталогов.