11.1.4. Маска umask процесса
11.1.4. Маска umask процесса
Права доступа, назначаемые вновь созданным файлам, зависят как от настроек системы, так и от предпочтений конкретного пользователя. Чтобы помочь индивидуальным программам, которые нуждаются в предположениях об использовании файла, система дает возможность пользователям отключить отдельные привилегии для вновь создаваемых файлов (и каталогов, которые являются специальными файлами). Каждый процесс имеет маску umask, определяющую отключенные биты привилегий для создания файлов. Это позволяет процессу специфицировать достаточно либеральные права (обычно это касается общих прав на чтение и запись) и обеспечивать права, которые пользователь предпочитает. Если определенный файл особо важен, процесс создания может включать назначение более ограниченных прав, чем обычно, потому что umask никогда не влияет на менее строгие ограничения прав, а только на более строгие.
Текущая установка umask для процесса выполняется системным вызовом umask().
#include <sys/stat.h>
int umask(int newmask);
Возвращается старое значение и устанавливается новое значение umask процесса. Для файла могут быть указаны только права на чтение, запись и исполнение — вы не можете использовать umask для запрещения установки setuid, setgid или sticky-бита. Команда umask представлена в большинстве командных процессоров и позволяет пользователю устанавливать umask для самой командной оболочки и всех его последующих дочерних процессов.
В качестве примера, команда touch создает новые файлы с правами 0666 (общие права на чтение и запись). Так как пользователю подобное редко подходит, он может заставить команду touch отключать общие и групповые права записи для файла с помощью команды umask 022, как показано ниже.
$ umask 022
$ touch foo
$ ls -l foo
-rw-r--r-- 1 ewt ewt 0 Feb 24 21:24 foo
Если он предпочитает давать права на запись группе, то может вместо этого назначит umask 002.
$ umask 002
$ touch foo
$ ls -l foo
-rw-rw-r-- 1 ewt ewt 0 Feb 24 21:24 foo
Если же он хочет, чтобы его файлы были доступны только ему, это обеспечит umask 077.
$ umask 077
$ touch foo
$ ls -l foo
-rw------- 1 ewt ewt 0 Feb 24 21:24 foo
umask процесса влияет на системные вызовы open(), creat(), mknod() и mkdir().