При создании каждого файла для него устанавливается набор режимов доступа. Каждый режим описывает права на чтение, запись и выполнение, предоставленные пользователям, группе и всем остальным пользователям.
Права доступа к новому файлу вычисляются путем побитового умножения величины, обратной umask, на значение режима доступа, указанное процессом при создании файла. Во время создания файла процессом операционная система выполняет следующие действия:
Например, режим доступа 027 указывает, что у владельца нет никаких прав доступа к файлу. Группе предоставлены права на запись. Всем остальным пользователям предоставлены права на чтение, запись и выполнение. Значение umask для набора прав доступа 027 равно 750 (обратно исходным правам доступа). После побитового умножения 750 на 666 (режим доступа к файлу, указанный в системном вызове при создании файла) получаются фактические права доступа к файлу - 640. Ниже эти права доступа записаны в другом формате:
027 = _ _ _ _ W _ R W X Права доступа к существующему файлу 750 = R W X R _ X _ _ _ Обратное значение umask права доступа 666 = R W _ R W _ R W _ Права доступа, заданные при создании файла AND 750 = R W X R _ X _ _ _ Значение umask 640 = R W _ R _ _ _ _ _ Итоговые права доступа к файлу
umask | Получает и устанавливает маску создания файла |
chmod и fchmod | Изменяют права доступа к файлу. |
access | Анализирует и выдает права доступа к файлу с указанным именем и путем. Эта функция использует не действующие, а фактические ИД пользователя и группы. Это позволяет программам, изменившим свой ИД пользователя и группы, предоставлять доступ лишь отдельным пользователям. |
$ ls -l total 0 -r-s--x--x 1 root system 8290 09 июня 17:07 special -rw------- 1 root system 1833 09 июня 17:07 secrets $ cat secrets cat: невозможно открыть secrets
В данном примере у владельца нет прав доступа к файлу secrets. Однако программа special, запущенная от имени root, сможет обратиться к файлу. Для того чтобы сохранить защиту файла, в программе должна применяться функция access.
Для того чтобы запретить доступ к
файлу таким способом, в программах, изменяющих свои ИД пользователя и группы,
всегда должна применяться функция access.
chown | Изменяет ИД владельца файла, указанный в i-узле. Старый ИД владельца удаляется, а на его место записывается новый. |
Функция chmod изменяет режим доступа к файлу.
При изменении владельца файла и режима доступа обновляется только i-узел, а не данные в файле. Эти действия может выполнять только процесс администратора или владельца файла.
Глава 5, Файловые системы и каталоги
Функции access, accessx, faccessx, chown, fchown, chownx, fchownx, chmod и fchmod