Я создал каталог, который имеет эти разрешения - у другого пользователя есть
drwxr - r-- 5 пользователь пользователь 4096 2012-09-15 19:30 сайты
Когда выполнить команду ls -l в каталоге от имени другого пользователя
ls -l / главная / пользователь / сайты
это вывод каталога. Я думал, что без установки бита x в этом каталоге имена файлов вообще не будут отображаться.
d????????? ? ? ? ? ? dev.user.com
-????????? ? ? ? ? ? user.20120914_082804.sql.gz
d????????? ? ? ? ? ? shared
-????????? ? ? ? ? ? shared.tar.gz
-????????? ? ? ? ? ? www.20120914_083256.tar.gz
d????????? ? ? ? ? ? www.user.com
Здесь есть несоответствие?
x
дает вам разрешение на самом деле быть в каталог и доступ к файлам в каталоге, r
дает вам разрешение на просмотр содержимого каталога.
Если вы изменили ситуацию, присвоив каталогу x
бит и удаление r
бит, тогда пользователь может открыть shared.tar.gz
(при условии наличия надлежащих прав для самого файла), но только если он знал имя файла заранее, поскольку ls
не сможет перечислить файлы в каталоге.
Эта интерпретация разрешений восходит к ранним файловым системам Unix. Вначале были только файлы. (Ну, и устройства, и трубы, и ... но я пытаюсь рассказать историю здесь, не быть на 100% точным; кроме того, это все верно для устройств, каналов и всего остального, потому что все является файлом, даже каталоги).
Каталоги - это просто файлы, которые файловая система использует для хранения метаданных, описывающих дерево каталогов и файлы, которые оно содержит. Каждый файл в каталоге описывался простой структурой данных, которая содержала место для имени файла (изначально 14 символов, IIRC) вместе с номером inode, в котором были сохранены данные, размером файла, отметками времени и словом разрешений. . Каждый каталог начинался с двух записей с именами .
и ..
, первый указывает на индексный дескриптор этого самого каталога, а второй - на индексный дескриптор его родительского каталога.
Слово разрешений состояло из девяти битов, описывающих обращение с владельцем, другими членами той же группы и миром. Три бита для каждого флага того, может ли соответствующий пользователь читать, писать или выполнять файл. (Вы могли заметить, что в 16-битном слове разрешений есть еще пять битов, которые я игнорирую. В конечном итоге им были присвоены значения, но это не имеет отношения к этой части истории.) (Кроме того, эта интерпретация девяти bit осталась практически неизменной во всех потомках раннего Unix, включая Linux.)
Итак, если каталог на самом деле представляет собой файл особого типа и описывается записью в каком-то каталоге, очевидно, что он также имеет биты прав доступа, и эти биты, вероятно, что-то означают. Но вопрос в том, что именно. Самый простой способ придать значение этим битам - это вообще не менять то, что они означают. По сути, это и было сделано.
Итак, бит чтения означает, что пользователь может читать сам каталог. Это обычно дает читателю доступ к имени файла, отметкам времени, размеру и номеру inode данных каждого файла. В частности, с r
набор, который вы можете использовать ls
чтобы увидеть имена всех файлов в каталоге, но этого недостаточно для открытия (или использования каким-либо образом) любого из перечисленных файлов.
Бит выполнения означает, что пользователь может «запустить» каталог. Поскольку каталоги особенные, выполнение на самом деле означает поиск записи по имени и ее использование. Это означает, что вы можете попробовать открыть файлы, если x
установлен, но без r
вы не можете узнать их имена. Конечно, права доступа к запрошенному файлу также влияют на доступ, поэтому даже с x
в каталоге вы не сможете прочитать файл, если он также не предложит вам r
.
Бит записи означает, что пользователь может писать в каталог, но, естественно, только через саму файловую систему. Это означает, что с w
set вы можете создавать новые файлы в этом каталоге или редактировать записи в каталоге существующих файлов. Но без x
установить, вы не можете использовать какие-либо файлы, и без r
вы их тоже не видите.
По мере того, как в Unix и ее потомках развивались более сложные модели идентификации пользователей, эти же базовые описания остались неизменными.
Коротко, r
означает, что вы можете видеть его содержание, x
означает, что вы можете его использовать, и w
означает, что вы можете изменить его даже для каталогов.