В операционной системе UNIX используется трехуровневая иерархия пользователей: группа, подгруппа, пользователь. В связи с этим каждый файл файловой системы обладает двумя атрибутами. Первый атрибут - это, так называемый, владелец файла. Этот атрибут связан с одним конкретным пользователем, который является владельцем файла. Владельцем файла можно стать по умолчанию, если создать этот файл, а также есть команда, которая позволяет менять владельца файла. Второй атрибут - это атрибут, связанный с защитой доступа к файлу.
Доступ к каждому файлу регламентируется по трем категориям. Первая категория - это права владельца файла. В общем случае владелец не обязательно может делать с этим файлом все что угодно. Вторая категория - права группы, к которой принадлежит владелец файла, (отличные от прав владельца). Третья категория - права остальных пользователей системы, за исключением соответствующей группы. По этим трем категориям регламентируются три действия - чтение из файла, запись в файл и исполнение файла. В каждом файле определено, может ли пользователь данной категории читать файл, писать в него и запускать его как исполняемый в качестве процесса.
Набор прав хранится в индексном дескрипторе данного файла.
Базовые биты прав доступа представлены в таблице. Там дано восьмеричное значение, задающее соответствующий бит, вид этого бита в первом столбце длинного листинга и право, задаваемое этим битом.
Установленный эффективный идентификатор группы (бит SПID)
---------t ---------T
Клейкий (sticky) бит. Вид для каталогов и выполняемых файлов, соответственно.
-r--------
Право владельца на чтение
--w-------
Право владельца на запись
---x------
Право владельца на выполнение
----r-----
Право группы на чтение
-----w----
Право группы на запись
------x---
Право группы на выполнение
-------r--
Право всех прочих на чтение
--------w-
Право всех прочих на запись
---------x
Право всех прочих на выполнение
Бит чтения для всех типов файлов имеет одно и то же значение: он позволяет читать содержимое файла (получать листинг каталога командой ls).
Бит записи также имеет одно и то же значение: он позволяет редактировать этот файл. Для каталога – это возможность менять его содержимое, т.е. создавать и удалять файлы.
Если для некоторого файла установлен бит выполнения, то файл может выполняться как команда. В случае установки этого бита для каталога, этот каталог можно сделать текущим (перейти в него командой cd).
Установленный бит смены идентификатора пользователя SUID означает, что доступный пользователю на выполнение файл будет выполняться с правами (с эффективным идентификатором) владельца, а не пользователя, вызвавшего файл (как это обычно происходит).
Установленный бит смены идентификатора группы SGID означает, что доступный пользователю на выполнение файл будет выполняться с правами (с эффективным идентификатором) группы-владельца, а не пользователя, вызвавшего файл (как это обычно происходит).
Примером может быть утилита passwd, позволяющая пользователю менять свой пароль. Для изменения пароля нужно редактировать содержимое файла /etc/passwd и /etc/shodow. Предоставить права всем изменять содержимое этих файлов невозможно. Установка SUID для утилиты passwd позволяет решить эту проблему. Владельцем файла /usr/bin/passwd, в котором хранится утилита является суперпользователь. Кто бы ни запустил утилиту на выполнение, на время работы данной программы получает права суперпользователя, а значит, может производить изменения в системных файлах.
Если бит SGID установлен для файла, не доступного для выполнения, он означает обязательное блокирование, т.е. неизменность прав доступа на чтение и запись пока файл открыт определенной программой.
Установленный клейкий бит для обычных файлов ранее (во времена PDP-11) означал необходимость сохранить образ программы (т.е. код и данные) в памяти после выполнения (для ускорения повторной загрузки). Сейчас при установке обычным пользователем он сбрасывается. Значение этого бита при установке пользователем root зависит от версии ОС и иногда необходимо. Так, в ОС Solaris необходимо устанавливать клейкий бит для обычных файлов, используемых в качестве области подкачки.
Установка клейкого бита для каталога означает, что файл в этом каталоге может быть удален или переименован только в следующих случаях:
- пользователем-владельцем файла;
- пользователем-владельцем каталога;
- если файл доступен пользователю на запись;
- пользователем root.
Примером может служить каталог /tmp, который открыт на запись для всех пользователей, но в котором нежелательно удалять чужие файлы.