В каком из файлов можно изменить маску umask для создания директорий конкретного пользователя
При создании файла или каталога ему присваивается набор прав доступа по умолчанию. Для обычного файла режим доступа составляет rw- rw- rw- (в двоичном представлении: 110 110 110 , в восьмеричном представлении: 6 6 6 ), для каталога - rwx rwx rwx (в двоичном представлении: 111 111 111 , в восьмеричном представлении: 7 7 7 ).
Но если мы попробуем создать новый файл, то увидим, что режим доступа по умолчанию к нему немного отличается:
Дело в том, что в процесс определения режима доступа ко вновь создаваемым файлам (каталогам) вмешивается так называемая маска umask (user file creation mode mask), значение которой равно 0002 . Это значение по умолчанию в Ubuntu (для других дистрибутивов оно может отличаться: например, в Debian равно 0022 ) и, как мы это увидим в дальнейшем, его можно изменять.
Как же формируется итоговый набор прав доступа к новым файлам с учётом действия umask? Давайте рассмотрим это на примере создания нового файла. При этом, для большей наглядности и понимания, режим прав доступа к файлу будем рассматривать в двоичном представлении, а в значении маски 0002 нас будут интересовать только последние три цифры 002 заданные в восьмеричном представлении (лидирующая цифра ( 0 в данном примере) нас сейчас не интересует).
Маску можно посмотреть с помощью соответствующей команды umask :
Итак, полный режим доступа к файлу (без учёта маски):
rw- rw- rw- ( 110 110 110 )
Значение маски (в двоичном представлении):
000 000 010 (повторимся, нас сейчас интересуют только три последних позиции маски 0 0 2 )
Итоговый режим доступа (с учётом маски):
rw- rw- r-- ( 110 110 100 )
А теперь наглядно сопоставим измения в табличке:
Представление | Двоичное | Символическое |
---|---|---|
Полный режим | 110 110 110 | rw - rw - rw - |
Маска | 000 000 010 | 000 000 010 |
Итоговый режим | 110 110 100 | rw - rw - r - - |
Права доступа к файлу задаются девятью позициями (3 позиции для владельца файла + 3 для группы + 3 для остальных пользователей). Значению каждой позиции сопоставляются значения маски: если внимательно присмотреться, то можно заметить, что в тех позициях, где значение в маске равно единице, происходит "сброс" соответствующего атрибута прав доступа. То есть, соответствующее право доступа в конкретной позиции (где в маске встречается единица) аннулируется — таким образом формируется итоговый режим прав доступа.
В примере выше маска 000 000 010 аннулирует восьмую (право на запись w для остальных пользователей) позицию режима доступа к файлу. Именно поэтому rw- rw- rw- трансформируется в rw- rw- r-- (или, если в двоичном представлении: 110 110 110 трансформируется в 110 110 100 ).
Разрешения Linux
Прежде чем идти дальше, давайте кратко объясним модель разрешений Linux.
В Linux каждый файл связан с владельцем и группой и ему назначены права доступа для трех разных классов пользователей:
- владелец файла.
- члены группы.
- все остальные.
Существует три типа разрешений, которые применяются к каждому классу:
- разрешение на чтение.
- разрешение на запись.
- разрешение на выполнение.
Эта концепция позволяет вам указать, каким пользователям разрешено читать файл, записывать в файл или выполнять файл.
Чтобы просмотреть права доступа к файлу, используйте ls команду:
Первый символ представляет тип файла, который может быть обычным file ( - ), directory ( d ), символической ссылкой ( l ) или любым другим специальным типом файла.
Следующие девять символов представляют разрешения, три набора по три символа в каждом. Первый набор показывает права владельца, второй - права группы, а последний набор - права доступа для всех остальных.
Символ r с восьмеричным значением 4 стоит для чтения, w с восьмеричным значением 2 для записи, x с восьмеричным значением 1 для разрешения на выполнение и ( - ) с восьмеричным значением 0 для без разрешений.
Есть также три типа разрешений специального файла: setuid , setgid и Sticky Bit .
В приведенном выше примере ( rwxr-xr-x ) означает, что владелец имеет разрешения на чтение, запись и выполнение ( rwx ), группа и другие пользователи имеют разрешения на чтение и выполнение.
Если мы представим права доступа к файлу с помощью числовой записи, мы подойдем к числу 755 :
- Владелец: rwx = 4+2+1 = 7
- Группа: r-x = 4+0+1 = 5
- Другое: r-x = 4+0+1 = 5
Когда они представлены в цифровом формате, разрешения могут иметь три или четыре восьмеричных цифры (0-7). Первая цифра представляет специальные разрешения, а если она опущена, это означает, что никаких специальных разрешений для файла не установлено. В нашем случае так 755 же, как 0755 . Первая цифра может быть комбинацией 4 для setuid , 2 для setgid и 1 для Sticky Bit .
Права доступа к файлам можно изменить с помощью chmod команды, а владельца - с помощью chown команды.
Как работает 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. Для наглядности маску по умолчанию можно представить в виде таблицы:
Команда UMASK (англ. user file creation mode mask — маска режима создания пользовательских файлов) позволяет задать маску прав пользователя для новых файлов и каталогов в Linux.
Каждый раз, когда пользователь Linux создаёт новый файл или каталог, операционная система запрашивает маску прав для того, чтобы установить корректные права файлу или папке. В цифровом представлении значение маски по умолчанию 002 или 022 в зависимости от дистрибутива Linux. Например, в Ubuntu оно 002, а в Debian 022. Установка прав на файл или папку производится по следующей формуле: от максимальных прав отнимается маска, полученное число и будет правами на файл или каталог.
Для файлов это: 666 — 002 = 664;
Для каталогов: 777 — 002 = 775.
А если маска 022? Тогда права будут высчитаны следующим образом:
Для файлов: 666 — 022 = 644;
Для каталогов: 777 — 022 = 755.
Аналогично и для других значений пользовательской маски.
Так как права на файлы устанавливаются на основе прав 666 (-rw-rw-rw-), то задать права на выполнение файлов с помощью маски не получится. С каталогами такого ограничения нет, так как там права выставляются на основе прав 777 (drwxrwxrwx). Ещё одно ограничение заключается в том, что команда umask действует в рамках одной сессии терминала.
Синтаксис команды выглядит следующим образом:
UMASK [-p] [-S] [маска_в_цифровом_представлении]
Как видим, нам доступно всего два параметра:
-p — вывести текущее значение маски в цифровом представлении, пригодное для повторного использования;
-S — вывести текущее значение маски в символьном представлении.
Примеры использования команды umask :
Просмотр текущего значения маски:
Просмотр текущего значения маски в символьном представлении:
Просмотр значения пользовательской маски в Debian.
Возможно вы задались вопросом, почему на скриншоте значение маски отображается как 0022. Обычно первую цифру отбрасывают, если только не устанавливаются специальные атрибуты.
Задать маску 002:
Изменение значения пользовательской маски в Debian.
Если вы привыкли к символьному отображению прав, то задать маску можно и иначе:
Здесь есть один тонкий момент, который нужно разъяснить. В начале этой статьи мы рассматривали примеры расчётов прав на файлы и каталоги. Напомню, что они получались путём вычитания маски. Таким образом, пользовательская маска представляет собой запреты. Та же маска 002 не накладывает запретов на владельца файла или каталога и группу, которая сопоставлена файлу/каталогу, но для остальных пользователей накладывается запрет на редактирование содержимого файла или каталога. Но, если мы задаём маску через символьное отображение, то мы прописываем права, а не запреты.
Группы прав можно объединять:
В примере выше мы выставили одни и те же права владельцу и группе. Если нужно задать одинаковые права всем, то можно использовать параметр a (all):
Прописывать все права досконально не обязательно. Если нужно разрешить или запретить определённые действия, то нужно просто указать что и для кого мы разрешаем (+) или запрещаем (-).
Пример добавления разрешения:
Пример добавления запрета:
Можно даже комбинировать описанные выше способы:
В этом примере мы дали полный доступ владельцу и группе, одновременно с этим лишив остальных пользователей прав на чтение и редактирование.
Все эти манипуляции изменяют значение пользовательской маски только в текущей сессии терминала. Можно ли изменить значение маски по умолчанию? Да. Если хотите изменить значение маски для пользователя, отредактируйте файл конфигурации оболочки пользователя: ~/.bashrc или ~/.zshrc.
Прописываем пользователю test новое значение umask по умолчанию.
Можно изменить и общее для всей операционной системы значение umask . Обычно требуется отредактировать один из следующих файлов: /etc/bash.bashrc, pam_umask.so или /etc/profile. Зависит от дистрибутива. Учтите, что значение маски для пользователя имеет приоритет над общесистемным значением.
Утилита позволяет просматривать и устанавливать маску режима создания файла, который определяет разрешения для вновь создаваемых файлов или каталогов.
Он используется командами mkdir, touch, tee и другими, которые создают новые файлы и каталоги.
Калькулятор umask
Конечно-же, ограниченный упрощенный метод подсчета и приведенная таблица не способны покрыть множество вариантов значений umask, поэтому, для более полной и четкой картины, предлагаю вам воспользоваться следующим наглядным инструментом:
«Онлайн umask калькулятор»
Права доступа к файлам и папкам в Linux – это часть стандарта POSIX. В связи с этим нам доступен ряд команд, таких как chmod, chown, chgrp и umask. В этой статье будет рассмотрена команда umask Linux. Эта команда задаёт набор прав, которые будут применены к файлам и директориям при их создании.
Настройки заданные командой будут действовать только для новых файлов. В этой статье будет рассмотрена команда umask Linux, её основные параметры, а также способы применения их на практике.
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Очередной пост из серии «Ликбез». Всегда хотел это понять, но вечно что-то мешало.
Подглядел вот здесь, довольно легкое и доходчивое объяснение (прошу не путать ликбез с академическим толкованием) того, как посчитать umask, если знаешь какие права в итоге должен иметь твой файл или директория. Как правило, при администрировании Linux систем, нам больше всего приходится сталкиваться с фактическими правами, а вот с umask возникают некоторые трудности. Автор оригинальной статьи сам немного запутался, но я все исправил.
Что такое umask?
При создании файла или директории, среда операционной системы присваивает им определенные права доступа по умолчанию, и umask - это пользовательская маска (user mask), которая используется для определения конечных прав доступа.
Понимание масок
По умолчанию в системах Linux разрешения 666 на создание по умолчанию предназначены для файлов, которые дают права на чтение и запись для пользователя, группы и других, а также 777 для каталогов, что означает разрешение на чтение, запись и выполнение для пользователя, группы и других. Linux не позволяет создавать файл с разрешениями на выполнение.
Разрешения на создание по умолчанию можно изменить с помощью umask утилиты.
umask влияет только на текущую среду оболочки. В большинстве дистрибутивов Linux значение umask по умолчанию для всей системы устанавливается в файле pam_umask.so или /etc/profile .
Если вы хотите указать другое значение для каждого пользователя, отредактируйте файлы конфигурации оболочки пользователя, такие как ~/.bashrc или ~/.zshrc . Вы также можете изменить текущее umask значение сеанса , выполнив с umask последующим желаемым значением.
Чтобы просмотреть текущее значение маски, просто введите umask без аргументов:
Выход будет включать
Это umask значение содержит биты прав доступа, которые НЕ будут установлены во вновь создаваемых файлах и каталогах.
Как мы уже упоминали, разрешения на создание файлов по умолчанию 666 и для каталогов 777 . Чтобы вычислить биты прав доступа для новых файлов, вычтите значение umask из значения по умолчанию.
Например, чтобы рассчитать, как uname 022 это повлияет на вновь созданные файлы и каталоги, используйте:
- Файлы: 666 - 022 = 644 . Владелец может читать и изменять файлы. Группа и другие могут только читать файлы.
- Каталоги: 777 - 022 = 755 Владелец может перейти в каталог и просмотреть список, изменить, создать или удалить файлы в каталоге. Группа и другие могут cd в каталог и список и читать файлы.
Вы также можете отобразить значение маски в символической записи, используя -S опцию:
В отличие от числовой записи, значение символической записи содержит биты прав доступа, которые будут установлены во вновь создаваемых файлах и каталогах.
Как установить umask по умолчанию?
Сперва, нам необходимо понять, как узнать текущее значение нашей umask. Сделать это очень просто:
Umask для всех пользователей по умолчанию устанавливается в файлах /etc/.bashrc или /etc/.profile.
После процедуры начальной инсталляции Linux, по умолчанию она равна 0022 (022) или 0002 (002).
Если в этих файлах, мы просто добавим или изменим строку с umask:
То при следующем входе мы получим новое значение umask. Если выполним эту команду в текущем сеансе, то, соответственно, изменим значение для маски на время работы сеанса.
Изменение маски
Маску легко изменить. В рамках текущей сессии это делается путём передачи нового значения команде umask:
В этом примере мы фактически "обнулили" маску, установив все нули. Теперь маска никак не будет воздействовать на исходный режим доступа, устанавливаемый по умолчанию (нет единиц в маске - значит нигде не будет производиться аннулирование правил доступа!).
Теперь попробуем создать новый файл file2 :
При "нулевой" маске итоговый режим доступа к созданному файлу соответствует полному режиму по умолчанию rw- rw- rw- (т.е. маска никак на него не воздействовала). Сравните это с режимом доступа к файлу с именем file1 , который мы создали ранее, когда маска была равна 000 000 010 .
В табличном виде это выглядит так:
Представление | Двоичное | Символическое |
---|---|---|
Полный режим | 110 110 110 | rw - rw - rw - |
Маска | 000 000 000 | 000 000 000 |
Итоговый режим | 110 110 110 | rw - rw - rw - |
Итоги
Таким образом: umask "отбирает" необходимые права в нужных разрядах: 7-ка полностью все, 2-ка права на запись, 0 оставляет по умолчанию. По-моему очень просто и понятно.
К примеру вот такие команды:
приведут к такому результату:
И напоследок, пример 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 | --- | --- |
Права доступа в Linux
Поскольку команда umask используется для настройки прав по умолчанию, надо сначала разобраться какие есть права. Как было сказано ранее, Linux следует стандартам POSIX, что делает его UNIX-совместимой операционной системой. В общем случае права доступа в UNIX разбиты на три категории:
Каждая категория имеет три вида прав, причём эти права имеют отличия для файлов и каталогов. Для файлов:
Вы можете посмотреть список прав командой для файлов в любом текущем каталоге такой командой:
Вы увидите что-то вроде -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. Подробнее о правах доступа к файлам можете узнать из нашей статьи.
Вывод
В этом руководстве мы объяснили права доступа Linux и как использовать umask команду для установки битов разрешений для вновь создаваемых файлов или каталогов.
Для получения дополнительной информации введите man umask в своем терминале.
Задача
Допустим, мы не хотим, чтобы для вновь создаваемых файлов участники их группы имели право на запись. То есть нам надо аннулировать это право w для группы. Для этого надо изменить маску по умолчанию 0002 ( 000 000 000 010 ) на 0022 ( 000 000 010 010 ). Обратите внимание, что сейчас мы показываем полное значение маски в формате с лидирующими нулями (см. примечание по этому поводу выше).
Выше мы изменили маску на 022 ( 000 010 010 ) и создали новый файл с именем file3 .
Представление | Двоичное | Символическое |
---|---|---|
Полный режим | 110 110 110 | rw - rw - rw - |
Маска | 000 010 010 | 000 010 010 |
Итоговый режим | 110 100 100 | rw - r - - r - - |
Маска 000 010 010 аннулирует пятую (право на запись w для группы) и восьмую (право на запись w для остальных пользователей) позицию режима доступа к файлу. Именно поэтому rw- rw- rw- трансформируется в rw- r-- r-- (или, если в двоичном представлении: 110 110 110 трансформируется в 110 100 100 ). Сравните это с режимом доступа к файлу с именем file1 , который мы создали ранее, когда маска была равна 002 ( 000 000 010 ), и с режимом доступа к файлу с именем file2 , который мы создали, когда маска была равна 000 ( 000 000 000 ).
Что такое 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 значение в глобальном файле конфигурации, таком как /etc/profile файл, который будет влиять на всех пользователей, или в файлах конфигурации оболочки пользователя, таких как ~/.profile , ~/.bashrc или ~/.zshrc которые будут влиять только на пользователя. Пользовательские файлы имеют приоритет над глобальными файлами.
Прежде чем вносить изменения в umask значение, убедитесь, что новое значение не представляет потенциальной угрозы безопасности. Значения менее строгие, чем 022 следует использовать с большой осторожностью. Например, umask 000 означает, что любой пользователь будет иметь права на чтение, запись и выполнение для всех вновь создаваемых файлов.
Допустим, мы хотим установить более строгие разрешения для вновь создаваемых файлов и каталогов, чтобы другие не могли обращаться cd к каталогам и читать файлы. Разрешения, которые мы хотим, 750 для каталогов и 640 для файлов.
Чтобы вычислить umask значение, просто вычтите требуемые разрешения из разрешения по умолчанию:
Umask значение: 777-750 = 027
Желаемое umask значение, представленное в числовой записи 027 .
Чтобы навсегда установить новое значение для всей системы, откройте /etc/profile файл в текстовом редакторе:
и измените или добавьте следующую строку в начале файла:
Чтобы изменения вступили в силу, выполните следующую source команду или выйдите из системы и войдите в систему:
Для проверки новых настроек мы создадим один новый файл и каталог, используя mkdir и touch :
Если вы проверите разрешения с помощью ls команды, вы заметите, что новый файл имеет 640 и новый каталог 750 разрешений, как мы хотели:
Другой способ установить маску создания файла - использовать символическую запись. Например так umask u=rwx,g=rx,o= же, как umask 027 .
Читайте также:
- Вы уверены что хотите выключить компьютер macbook
- Почему в coreldraw не заливается объект
- Настраивает локальные компьютерные сети отвечает за работу офисной техники организации
- Гугл пиксель 3 xl обзор
- Из каких графических элементов строится векторное изображение пикселей красок графических примитивов