umask (Русский)

From ArchWiki

Состояние перевода: На этой странице представлен перевод статьи umask. Дата последней синхронизации: 10 февраля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Утилита umask используется для управления маской режима (mode mask), которая определяет начальное значение битов разрешений (permission bits) для создаваемых файлов. Поведение этой утилиты стандартизировано POSIX и описано в POSIX Programmer's Manual. Поскольку umask влияет на среду текущей командной оболочки, она обычно реализуется как встроенная команда оболочки.

Значение маски режима

Маска режима содержит биты разрешений, которые не должны устанавливаться для создаваемого файла, поэтому она является логическим отрицанием битов разрешений, устанавливаемых для создаваемого файла. Если какой-либо бит в маске установлен в 1, соответствующее разрешение для создаваемого файла будет сброшено. Таким образом, маска действует как фильтр для удаления битов разрешений и помогает установить доступ к файлам по умолчанию.

Итоговое значение битов разрешений для вновь создаваемого файла вычисляется с помощью инверсии импликации (material nonimplication), которая может быть выражена в логической нотации:

R: (D & (~M))

Итоговое значение — это конъюнкция разрешений по умолчанию D и побитового отрицания маски режима M.

Примечание:
  • Linux не позволяет создавать файлы сразу с битами выполнения. Разрешения по умолчанию для каталога — 777, а для файла — 666.
  • В Linux учитываются только биты разрешений — смотрите umask(2). Биты suid, sgid и sticky в маске игнорируются.

Для примера возьмём маску 027. Значения каждой цифры таковы:

  • 0 указывает, какие биты разрешений пользователя (user) не будут установлены у файла
  • 2 указывает, какие биты разрешений группы (group) не будут установлены у файла
  • 7 указывает, какие биты разрешений остальных (other) не будут установлены у файла

С учётом информации из таблицы ниже, это означает, что для создаваемого файла, например, принадлежащего пользователю User1 и группе Group1, User1 имеет все возможные разрешения (восьмеричное значение 7) на созданный файл, другие пользователи группы Group1 не имеют прав на запись (восьмеричное значение 5), а любой другой пользователь не имеет никаких прав (восьмеричное значение 0) на созданный файл. Таким образом, с маской 027 в данном примере файлы будут создаваться с разрешениями 750.

Восьмеричное Двоичное Значение
0 000 нет разрешений
1 001 только выполнение
2 010 только запись
3 011 запись и выполнение
4 100 только чтение
5 101 чтение и выполнение
6 110 чтение и запись
7 111 чтение, запись и выполнение

Просмотр текущего значения маски

Просто выполните команду umask без аргументов. Конкретный стиль вывода зависит от реализации, но обычно выводится значение маски в восьмеричной системе счисления:

$ umask
0027

С опцией -S, которая стандартизована в POSIX, маска будет отображаться с использованием символьной нотации. Однако значение символьной нотации всегда будет логическим отрицанием восьмеричного значения маски, то есть отображаются биты разрешений, которые будут установлены для вновь создаваемого файла:

$ umask -S
u=rwx,g=rx,o=

Установка значения маски

Примечание: Значения umask можно выбирать индивидуально по ситуации. Например, пользователи настольных компьютеров могут счесть достаточным ограничение прав на домашний каталог (useradd -m по умолчанию создаёт каталог с правами 700), и это делает все файлы в нём недоступными для других пользователей. Если это нецелесообразно (например, при использовании Apache HTTP Server) и публичные файлы хранятся среди приватных, то, вероятно, стоит установить более ограничивающую маску.

Изменить маску можно с помощью команды umask. Строка, задающая маску режима, подчиняется тем же синтаксическим правилам, что и аргумент mode в chmod (подробности смотрите в POSIX Programmer's Manual).

Общесистемное значение маски можно прописать в /etc/profile или в стандартный файл конфигурации командной оболочки, например /etc/bash.bashrc. Многие дистрибутивы Linux, в том числе Arch, используют по умолчанию 022 (смотрите /etc/profile). Можно также указать маску с помощью pam_umask.so, но это может быть переопределено в /etc/profile и других подобных местах.

Если вам нужно установить другое значение, вы можете либо напрямую отредактировать этот файл, что повлияет на всех пользователей, либо вызвать umask из пользовательского файла конфигурации вашей оболочки, например ~/.bashrc, чтобы изменить только ваш umask, однако эти изменения вступят в силу только после следующего входа в систему. Чтобы изменить umask только в текущем сеансе, просто запустите umask, указав желаемое значение. Например, выполнение команды umask 077 будет давать вам права на чтение и запись новых файлов, а также права на чтение, запись и выполнение новых каталогов.

Смотрите также