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

Что такое 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 калькулятор»

12 комментариев на статью:
  • darkhan:

    Как сделать по отдельным пользователям права по умолчанию 775 при созданий папки или файла.
    это profile пользователя. Что тут нужно сделать ? Ведь почти все закомментированно.

    # ~/.profile: executed by the command interpreter for login shells.
    # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
    # exists.
    # see /usr/share/doc/bash/examples/startup-files for examples.
    # the files are located in the bash-doc package.

    # the default umask is set in /etc/profile; for setting the umask
    # for ssh logins, install and configure the libpam-umask package.
    #umask 022

    # if running bash
    if [ -n «$BASH_VERSION» ]; then
    # include .bashrc if it exists
    if [ -f «$HOME/.bashrc» ]; then
    . «$HOME/.bashrc»
    fi
    fi

    # set PATH so it includes user’s private bin if it exists
    if [ -d «$HOME/bin» ] ; then
    PATH=»$HOME/bin:$PATH»
    fi

  • установить права на файл « iPhone 4 в Google.ru:

    […] 19 фев 2010 – Что такое umask и как установить права на файл или директорию. Очередной пост из серии: всегда хотел это понять, … Подглядел вот … Перейти на сайт […]

  • unfalse:

    Второй раз натыкаюсь на объяснение работы umask как вычитания. Это не совсем верно. Привожу комментарий одного пользователя:

    >> при создании файла результирующий набор бит прав доступа вычисляется как 0666 & ~umask(побитово).
    т.е. при umask=0022 имеем:
    ~0022 -> 7755 (инверсия бит)
    7755 ? 0666 ->0644 (побитовое И)
    Насчет вычитания это случайное совпадение.

    • admin:

      Спасибо.
      Смысл в первом абзаце: … легкое и доходчивое объяснение …

      Что проще запомнить и применять, логические операции по формуле C: (P&(~Q)) или применять обычное арифметическое вычитание приводящие к аналогичному результату?

      Мне проще второе, Вам, наверное, первое, я не возражаю :-)

  • unfalse:

    Вот посмотрите примеры из википедии, там ни слова про вычитание:
    https://ru.wikipedia.org/wiki/Umask

    Т.е. сначала проводится операция побитового отрицания значения umask, а затем, полученное значение вычисляется как побитовое И со значением прав создаваемого файла или каталога.

    • admin:

      В английской версии этой страницы вообще очень много умных и полезных «буков» и то-же ни слова про вычитание, но … суть не в этом … я уже ответил выше —^

  • valeriy:

    Расчет прав доступа руководствуясь правилом: побитовое И между унарным дополнением аргумента маски (используя побитовое НЕ) и режимом полного доступа. Режим полного доступа для директорий — 777, для файлов — 666.
    Для директории:
    777 И (НЕ 022) = (111 111 111) И НЕ(000 010 010) = (111 111 111) И (111 101 101) = (111 101 101) = (rwx r-x r-x) = 755
    Для файла:
    666 И (НЕ 022) = (110 110 110) И НЕ(000 010 010) = (110 110 110) И (111 101 101) = (110 100 100) = (rw- r— r—) = 644

  • Павел:

    автору респект, нападки умников считаю излишними

  • Виктор:

    В случае файла вычитание даст тот же результат только для чётных цифр. Для нечётных цифр выбирается меньшее чётное, т.е. для 1 → 0, для 3 → 2 и так далее. В нашем случае маска 367 приводится к виду 266 и только потом вычитается из 666, что даёт 666-266=400.

  • Мимокрокодил:

    Лучше бы объяснили не вычитанием, а побитовым И между umask и режимом полного доступа. umask отключает указанные биты, как было сказало в комментарии выше.

  • WSL и права 777 — ~ # Unix-Garage:

    […] И хорошая статься по umask, ифномарция в которой пригодится для понимания сделанного (если оно надо, конечно) — https://handynotes.ru/2010/02/umask.html […]

Ответить
Обязательные поля помечены *