Главная >> Команды >> Команда umask в Linux

Команда umask в Linux

Права доступа к файлам и папкам в Linux – это часть стандарта POSIX. В связи с этим нам доступен ряд команд, таких как chmod, chown, chgrp и umask. В этой статье будет рассмотрена команда umask Linux. Эта команда задаёт набор прав, которые будут применены к файлам и директориям при их создании.

Настройки заданные командой будут действовать только для новых файлов. В этой статье будет рассмотрена команда umask Linux, её основные параметры, а также способы применения их на практике.


Содержание статьи

Права доступа в Linux

Поскольку команда umask используется для настройки прав по умолчанию, надо сначала разобраться какие есть права. Как было сказано ранее, Linux следует стандартам POSIX, что делает его UNIX-совместимой операционной системой. В общем случае права доступа в UNIX разбиты на три категории:

  • u (user) – пользователь.
  • g (group) – группа.
  • o (other) – остальные пользователи.

Каждая категория имеет три вида прав, причём эти права имеют отличия для файлов и каталогов. Для файлов:

  • r (read) – чтение файла.
  • w (write) – изменение файла.
  • x (execute) – выполнение файла, как программы.

Для каталогов:

  • r (read) – чтение списка файлов.
  • w (write) – изменение и создание файлов в каталоге.
  • x (execute) – открытие файлов в каталоге.

Вы можете посмотреть список прав командой для файлов в любом текущем каталоге такой командой:

ls -l

Вы увидите что-то вроде -rwxrw-r--, где первый символ служит для обозначения папок и символических ссылок, а последующие символы можно разбить на группы по три, для категорий u, g и o соответственно.

 

С файлами всё понятно, но для каталогов параметры r и x могут вносить некоторую неясность. Если запретить чтение списка файлов (r), то вы не сможете открыть каталог, но при этом можете открыть и изменить файл, если знаете его имя, также доступно создание новых файлов. Если запретить открытие файлов (x), то вы не сможете открыть каталог и прочитать файлы в нём, но при этом с помощью команды ls вы получите список файлов без какой-либо конкретики в виде прав и размера файлов.

По умолчанию новые файлы будут иметь права -rw-rw-r--, где первый прочерк говорит о том, что перед нами файл. Для папок же права будут выглядеть следующим образом: drwxrwxr-x, где d говорит о том, что мы имеем дело с папкой (l будет означать символическую ссылку).

Права могут быть выражены не только в виде последовательности букв, но и в восьмеричном виде, например, для -rw-rw-r--  запись будет выглядеть вот так: 0664. Права для файла по умолчанию в Linux в восьмеричном формате записываются как 0666, а для каталога 0777. В этом случае 0 ничего не означает, а каждая цифра означает набор прав для определённой группы. Сначала владелец, потом группа, а потом все остальные. Но благодаря маске в Linux по умолчанию для файла выставляются права 0664, а для директории 0775. Именно на установку этих значений влияет команда umask. Подробнее о правах доступа к файлам можете узнать из нашей статьи.

Как работает umask

Команда umask задаёт маску прав для новых файлов и каталогов. При создании любого файла операционная система запрашивает маску прав и рассчитывает маску на основе неё. По умолчанию стоит маска 0002, Первая цифра ни на что не влияет и является пережитком синтаксиса языка C. Дальше цифры аналогичны правам доступа в Linux: первая - владелец, вторая - группа и третья - все остальные. Эта маска используется для расчета прав файла. Если не вдаваться в подробности, то рассчитывается всё довольно просто, от максимальных прав отнимается маска и получаются права для файла. Фактически, получается, что маска содержит права, которые не будут установлены для файла. Поэтому права по умолчанию для файла будут 666 - 002 = 664, а для каталога - 777 - 002 = 775.

Каждую цифру маски 002 можно перевести в двоичную систему. Последняя 2 описывает категорию other и в двоичной системе выглядит как 010. Биты читаются слева направо и описывают права rwx. В данном примере 1 означает запрет на запись, а нули разрешают чтение и выполнение. Если будет стоять битовая маска 100, то получится 4 в восьмеричной системе, то это будет означать запрет на чтение.

 

Важное замечание, что с помощью маски не получится разрешить выполнение файлов. Флаг x с помощью маски можно установить только для каталогов. Поскольку права файла рассчитываются на основе прав 666, в которых выполнение уже отключено rw-rw-rw, то маска тут уже ничего сделать не может. Зато для каталогов всё работает, потому что используются права 777. Для наглядности маску по умолчанию можно представить в виде таблицы:

Категория прав

User

Group

Other

Буквенное обозначение

r

w x r w x r -

x

Битовая маска

0

0 0 0 0 0 0 1

0

Маска в восьмеричном виде

0

0

2

Нельзя не сказать и о том, что команда работает в пределах одной сессии терминала и не распространяется на всю систему и другие сессии.

Синтаксис и опции umask

Команда umask, как было сказано ранее, определяет битовую маску, которая будет применена к новым файлам. У команды довольно простой синтаксис и есть только несколько опций:

$ umask опции маска_в_восьмеричном_виде

Помимо маски в восьмеричном виде есть и способ задания прав по умолчанию схожий с синтаксисом команды chmod:

$ umask опции u=права,g=права,o=права

Опции утилиты:

  • -p - вывести команду umask, которая при выполнении задаст текущую маску в восьмеричном виде;
  • -S - вывести права по умолчанию для папки в формате u=rwx, g=rwx, o=rwx рассчитанные по текущей маске.

Посмотреть текущее значение маски можно двумя способами. Если команде передать опцию -p, то она выведет команду для установки текущей маски:

umask -p

Параметр -S выводит текущие разрешения в формате u=rwx, g=rwx, o=rx, где х (выполнение) относится только к каталогам. Право на выполнение для файлов можно выдать только с помощью chmod.

umask -S

Теперь рассмотрим способы задания маски:

umask 0002

umask 002

Как видите, четвертую цифру можно опустить. Маску можно задать и с помощью более традиционных обозначений:

umask u=rwx,g=rwx,o=

В отличие от битовой маски, таким способом прописываются разрешения, а не запреты. Иными словами, права задаются ровно так же, как и в chmod. В этом примере для категории other мы не указали никаких прав, таким образом запрещены все три операции. Для файлов, как и в случае с битовой маской, право на выполнение не выдаётся.

Группы прав можно объединять, или же задавать права сразу для всех категорий, использовав параметр a= (all).

umask ug=rwx,o=rx

umask a=rwx

Также имеется возможность работы с отдельными правами. Оператором + или - можно разрешить или запретить определённое действие, остальные биты в маске останутся нетронутыми.

umask ug-w

umask a+w

Помимо прочего вы можете комбинировать два предыдущих способа. Например, разрешить пользователю все операции, а группе и остальным пользователям убрать право на чтение.

umask u=rwx,go-r

 

Переходим к самому интересному – применению команды на практике. Из очевидного стоит отметить добавление команды в какой-либо скрипт. Например, можно запретить изменение файлов, которые будут записаны в дальнейшем. Напомним, что команда будет действовать в пределах одной сессии терминала.

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

Другой пример использования не столь безопасный. Команда прописывается в конфигурационных файлах пользователя. Изменить маску для оболочки терминала можно добавлением строчки с командой umask в файле ~/.bashsrc. Это справедливо для дистрибутивов на основе Debian. В других дистрибутивах может потребоваться редактирование файла .profile.

Глобальные изменения оболочки вступят в силу после добавления строчки в файл /etc/bash.bashsrc. Но эта маска имеет меньший вес, чем та, что задаётся в домашнем каталоге. Впрочем, вы можете задать лишь необходимые права для пользователя, а остальные оставить из глобальной конфигурации. Например, для пользователя задать параметр g+w, что разрешит ему изменение файлов группы.

Изменение маски для всех программ системы – нетривиальная задача, которая потребует внесение множества правок. Поэтому вместо этого используют локальные права, установленные командой setfacl.

Сравнение с chmod

У команд chmod и umask есть три значительных отличия. Первое, umask задаёт маску для новых файлов, а chmod устанавливает права для существующих. Второе, если говорить о маске, то у umask она инверсная. Если какой-либо бит в ней равен 1, то это означает запрет на выполнение соответствующей операции. Третье, umask не может предоставить права на выполнение файла. Даже если указать маску 000, разрешающую всё, то для файла будут заданы права rw-rw-rw-.

Из общего стоит отметить аналогичный синтаксис предоставления права через операторы =, +, -. Также обе команды не способны менять владельца и группу, для этого существуют команды chown и chgrp. Более сложное управление правами осуществляется через команду setfacl, позволяющую задавать разные права для отдельных пользователей, групп и каталогов, что расширяет стандарт POSIX.

Выводы

Команда umask Linux позволяет установить права для новых файлов и каталогов. Она будет полезна в том случае, если вы хотите задать права заранее. Но учтите, что изменения маски будут распространяться только на текущую сессию терминала, а также то, что за пределами терминала команда практически не имеет силы.

Оцените статью

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (6 оценок, среднее: 5,00 из 5)
Загрузка...
Creative Commons License
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

7 комментариев к “Команда umask в Linux”

  1. "рассчитывается ... просто, от максимальных прав отнимается маска и получаются права для файла"
    "права по умолчанию для файла будут 666 - 002 = 664"
    Вот тут я не понял. Максимальные права для файла ведь 777, а не 666

    Ответить
  2. > Нельзя не сказать и о том, что команда работает в пределах одной сессии терминала и не распространяется на всю систему и другие сессии.

    Можно упомянуть расширенные права доступа (ACL). Они как раз позволяют установить дефолтные права файлов для конкретной директории и эти правила сохраняются на диске.

    [pupkin@pupkin tmp]$ mkdir common_dir
    [pupkin@pupkin tmp]$ getfacl common_dir
    # file: common_dir
    # owner: pupkin
    # group: pupkin
    user::rwx
    group::rwx
    other::r-x

    [pupkin@pupkin tmp]$ touch common_dir/1.txt
    [pupkin@pupkin tmp]$ getfacl common_dir/1.txt
    # file: common_dir/1.txt
    # owner: pupkin
    # group: pupkin
    user::rw-
    group::rw-
    other::r--

    # Все новые файлы будут доступны пользователям группы users
    [pupkin@pupkin tmp]$setfacl -d -m g:users:rw common_dir
    [pupkin@pupkin tmp]$ getfacl common_dir
    # file: common_dir
    # owner: pupkin
    # group: pupkin
    user::rwx
    group::rwx
    other::r-x
    default:user::rwx
    default:group::rwx
    default:group:users:rw-
    default:mask::rwx
    default:other::r-x

    [pupkin@pupkin tmp]$ touch common_dir/2.txt
    [pupkin@pupkin tmp]$ getfacl common_dir/2.txt
    # file: common_dir/2.txt
    # owner: pupkin
    # group: pupkin
    user::rw-
    group::rwx #effective:rw-
    group:users:rw-
    mask::rw-
    other::r--

    Ответить
  3. Немного не точно написано, речь идёт не о максимальных правах, а о максимальных правах по умолчанию. Они для каталога 0777, а для файла 0666. Вот из них уже вычитается umask. Даже если umask 0000, то всё равно не получится создать файл c правами на исполнение.

    Ответить
  4. Единственное что: В Астре, например, нужно маску задавать с четырьмя цифрами, например: 0055 в файлах ~/.bashsrc и /etc/bash.bashsrc . С тремя не получиться, то есть такая маска 055 не сработает. Маску нужно прописать в этих двух файлах, затем задать ее командой umask и затем даже после перезагрузки будет заданная вами маска.

    Ответить
  5. "По умолчанию стоит маска 0002, Первая цифра ни на что не влияет и является пережитком синтаксиса языка C"

    Совсем нет, первая цифра устанавливает значения SUID, SGID, Sticky bit.

    Ответить

Оставьте комментарий