Расставляй правильно приоритеты и не отвлекайся на мелочи

Что такое 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 666 rw- rw- rw- 777 rwx rwx rwx
0002 664 rw- rw- r-- 775 rwx rwx r-x
0022 644 rw- r-- r-- 755 rwx r-x r-x
0007 660 rw- rw- --- 770 rwx rwx ---
0077 600 rw- --- --- 700 rwx --- ---
0027 640 rw- r-- --- 750 rwx r-x ---
0277 400 r-- --- --- 500 r-x --- ---

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

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

Значение
umask
Файл (File) Директория (Directory)
Права
(Rights)
Владелец
(Owner)
Группа
(Group)
Остальные
(Other)
Права
(Rights)
Владелец
(Owner)
Группа
(Group)
Остальные
(Other)
r w x r w x r w x r w x r w x r w x

10 комментариев на статью:
  • 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

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

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

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

    • admin:

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

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

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

  • Вот посмотрите примеры из википедии, там ни слова про вычитание:
    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.

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