Я создал каталог, созданный имеет эти разрешения - другой пользователь имеет
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
Есть ли здесь какое-то несоответствие?
источник
Эта интерпретация разрешений восходит к ранним файловым системам Unix. В начале были только файлы. (Ну, и устройства, и каналы, и ... но я пытаюсь рассказать историю здесь, а не быть на 100% строго точным; кроме того, все это верно для устройств и каналов и всего остального, потому что все является файлом, даже каталоги).
Каталоги - это просто файлы, которые файловая система использует для хранения метаданных, описывающих дерево каталогов, и файлов, которые в нем содержатся. Каждый файл в каталоге был описан простой структурой данных, которая содержала место для имени файла (первоначально 14 символов, IIRC) вместе с номером инода, где хранились данные, размером файла, временными метками и словом прав доступа. , Каждый каталог начинался с двух записей с именем
.
и..
, первый указывал на индекс этого самого каталога, а второй - на индекс его родительского каталога.Слово разрешений содержало девять битов для описания обращения с владельцем, другими членами той же группы и миром. Три бита для каждого флага указывают, может ли соответствующий пользователь прочитать, записать или выполнить файл. (Вы можете заметить, что в 16-разрядном слове разрешений есть еще пять битов, которые я игнорирую. В конечном итоге они получили назначенные значения, но это не относится к этой части истории.) (Кроме того, это толкование девяти биты остались почти одинаковыми у всех потомков ранних версий Unix, включая Linux.)
Таким образом, если каталог действительно является особым видом файла и описывается записью в каком-либо каталоге, он, очевидно, также имеет биты прав доступа, и эти биты, вероятно, что-то значат. Но вопрос в том, что именно. Самый простой способ присвоить значение этим битам - не изменять то, что они означают. И это по сути то, что было сделано.
Таким образом, бит чтения означает, что пользователь может читать сам каталог. Это классически дает читателю доступ к имени файла, меткам времени, размеру и номеру узла для каждого файла. В частности, с помощью
r
set вы можете использовать,ls
чтобы увидеть имена всех файлов в каталоге, но этого недостаточно для открытия (или использования каким-либо образом) любого из перечисленных файлов.Бит выполнения означает, что пользователь может «выполнить» каталог. Поскольку каталоги особенные, выполнить действительно означает найти запись по имени и использовать ее. Это означает, что вы можете попытаться открыть файлы, если они
x
установлены, но без нихr
вы не сможете обнаружить их имена. Разумеется, права доступа к запрашиваемому файлу также влияют на доступ, поэтому даже приx
наличии в каталоге вы не сможете прочитать файл, если он также не предложит вамr
.Бит записи означает, что пользователь может записывать в каталог, но, естественно, только с помощью самой файловой системы. Это означает, что с помощью
w
set вы можете создавать новые файлы в этом каталоге или редактировать записи каталога существующих файлов. Но безx
набора вы не можете использовать какие-либо файлы, и без нихr
вы тоже их не увидите.По мере того как в Unix и его потомках развивались более сложные модели идентификации пользователей, эти же базовые описания смогли остаться на удивление неизменными.
Короче говоря,
r
означает, что вы можете видеть его содержимое,x
означает, что вы можете использовать его, иw
означает, что вы можете изменить его даже для каталогов.источник
mode_t
это немного подробнее (особенно часть, в которой права доступа и тип файла хранятся в одном и том же 32-