umask (Русский)
Утилита 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=
Установка значения маски
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