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

11

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

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

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

vfclists
источник

Ответы:

16

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

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

DerfK
источник
1
Я проверю это и вернусь к вам. Я всегда находил этот аспект совместного использования файлов Linux запутанным.
vfclists
Такое поведение не является уникальным для Linux; он восходит к самым ранним дням UNIX - Linux, будучи UNIX-совместимой системой, работает таким образом - и записи ACL Windows NT имеют схожие биты прав доступа.
2

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

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

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

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

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

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

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

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

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

RBerteig
источник
Я полагаю, вы можете объяснить mode_tэто немного подробнее (особенно часть, в которой права доступа и тип файла хранятся в одном и том же 32-
битном
1
Я был активным пользователем и разработчиком Unix еще в 80-х годах. Я не пытался рассказать полную историю о том, что является правдой сегодня, а изложил ее в историческом контексте и выразил свое удивление, что та же самая загадка, с которой я столкнулся при первом изучении Unix, может быть задана и сегодня, и в основном ответила То же самое объяснение я получил от местных гуру примерно в 1983 году. Чем больше меняется, тем больше они остаются неизменными ...
RBerteig