Всего три типа разрешений и всего для трех уровней: владелец файла, группа-владелец, остальные. Запутаться в них все равно, что «запутаться в трех соснах». Однако, права доступа к файлам и директориям - одна из тех самых сложных «простых» тем, которые, как показывает практика, вызывают у начавших изучать GNU\Linux достаточно много вопросов.
Для того, чтобы правильно интерпретировать установленные на файл разрешения, необходимо знать разрешения, установленные на директорию, в которой расположен файл. Причем мы сейчас говорим не о каком-либо «наследовании» разрешений, а о том что они всегда работают в связке «права на директорию-права на файл в ней».
Эта связка наиболее очевидна, когда вы рассматриваете действие битов SGID и Sticky-бита, установленных на директорию, в которой расположены некие файлы. Однако, даже если в выводе команды ls -l нет ни строчных, ни прописных букв S и T, все равно эта связь существует. Для того чтобы ее понять, а также дать ответ на второй вопрос, рассмотрим, что такое директория и что такое файл в Linux, и как строение файловой системы влияет на разрешения. Говоря об устройстве файловой системы, мы максимально возможно упростим ее строение, оставив только то, что важно для понимания работы разрешений файловой системы.
Мы будем говорить только о трех вещах.
Первое — блок данных. Блок данных — адресуемый на диске кусочек файла. Зная, где находятся все блоки данных некого файла и получив к ним доступ, мы, тем самым, получаем доступ к содержимому файла. Изменяя блоки данных, мы меняем содержимое файла.
Второе — это индексный дескриптор (inode). Индексный дескриптор — это метаданные файла. В нем в том числе содержится информация о правах на файл и месте расположения на диске блоков данных этого файла. Но в индексном дескрипторе не содержится имени файла.
Третье — директория. Директория — это особый вид файла, который содержит сопоставление между именами файлов, которые «хранятся в этой директории», и индексными дескрипторами, соответствующими этим файлам. Конечно, как и у каждого файла, у директории есть свой индексный дескриптор, иначе как бы мы узнали «внутри» какой директории «лежит» данная директория.
Теперь соберем все три компонента в целое. Допустим, у нас есть директория dir2, вложенная в директорию dir1, и внутри dir2 расположен файл file1. Так это будет выглядеть для администратора:
# tree --inodes
.
`-- [20414543] dir1
`-- [20414544] dir2
`-- [20414545] file1
2 directories, 1 file
#
Обратите внимание, что перед именами указаны номера индексных дескрипторов, которые их уникально идентифицируют. С учетом наших упрощений данные директории и файл будут храниться на диске в следующем виде:
Данной информации нам достаточно для того, чтобы разобраться с правами. Как мы видим, каждый блок данных директории содержит некую таблицу, в которой слева - имена файлов, а справа - соответствующие им индексные дескрипторы. Разрешение x, которое часто определяют для директорий как «возможность сделать директорию текущей рабочей (cd) и возможность просмотреть «длинный листинг» директории (ls -l)», на самом деле означает возможность получить информацию о индексных дескрипторах файла, то есть, в нашей терминологии, — прочитать «правую часть таблички». Разрешение r позволяет осуществлять поиск неизвестного значения или получение всех значений левой части. При этом, если вам известна «левая часть», то есть имя файла, то вам разрешение r на директорию для доступа к самому файлу не требуется.
Для того, чтобы правильно интерпретировать установленные на файл разрешения, необходимо знать разрешения, установленные на директорию, в которой расположен файл. Причем мы сейчас говорим не о каком-либо «наследовании» разрешений, а о том что они всегда работают в связке «права на директорию-права на файл в ней».
Эта связка наиболее очевидна, когда вы рассматриваете действие битов SGID и Sticky-бита, установленных на директорию, в которой расположены некие файлы. Однако, даже если в выводе команды ls -l нет ни строчных, ни прописных букв S и T, все равно эта связь существует. Для того чтобы ее понять, а также дать ответ на второй вопрос, рассмотрим, что такое директория и что такое файл в Linux, и как строение файловой системы влияет на разрешения. Говоря об устройстве файловой системы, мы максимально возможно упростим ее строение, оставив только то, что важно для понимания работы разрешений файловой системы.
Мы будем говорить только о трех вещах.
Первое — блок данных. Блок данных — адресуемый на диске кусочек файла. Зная, где находятся все блоки данных некого файла и получив к ним доступ, мы, тем самым, получаем доступ к содержимому файла. Изменяя блоки данных, мы меняем содержимое файла.
Второе — это индексный дескриптор (inode). Индексный дескриптор — это метаданные файла. В нем в том числе содержится информация о правах на файл и месте расположения на диске блоков данных этого файла. Но в индексном дескрипторе не содержится имени файла.
Третье — директория. Директория — это особый вид файла, который содержит сопоставление между именами файлов, которые «хранятся в этой директории», и индексными дескрипторами, соответствующими этим файлам. Конечно, как и у каждого файла, у директории есть свой индексный дескриптор, иначе как бы мы узнали «внутри» какой директории «лежит» данная директория.
Теперь соберем все три компонента в целое. Допустим, у нас есть директория dir2, вложенная в директорию dir1, и внутри dir2 расположен файл file1. Так это будет выглядеть для администратора:
# tree --inodes
.
`-- [20414543] dir1
`-- [20414544] dir2
`-- [20414545] file1
2 directories, 1 file
#
Обратите внимание, что перед именами указаны номера индексных дескрипторов, которые их уникально идентифицируют. С учетом наших упрощений данные директории и файл будут храниться на диске в следующем виде:
Данной информации нам достаточно для того, чтобы разобраться с правами. Как мы видим, каждый блок данных директории содержит некую таблицу, в которой слева - имена файлов, а справа - соответствующие им индексные дескрипторы. Разрешение x, которое часто определяют для директорий как «возможность сделать директорию текущей рабочей (cd) и возможность просмотреть «длинный листинг» директории (ls -l)», на самом деле означает возможность получить информацию о индексных дескрипторах файла, то есть, в нашей терминологии, — прочитать «правую часть таблички». Разрешение r позволяет осуществлять поиск неизвестного значения или получение всех значений левой части. При этом, если вам известна «левая часть», то есть имя файла, то вам разрешение r на директорию для доступа к самому файлу не требуется.
Комментариев нет:
Отправить комментарий