Операционная система 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.txtrx
>cat >> report.txtДобавить данные в файл report.txtwx
>runme.shВыполнить программу runmexx
>runmeВыполнить скрипт командного интерпретатора runme.shrxx
>rm runmeУдалить файл runme в текущем каталоге-xw

Итак, для выполнения операции над файлом имеют значение класс доступа, к которому вы принадлежите, и права доступа, установленные для этого класса. Поскольку для каждого класса устанавливаются отдельные права доступа, всего определено 9 прав доступа, по 3 на каждый класс.

Операционная система производит проверку прав доступа при создании, открытии (для чтения или записи), запуске на выполнение или удалении файла. При этом выполняются следующие проверки: