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