Организация UNIX-систем и ОС Solaris

       

Права доступа


Давно известно, что в Москве раньше были две угнетаемые нации: "погазоны" и "улюки". Их никто никогда не видел, но всем было их очень жалко. Куда ни пойдешь, везде пестрели надписи: "Погазонам не ходить", "Машины улюков не ставить".

В каждой многопользовательской системе полагается развешивать такие таблички по каталогам, чтобы доступ к информации имели только те, кому он разрешен.

Система безопасности UNIX основана на правах доступа к объектам файловой системы - файлам и каталогам. У каждого каталога или файла есть один владелец и один групповой владелец. Группового владельца файла мы будем для краткости называть группой файла.

Словосочетание "группа файла" не означает, что файлы объединены в какие-то группы. Группа файла - это группа пользователей, которой даны некие специальные права на доступ к этому файлу.

Дав команду ls -l в любом каталоге, мы увидим нечто вроде

-rw-r--r-- 1 root root 433 Feb 2 10:30 acd.c

Первый столбец - это тип файла (первый символ) и права доступа (остальные девять символов). Затем указаны число жестких ссылок на файл, владелец и группа файла, размер файла в байтах, дата последней модификации в формате "Месяц Число Год Время" и имя файла. Год часто не указывается для тех файлов, которые были модифицированы в течение последних 12 месяцев.

Права доступа делятся на три части: права, данные, соответственно, владельцу файла, группе файла и всем остальным (обозначаются термином other или world). Таким образом, девять бит слова прав доступа делятся на три части по три бита:

rwx | rw- | r--| u g o

Часть, обозначенная буквой u (user), определяет права доступа владельца файла, буквой g - права доступа группы файла, буквой o - права всех остальных. Существуют права трех типов: на чтение (r, read), запись (w, write) и запуск на выполнение (x, execute). Пользователю, который хочет обратиться к файлу, даются права доступа либо владельца, либо группы файла, либо "всех остальных". Права доступа проверяются так (см. рис. 6.2, на примере слова прав доступа rwxrw-r--):


Рис. 6.2.  Алгоритм получения доступа к файлу

Когда процесс, работающий от имени пользователя, пытается получить доступ к файлу, система выясняет, является ли он владельцем файла. Если является, то он получает права доступа, определенные для владельца файла. Если он - не владелец, но входит в группу, которая является группой файла, то он получает права доступа, определенные для группы файла. Если он не относится ни к одной из этих двух категорий, он получает права, определенные для всех остальных. Права разных категорий пользователей не складываются: если доступ к файлу хочет получить его владелец, и он входит в группу файла, но права группы более широкие, чем права владельца (например, слово прав доступа r-xrwxr--), то он все равно получит права владельца (в последнем примере - r-x). Для большинства файлов и каталогов права их владельца обычно шире, чем у группы.

Слово прав доступа представляет собой последовательность из двенадцати бит. Для назначения прав доступа обычно используются только обсужденные выше младшие девять бит, поэтому права доступа часто записываются в виде трех десятичных чисел, показывающих права владельца, группы и всех остальных соответственно. Установленный в единицу бит говорит о наличии соответствующего права:

  • мнемоническое обозначение слова прав доступа: rwxrw-r--
  • двоичное представление слова прав доступа: 111 110 100
  • десятичное представление слова прав доступа: 7 6 4


В документации часто встречается требование при установке какой-либо программы установить для некоего каталога права доступа 755. Имеются в виду права rwxr-xr-x, что соответствует полному доступу владельцу и доступу на чтение и запуск группе и всем остальным.

Право запуска в отношении каталога определяется как право поиска в каталоге, что на практике означает право на чтение индексных дескрипторов файлов и подкаталогов этого каталога. Действительно, возможность узнать, какие именно файлы есть в каталоге, определяется правом на чтение каталога. А вот более подробная информация о файлах (кто их хозяин, где лежат и т.п.) доступна только тем, кто имеет право на поиск в каталоге. Наличие или отсутствие права поиска в каталоге не влияет на права пользователя root: ему разрешен поиск в любом каталоге.

Старшие три бита слова прав доступа относятся к запуску файла, поэтому детально они рассмотрены в лекции 7. Вот как выглядит слово прав доступа:

su sg t r w x r w x r w x

Старшие три бита - это бит установки владельца при запуске файла (suid), бит установки группы (sgid) при запуске файла и бит запрета выгрузки файла на диск при выполнении (t).

Для каталога биты suid и sgid имеют другое значение. По умолчанию при создании файла он наследует владельца и группу от процесса, который его создал. Аналогичное правило распространяется и на каталоги. Однако если в правах доступа к каталогу установлен бит suid, то созданный в нем файл или подкаталог будет принадлежать не владельцу по умолчанию, а владельцу каталога с битом suid. Это правило не работает для систем Solaris, хотя справедливо для некоторых других систем UNIX.

В Solaris это правило распространяется только на группу файла, но не на владельца. То есть владельцем нового файла будет владелец создавшего его процесса, независимо от наличия бита suid у каталога, где создан файл. Но если каталог имеет установленный бит sgid, то группой нового файла станет группа процесса-создателя.

Бит запрета выгрузки файла на диск при выполнении (sticky bit) в старых версиях UNIX использовался для указания того, что при выполнении программы, записанной в этом файле, ее страницы запрещено выгружать на диск. В настоящее время sticky bit используется для каталогов, с тем, чтобы указать особые условия удаления файлов из каталога. Если sticky bit установлен для каталога, то все пользователи, кроме root, могут удалять из каталога только те файлы, которые им принадлежат, независимо от прав доступа к каталогу. В разных системах UNIX он может интерпретироваться по-разному, поэтому смотрите для уточнений man sticky и man chmod.


Содержание раздела