Одни люди ищут - причины, другие - возможности, выигрывают последние

Что такое umask и как установить права на файл или директорию

Очередной пост из серии «Ликбез». Всегда хотел это понять, но вечно что-то мешало.
Подглядел вот здесь, довольно легкое и доходчивое объяснение (прошу не путать ликбез с академическим толкованием) того, как посчитать umask, если знаешь какие права в итоге должен иметь твой файл или директория. Как правило, при администрировании Linux систем, нам больше всего приходится сталкиваться с фактическими правами, а вот с umask возникают некоторые трудности. Автор оригинальной статьи сам немного запутался, но я все исправил.

Что такое umask?

При создании файла или директории, среда операционной системы присваивает им определенные права доступа по умолчанию, и umask - это пользовательская маска (user mask), которая используется для определения конечных прав доступа.

Как установить umask по умолчанию?

Сперва, нам необходимо понять, как узнать текущее значение нашей umask. Сделать это очень просто:


$ umask 0022

Umask для всех пользователей по умолчанию устанавливается в файлах /etc/.bashrc или /etc/.profile.
После процедуры начальной инсталляции Linux, по умолчанию она равна 0022 (022) или 0002 (002).
Если в этих файлах, мы просто добавим или изменим строку с umask:


$ umask 027

То при следующем входе мы получим новое значение umask. Если выполним эту команду в текущем сеансе, то, соответственно, изменим значение для маски на время работы сеанса.

Что такое umask равное 0022 и 0002?

В операционной системе Linux базовые права для директории равны 0777 (rwxrwxrwx), а для файла 0666 (rw-rw-rw).

По умолчанию umask 0002 используется для обычного пользователя. С этой маской права по умолчанию, для директории, равны 775, а для файла 664.

Для суперпользователя (root) umask по умолчанию равна 0022. С этой маской права по умолчанию, для директории, равны 755, а для файла 644.

Как посчитать (определить) права файла для маски 022 (пользователь root):
Права по умолчанию: 666
Вычитаемое значение umask: 022 (-)
Итоговые права: 644

Как посчитать (определить) права директории для маски 022 (пользователь root):
Права по умолчанию: 777
Вычитаемое значение umask: 022 (-)
Итоговые права: 755

Итоги

Таким образом: umask "отбирает" необходимые права в нужных разрядах: 7-ка полностью все, 2-ка права на запись, 0 оставляет по умолчанию. По-моему очень просто и понятно.

К примеру вот такие команды:


$ umask 077
$ touch file.txt
$ ls -l file.txt

приведут к такому результату:


-rw------- 1 hb hb 0 2010-02-19 05:21 file.txt

И напоследок, пример umask с различными (наиболее часто используемыми) значениями и результирующие (итоговые) права:

Значение umask Файл Директория
ИтогВладелецГруппаОстальные ИтогВладелецГруппаОстальные
0000 666rw-rw-rw- 777rwxrwxrwx
0002 664rw-rw-r-- 775rwxrwxr-x
0022 644rw-r--r-- 755rwxr-xr-x
0007 660rw-rw---- 770rwxrwx---
0077 600rw------- 700rwx------
0027 640rw-r----- 750rwxr-x---
0277 400r-------- 500r-x------

Калькулятор umask

Конечно-же, ограниченный упрощенный метод подсчета и приведенная таблица не способны покрыть множество вариантов значений umask, поэтому, для более полной и четкой картины, предлагаю вам воспользоваться следующим наглядным инструментом:
«Онлайн umask калькулятор»