Jump to content
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` будет давать вам права на чтение и запись новых файлов, а также права на чтение, запись и выполнение новых каталогов.

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

- POSIX Programmer's Manual:
  - umask (также доступно как umask(1p))
  - chmod (extended description) (также доступно как chmod(1p))
- 027 umask: a compromise between security and simplicity

Categories:

- Security (Русский)
- File systems (Русский)
- Commands (Русский)