Операционная система UNIX - страница 16
Для каталогов эти права имеют другой смысл, а для символических связей они вообще не используются, поскольку контролируются целевым файлом.
Права доступа для каталогов не столь очевидны. Это в первую очередь связано с тем, что система трактует операции чтения и записи для каталогов отлично от остальных файлов. Право чтения каталога позволяет вам получить имена (и только имена) файлов, находящихся в данном каталоге. Чтобы получить дополнительную информацию о файлах каталога (например, подробный листинг команды ls -l), системе придется "заглянуть" в метаданные файлов, что требует права на выполнения для каталога. Право на выполнения также потребуется для каталога, в который вы захотите перейти (т.е. сделать его текущим) с помощью команды cd(1). Это же право нужно иметь для доступа ко всем каталогам на пути к указанному. Например, если вы установите право на выполнения для всех пользователей в одном из своих подкаталогов, он все равно останется недоступным, пока ваш домашний каталог не будет иметь такого же права.
Права r и x действуют независимо, право x для каталога не требует наличия права r, и наоборот. Комбинацией этих двух прав можно добиться интересных эффектов, например, создания "темных" каталогов, файлы которых доступны только в случае, если пользователь заранее знает их имена, поскольку получение списка файлов таких каталогов запрещено. Данный прием, кстати, используется при создании общедоступных архивов в сети когда некоторые разделы архива могут использоваться только "посвященными", знающими о наличии того или иного файла в каталоге. Приведем пример создания "темного" каталога.
>$ pwd
Где мы находимся?
>/home/andrei
>$ mkdir darkroom
Создадим каталог
>$ ls -l
Получим его атрибуты
>...
>-rwxr--r-- 2 andy group 65 Dec 22 19:13 darkroom
>$ chmod a-r+x darkroom
Превратим его в "темный" каталог
>$ ls -l
Получим его атрибуты
>...
>--wx--x--x 2 andy group 65 Dec 22 19:13 darkroom
>$ cp file1 darkroom
Поместим в каталог darkroom некоторый файл
>$ cd darkroom
Перейдем в этот каталог
>$ ls -l darkroom
Попытаемся получить листинг каталога
>##permission denied
Увы...
>$ cat file1
>ok
Тем не менее, заранее зная имя файла (file1), можно работать с ним (например, прочитать, если есть соответствующее право доступа)
Особого внимания требует право на запись для каталога. Создание и удаление файлов в каталоге требуют изменения его содержимого, и, следовательно, права на запись в этот каталог. Самое важное, что при этом не учитываются права доступа для самого файла. То есть для того, чтобы удалить некоторый файл из каталога, не обязательно иметь какие-либо права доступа к этому файлу, важно лишь иметь право на запись для каталога, в котором находится этот файл. Имейте в виду, что право на запись в каталог дает большие полномочия, и предоставляйте это право с осторожностью. Правда, существует способ несколько обезопасить себя в случае, когда необходимо предоставить право на запись другим пользователям, — установка флага Sticky bit на каталог. Но об этом мы поговорим чуть позже.
В табл. 1.2 приведены примеры некоторых действий над файлами и минимальные права доступа, необходимые для выполнения этих операций.
Таблица 1.2. Примеры прав доступа
Команда | Смысл действия | Минимальные права доступа | |
---|---|---|---|
для обычного файла | для каталога, содержащего файл | ||
>cd /u/andrei | Перейти в каталог /u/andrei | - | x |
>ls /u/andrei/*.с | Вывести все файлы с суффиксом .c этого каталога | - | r |
>ls -s /u/andrei/*.с | Вывести дополнительную информацию об этих файлах (размер) | - | rx |
>cat report.txt | Вывести на экран содержимое файла report.txt | r | x |
>cat >> report.txt | Добавить данные в файл report.txt | w | x |
>runme.sh | Выполнить программу runme | x | x |
>runme | Выполнить скрипт командного интерпретатора runme.sh | rx | x |
>rm runme | Удалить файл runme в текущем каталоге | - | xw |
Итак, для выполнения операции над файлом имеют значение класс доступа, к которому вы принадлежите, и права доступа, установленные для этого класса. Поскольку для каждого класса устанавливаются отдельные права доступа, всего определено 9 прав доступа, по 3 на каждый класс.
Операционная система производит проверку прав доступа при создании, открытии (для чтения или записи), запуске на выполнение или удалении файла. При этом выполняются следующие проверки: