Найти в Дзене

Что такое umask и как установить права на файл или директорию в Linux

При создании файла или директории, среда операционной системы присваивает им определенные права доступа по умолчанию, и umask - это пользовательская маска (user mask), которая используется для определения конечных прав доступа. Как это происходит, узнаем немного дальше. Сперва, нам необходимо понять, как узнать текущее значение нашей umask. Сделать это очень просто, вызываем из консоли: $ umask 0022 Umask, для всех пользователей по умолчанию, записывается в таких файлах как /etc/.bashrc или /etc/.profile. После процедуры начальной инсталляции Linux, по умолчанию она равна 0022 (022) или 0002 (002). Если в этих файлах, мы просто добавляем или изменяем строку с umask: $ umask 027 То при следующем входе получаем новое значение umask. Если выполним эту команду в текущем сеансе, то, соответственно, изменим значение для маски на время работы сеанса. В операционной системе Linux базовые права (называемые режимом полного доступа) для директории равны 0777 (rwxrwxrwx), а для файла 0666 (rw-
Оглавление

Что такое umask?

При создании файла или директории, среда операционной системы присваивает им определенные права доступа по умолчанию, и umask - это пользовательская маска (user mask), которая используется для определения конечных прав доступа. Как это происходит, узнаем немного дальше.

Как узнать/установить umask по умолчанию?

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

$ umask
0022

Umask, для всех пользователей по умолчанию, записывается в таких файлах как /etc/.bashrc или /etc/.profile.

После процедуры начальной инсталляции Linux, по умолчанию она равна 0022 (022) или 0002 (002).

Если в этих файлах, мы просто добавляем или изменяем строку с umask:

$ umask 027

То при следующем входе получаем новое значение umask. Если выполним эту команду в текущем сеансе, то, соответственно, изменим значение для маски на время работы сеанса.

Так что же такое umask равное 0022 и 0002?

В операционной системе Linux базовые права (называемые режимом полного доступа) для директории равны 0777 (rwxrwxrwx), а для файла 0666 (rw-rw-rw).

По умолчанию, umask 0002 используется для обычного пользователя. С этой маской, права при создании директории пользователем, получаются равными 775, а для файла 664.

Для суперпользователя (root) umask по умолчанию равна 0022. С такой маской, права по умолчанию для директории становятся равными 755, а для файла 644.

Как umask влияет на изменение базовых прав режима полного доступа? Между базовыми правами и umask происходят две операции булевой алгебры логики: сперва над umask выполняется операция инверсии (НЕ), а затем операция конъюнкции (И) между инверсированной umask и правами полного доступа. В общем случае это записывается в виде формулы: P&(~Q))

Звучит по началу страшно, но в целом, если упростить - инверсия umask отключает биты полного доступа.

Занятно, что такое отключение битов, для определенных случаев работает как обычное арифметическое вычитание, к примеру:

Посчитаем права файла для маски 022 (пользователь root):

Права полного доступа файла: 666 (как бы уменьшаемое)
Значение umask: 022 (как бы вычитаемое)
Итоговые права: 644 (как бы разность)

Посчитаем права директории для маски 022 (пользователь root):

Права полного доступа директории: 777 как бы уменьшаемое)
Значение umask: 022 (как бы вычитаемое)
Итоговые права: 755 (как бы разность)

Здесь umask "отбирает" необходимые права в нужных разрядах: 7-ка полностью все, 2-ка права на запись, 0 оставляет по умолчанию. Кажется гораздо проще, но повторюсь, что такое "вычитание" работает только для определенных случаев, в целом следует пользоваться P&(~Q)).

Итоги

Поупражняемся на примере, вот такие команды:

$ umask 077
$ touch file.txt
$ ls -l file.txt

приведут к такому результату:

-rw------- 1 nobody nobody 0 2024-09-04 22:42 file.txt

И напоследок, таблица umask с различными (часто используемыми) значениями и результирующие (итоговые) права:

Часто используемая umask
Часто используемая umask

И ещё, чтобы не заморачиваться с алгеброй булевой логики, я собрал для вас все возможные комбинации пользовательской маски в одно месте, в виде файла: umask.png