Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Umask Linux: Пользователи

При создании файла или каталога ему присваивается набор прав доступа по умолчанию. Для обычного файла режим доступа составляет rw- rw- rw- (в двоичном представлении: 110 110 110, в восьмеричном представлении: 6 6 6), для каталога - rwx rwx rwx (в двоичном представлении: 111 111 111, в восьмеричном представлении: 7 7 7).

Но если мы попробуем создать новый файл, то увидим, что режим доступа по умолчанию к нему немного отличается:

ls -l

total 0

touch file1
ls -l

-rw-rw-r-- 1 hex hex 0 июн  6 13:22 file1

Дело в том, что в процесс определения режима доступа ко вновь создаваемым файлам (каталогам) вмешивается так называемая маска umask (user file creation mode mask), значение которой равно 0002. Это значение по умолчанию в Ubuntu (для других дистрибутивов оно может отличаться: например, в Debian равно 0022) и, как мы это увидим в дальнейшем, его можно изменять.

Как же формируется итоговый набор прав доступа к новым файлам с учётом действия umask? Давайте рассмотрим это на примере создания нового файла. При этом, для большей наглядности и понимания, режим прав доступа к файлу будем рассматривать в двоичном представлении, а в значении маски 0002 нас будут интересовать только последние три цифры 002 заданные в восьмеричном представлении (лидирующая цифра (0 в данном примере) нас сейчас не интересует).

Маску можно посмотреть с помощью соответствующей команды umask:

umask

0002

Итак, полный режим доступа к файлу (без учёта маски):

rw- rw- rw- (110 110 110)

Значение маски (в двоичном представлении):

000 000 010 (повторимся, нас сейчас интересуют только три последних позиции маски 0 0 2)

Итоговый режим доступа (с учётом маски):

rw- rw- r-- (110 110 100)

А теперь наглядно сопоставим измения в табличке:

Представление Двоичное Символическое
Полный режим 110 110 110 rw - rw - rw -
Маска 000 000 010 000 000 010
Итоговый режим 110 110 100 rw - rw - r - -

Права доступа к файлу задаются девятью позициями (3 позиции для владельца файла + 3 для группы + 3 для остальных пользователей). Значению каждой позиции сопоставляются значения маски: если внимательно присмотреться, то можно заметить, что в тех позициях, где значение в маске равно единице, происходит "сброс" соответствующего атрибута прав доступа. То есть, соответствующее право доступа в конкретной позиции (где в маске встречается единица) аннулируется — таким образом формируется итоговый режим прав доступа.

В примере выше маска 000 000 010 аннулирует восьмую (право на запись w для остальных пользователей) позицию режима доступа к файлу. Именно поэтому rw- rw- rw- трансформируется в rw- rw- r-- (или, если в двоичном представлении: 110 110 110 трансформируется в 110 110 100).

Изменение маски

Маску легко изменить. В рамках текущей сессии это делается путём передачи нового значения команде umask:

umask # проверяем текущее значение маски

0002

umask 0000 # устанавливаем новое значение маски
umask # проверяем новое значение маски

0000

В этом примере мы фактически "обнулили" маску, установив все нули. Теперь маска никак не будет воздействовать на исходный режим доступа, устанавливаемый по умолчанию (нет единиц в маске - значит нигде не будет производиться аннулирование правил доступа!).

Теперь попробуем создать новый файл file2:

ls -l

-rw-rw-r-- 1 hex hex 0 июн  6 13:22 file1

touch file2
ls -l

-rw-rw-r-- 1 hex hex 0 июн  6 13:22 file1
-rw-rw-rw- 1 hex hex 0 июн  6 14:57 file2

При "нулевой" маске итоговый режим доступа к созданному файлу соответствует полному режиму по умолчанию rw- rw- rw- (т.е. маска никак на него не воздействовала). Сравните это с режимом доступа к файлу с именем file1, который мы создали ранее, когда маска была равна 000 000 010.

В табличном виде это выглядит так:

Представление Двоичное Символическое
Полный режим 110 110 110 rw - rw - rw -
Маска 000 000 000 000 000 000
Итоговый режим 110 110 110 rw - rw - rw -

Задача

Допустим, мы не хотим, чтобы для вновь создаваемых файлов участники их группы имели право на запись. То есть нам надо аннулировать это право w для группы. Для этого надо изменить маску по умолчанию 0002 (000 000 000 010) на 0022 (000 000 010 010). Обратите внимание, что сейчас мы показываем полное значение маски в формате с лидирующими нулями (см. примечание по этому поводу выше).

umask 0022
umask

0022

ls -l

-rw-rw-r-- 1 hex hex 0 июн  6 13:22 file1
-rw-rw-rw- 1 hex hex 0 июн  6 14:57 file2

touch file3
ls -l

-rw-rw-r-- 1 hex hex 0 июн  6 13:22 file1
-rw-rw-rw- 1 hex hex 0 июн  6 14:57 file2
-rw-r--r-- 1 hex hex 0 июн  6 15:15 file3

Выше мы изменили маску на 022 (000 010 010) и создали новый файл с именем file3.

Представление Двоичное Символическое
Полный режим 110 110 110 rw - rw - rw -
Маска 000 010 010 000 010 010
Итоговый режим 110 100 100 rw - r - - r - -

Маска 000 010 010 аннулирует пятую (право на запись w для группы) и восьмую (право на запись w для остальных пользователей) позицию режима доступа к файлу. Именно поэтому rw- rw- rw- трансформируется в rw- r-- r-- (или, если в двоичном представлении: 110 110 110 трансформируется в 110 100 100). Сравните это с режимом доступа к файлу с именем file1, который мы создали ранее, когда маска была равна 002 (000 000 010), и с режимом доступа к файлу с именем file2, который мы создали, когда маска была равна 000 (000 000 000).

Заключение

Отметим напоследок, что изменение маски является достаточно редкой операцией в практике unix-пользователя. Её следует применять только тогда, когда вы точно знаете что и для какой цели делаете. Значение маски по умолчанию, как правило, является оптимальным в плане безопасности и комфорта для рядового пользователя.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»