Команда UMASK (англ. user file creation mode mask — маска режима создания пользовательских файлов) позволяет задать маску прав пользователя для новых файлов и каталогов в Linux.
Каждый раз, когда пользователь Linux создаёт новый файл или каталог, операционная система запрашивает маску прав для того, чтобы установить корректные права файлу или папке. В цифровом представлении значение маски по умолчанию 002 или 022 в зависимости от дистрибутива Linux. Например, в Ubuntu оно 002, а в Debian 022. Установка прав на файл или папку производится по следующей формуле: от максимальных прав отнимается маска, полученное число и будет правами на файл или каталог.
Для файлов это: 666 — 002 = 664;
Для каталогов: 777 — 002 = 775.
А если маска 022? Тогда права будут высчитаны следующим образом:
Для файлов: 666 — 022 = 644;
Для каталогов: 777 — 022 = 755.
Аналогично и для других значений пользовательской маски.
Так как права на файлы устанавливаются на основе прав 666 (-rw-rw-rw-), то задать права на выполнение файлов с помощью маски не получится. С каталогами такого ограничения нет, так как там права выставляются на основе прав 777 (drwxrwxrwx). Ещё одно ограничение заключается в том, что команда umask действует в рамках одной сессии терминала.
Синтаксис команды выглядит следующим образом:
UMASK [-p] [-S] [маска_в_цифровом_представлении]
или
UMASK [-p] [-S] u=<права>,g=<права>,o=<права>
Как видим, нам доступно всего два параметра:
-p — вывести текущее значение маски в цифровом представлении, пригодное для повторного использования;
-S — вывести текущее значение маски в символьном представлении.
Примеры использования команды umask:
Просмотр текущего значения маски:
umask
Просмотр текущего значения маски в символьном представлении:
umask -S
Возможно вы задались вопросом, почему на скриншоте значение маски отображается как 0022. Обычно первую цифру отбрасывают, если только не устанавливаются специальные атрибуты.
Задать маску 002:
umask 002
или
umask 0002
Если вы привыкли к символьному отображению прав, то задать маску можно и иначе:
umask u=rwx,g=rx,o=
Здесь есть один тонкий момент, который нужно разъяснить. В начале этой статьи мы рассматривали примеры расчётов прав на файлы и каталоги. Напомню, что они получались путём вычитания маски. Таким образом, пользовательская маска представляет собой запреты. Та же маска 002 не накладывает запретов на владельца файла или каталога и группу, которая сопоставлена файлу/каталогу, но для остальных пользователей накладывается запрет на редактирование содержимого файла или каталога. Но, если мы задаём маску через символьное отображение, то мы прописываем права, а не запреты.
Группы прав можно объединять:
umask ug=rwx,o=
В примере выше мы выставили одни и те же права владельцу и группе. Если нужно задать одинаковые права всем, то можно использовать параметр a (all):
umask a=rwx
Прописывать все права досконально не обязательно. Если нужно разрешить или запретить определённые действия, то нужно просто указать что и для кого мы разрешаем (+) или запрещаем (-).
Пример добавления разрешения:
umask o+x
Пример добавления запрета:
umask a-w
Можно даже комбинировать описанные выше способы:
umask ug=rwx,o-rw
В этом примере мы дали полный доступ владельцу и группе, одновременно с этим лишив остальных пользователей прав на чтение и редактирование.
Все эти манипуляции изменяют значение пользовательской маски только в текущей сессии терминала. Можно ли изменить значение маски по умолчанию? Да. Если хотите изменить значение маски для пользователя, отредактируйте файл конфигурации оболочки пользователя: ~/.bashrc или ~/.zshrc.
Можно изменить и общее для всей операционной системы значение umask. Обычно требуется отредактировать один из следующих файлов: /etc/bash.bashrc, pam_umask.so или /etc/profile. Зависит от дистрибутива. Учтите, что значение маски для пользователя имеет приоритет над общесистемным значением.
Статьи по теме: