Umask

Права доступа и umask

При создании файла или каталога ему присваивается набор прав доступа по умолчанию. Для обычного файла режим доступа составляет 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-пользователя. Её следует применять только тогда, когда вы точно знаете что и для какой цели делаете. Значение маски по умолчанию, как правило, является оптимальным в плане безопасности и комфорта для рядового пользователя.

Для полного доступа к курсу, нужна профессиональная подписка

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

Получить доступ
115
курсов
892
упражнения
2241
час теории
3196
тестов

Зарегистрироваться

или войти в аккаунт

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

  • 115 курсов, 2000+ часов теории
  • 800 практических заданий в браузере
  • 250 000 студентов

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг».

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

Логотип компании Альфа Банк
Логотип компании Rambler
Логотип компании Bookmate
Логотип компании Botmother

Есть вопрос или хотите участвовать в обсуждении?

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

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг».