Umask в Linux: Контролируйте права доступа для новых файлов с помощью одной команды

Umask в Linux: Контролируйте права доступа для новых файлов с помощью одной команды

Вы когда-нибудь задумывались, почему новые файлы в Linux появляются с одними и теми же правами доступа? Это не магия, а работа скрытого сторожа вашей системы — команды umask.

Эта команда — ваш личный настройщик безопасности по умолчанию. Она незаметно определяет, кто и что сможет делать с только что созданными документами и папками. Представьте, что вы написали скрипт, и он сразу доступен для чтения всем в системе. Не очень безопасно, правда?

Umask решает эту проблему. Она задаёт маску, которая вычитается из максимально возможных прав. По умолчанию стоит значение 0002, что даёт файлам права 664 (-rw-rw-r--), а папкам — 775 (drwxrwxr-x). Цифры маски — это не разрешения, а именно запреты.

В статье мы на простых примерах разберём, как работает этот расчёт. Вы поймёте, что означают эти загадочные восьмеричные числа и как они связаны с привычными rwx.

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

Главное помнить: umask не может автоматически сделать файл исполняемым. Это мера предосторожности. Но для папок всё работает иначе.

Мы расскажем, где и как применять эту команду на практике. Например, как прописать нужную маску в файле ~/.bashrc, чтобы она действовала при каждом входе в систему.

Чем umask отличается от chmod? Первая задаёт правила для будущего, вторая — меняет настоящее. Узнайте, как они дополняют друг друга.

Хотите навсегда разобраться с правами доступа и сделать свою работу в 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 соответственно.

Umask в Linux: Контролируйте права доступа для новых файлов с помощью одной команды

С файлами всё понятно, но для каталогов параметры 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 в восьмеричной системе, то это будет означать запрет на чтение.

Umask в Linux: Контролируйте права доступа для новых файлов с помощью одной команды

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

Umask в Linux: Контролируйте права доступа для новых файлов с помощью одной команды

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

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

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

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

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

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

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

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

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

umask -p
Umask в Linux: Контролируйте права доступа для новых файлов с помощью одной команды

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

umask -S
Umask в Linux: Контролируйте права доступа для новых файлов с помощью одной команды

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

umask 0002 umask 002
Umask в Linux: Контролируйте права доступа для новых файлов с помощью одной команды

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

umask u=rwx,g=rwx,o=
Umask в Linux: Контролируйте права доступа для новых файлов с помощью одной команды

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

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

umask ug=rwx,o=rx umask a=rwx
Umask в Linux: Контролируйте права доступа для новых файлов с помощью одной команды

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

umask ug-w umask a+w
Umask в Linux: Контролируйте права доступа для новых файлов с помощью одной команды

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

umask u=rwx,go-r
Umask в Linux: Контролируйте права доступа для новых файлов с помощью одной команды

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

Umask в Linux: Контролируйте права доступа для новых файлов с помощью одной команды

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

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

Umask в Linux: Контролируйте права доступа для новых файлов с помощью одной команды

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

Umask в Linux: Контролируйте права доступа для новых файлов с помощью одной команды

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

Сравнение с chmod

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

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

Выводы

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

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


Кликните на изображение чтобы обновить код, если он неразборчив