umask

Стандартная утилита UNIX
umask
Оригинальный автор(ы)AT&T Bell Laboratories
Разработчик(и)Различные разработчики открытого и коммерческого ПО
Первоначальный выпуск1978 ; 46 лет назад (1978)
Операционная системаUnix и Unix-подобные
ПлатформаКроссплатформенный
ТипКоманда

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

Обзор

В Unix-подобных системах каждый файл имеет набор атрибутов, которые контролируют, кто может читать, писать или выполнять его. Когда программа создает файл, права доступа к файлу ограничиваются маской. Если в маске бит установлен на «1», то соответствующее начальное разрешение файла будет отключено . Бит, установленный на «0» в маске, означает, что соответствующее разрешение будет определяться программой и файловой системой . Другими словами, маска действует как фильтр последней стадии, который удаляет разрешения при создании файла; каждый бит, установленный на «1», удаляет соответствующее разрешение. Разрешения могут быть изменены позже пользователями и программами с помощью chmod.

Каждая программа (технически называемая процессом ) имеет свою собственную маску и может изменять свои настройки с помощью вызова функции. Когда процесс является оболочкой , маска устанавливается с помощью umaskкоманды. Когда оболочка или процесс запускает новый процесс, дочерний процесс наследует маску от своего родительского процесса. Как правило, маска влияет только на разрешения файлов во время создания новых файлов и не имеет эффекта, когда разрешения файлов изменяются в существующих файлах; однако команда chmodпроверит маску, когда параметры режима указаны с использованием символического режима и ссылка на класс пользователей не указана.

Маска хранится как группа битов. Она может быть представлена ​​в виде двоичной , восьмеричной или символической записи. umaskКоманда позволяет задать маску в виде восьмеричной (например, 0754) или символической (например, u=,g=w,o=wx) записи.

Команда umaskиспользуется в Unix-подобных операционных системах, а umaskфункция определена в спецификации POSIX.1 .

История

Маска, umaskкоманда и umaskфункция не были частью первоначальной реализации UNIX . Операционная система развивалась в среде относительно небольшого компьютерного центра, где безопасность не была проблемой. В конечном итоге она выросла до обслуживания сотен пользователей из разных организаций. Сначала разработчики сделали режимы создания ключевых файлов более строгими, особенно в случаях реальных нарушений безопасности, но это не было общим решением. Маска и команда umaskбыли введены около 1978 года в седьмом издании операционной системы [1] , чтобы она могла позволить сайтам, группам и отдельным лицам выбирать собственные значения по умолчанию. С тех пор маска была реализована в большинстве, если не во всех, современных реализациях Unix-подобных операционных систем.

Команда оболочки

В оболочке маска задается с помощью umaskкоманды. Синтаксис команды: [2]

umask [ -S ] [ maskExpression ]   

(Элементы в скобках являются необязательными.)

Отображение текущей маски

Если umaskкоманда вызвана без аргументов, она отобразит текущую маску. Вывод будет в восьмеричной или символической нотации, в зависимости от ОС. [3]

В большинстве оболочек , но не в оболочке C , -Sаргумент (ie umask -S) будет указывать umaskна отображение с использованием символической записи. Например:

$ umask # отобразить текущее значение (в восьмеричном формате) 0022
$ umask -S # отобразить текущее значение в символьном формате u = rwx,g = rx,o = rx     

Установка маски с использованием восьмеричной записи

Если umaskкоманда вызывается с восьмеричным аргументом, она напрямую установит биты маски для этого аргумента:

$ umask 007 # установить маску на 007
$ umask # отобразить маску (в восьмеричном формате) 0007 # 0 - специальные разрешения (setuid | setgid | sticky ) # 0 - часть маски (u)ser/owner # 0 - часть маски (g)roup # 7 - часть маски (o)others/not-in-group
$ umask -S # отобразить маску в символическом виде u = rwx,g = rwx,o =            

Если введено менее 4 цифр, предполагается наличие ведущих нулей. Если аргумент не является допустимым восьмеричным числом или содержит более 4 цифр, возникнет ошибка. [4] Три крайние правые восьмеричные цифры адресуют классы пользователей «владелец», «группа» и «другие» соответственно. Если присутствует четвертая цифра, крайняя левая (старшая) цифра адресует три дополнительных атрибута: бит setuid , бит setgid и бит sticky .

Восьмеричные коды

Восьмеричная цифра в
umaskкоманде
Разрешения, которые маска
запретит устанавливать во время создания файла
0можно установить любое разрешение (чтение, запись, выполнение)
1Установка разрешения на выполнение запрещена (чтение и запись)
2установка разрешения на запись запрещена (чтение и выполнение)
3установка разрешений на запись и выполнение запрещена (только чтение)
4установка разрешения на чтение запрещена (запись и выполнение)
5установка разрешений на чтение и выполнение запрещена (только запись)
6установка разрешений на чтение и запись запрещена (только выполнение)
7запрещено устанавливать все разрешения (нет разрешений)

Установка маски с помощью символической записи

При umaskвызове с использованием символической записи он изменяет или устанавливает флаги, указанные в maskExpression с синтаксисом:

[ user-class-letters ] оператор разрешения-символы

Обратите внимание, что этот синтаксис не работает при использовании оболочки C из-за другого поведения ее встроенной umaskкоманды.

Несколько выражений маски разделяются запятыми.

Пробел завершает maskExpression (s).

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

ПисьмоСортОписание
uпользовательвладелец
gгруппапользователи, входящие в группу файла
oдругиепользователи, не являющиеся владельцами файла или членами группы
aвсевсе три из вышеперечисленных, то же самое, что и ugo. (По умолчанию, если в maskExpression не указаны буквы класса пользователя .)

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

ОператорВоздействие на маску
+указанные разрешения включены, неуказанные разрешения не изменяются.
-Указанные разрешения запрещены к включению, неуказанные разрешения остаются без изменений.
=указанные разрешения включены, разрешения, которые не указаны, включены быть не могут.

Символы разрешений указывают, какие настройки разрешений файла должны быть разрешены или запрещены маской.

СимволИмяОписание
rчитатьпрочитать файл или просмотреть содержимое каталога
wписатьзапись в файл или каталог
xвыполнятьвыполнить файл или рекурсивно просмотреть дерево каталогов
Xспециальный выполнитьСм. Символические режимы .
ssetuid/gidСм. Права доступа к файлам .
tлипкийСм. Права доступа к файлам.

Например:

umask  u-w

Запретить установку разрешения на запись для пользователя . Остальные флаги в маске не изменяются.

Пример множественных изменений:

umask  u-w,g = r,o+r

Это установит маску так, что она:

  1. запретить установку разрешения на запись для пользователя , оставив остальные флаги без изменений;
  2. разрешить группе разрешение на чтение , запретив при этом разрешение на запись и выполнение для группы ;
  3. разрешить разрешение на чтение для других , оставив остальные флаги без изменений .

Примеры командной строки

Вот еще примеры использования umaskкоманды для изменения маски:

umaskкоманда выданаКак маска повлияет на права доступа к впоследствии создаваемым файлам/каталогам
umask a+rпозволяет включить разрешение на чтение для всех классов пользователей; остальные биты маски остаются неизменными
umask a-xзапрещает включение разрешения на выполнение для всех классов пользователей; остальные биты маски остаются неизменными
umask a+rwпозволяет включить разрешение на чтение или запись для всех классов пользователей; остальные биты маски остаются неизменными
umask +rwxпозволяет включить разрешение на чтение, запись или выполнение для всех классов пользователей. (Примечание: на некоторых платформах UNIX это восстановит маску до значения по умолчанию.)
umask u=rw,go=разрешить разрешение на чтение и запись для владельца, запретив при этом разрешение на выполнение для владельца; запретить включение любых разрешений для группы и других
umask u+w,go-wразрешить включение разрешения на запись для владельца; запретить включение разрешения на запись для группы и других;
umask -Sотобразить текущую маску в символической форме
umask 777запретить всем доступ к чтению, записи и выполнению (вероятно, бесполезно, поскольку даже владелец не может читать файлы, созданные с этой маской!)
umask 000разрешить чтение, запись и выполнение для всех (потенциальный риск безопасности)
umask 077разрешить чтение, запись и выполнение владельцу файла, но запретить чтение, запись и выполнение всем остальным
umask 113разрешить разрешение на чтение или запись для владельца и группы, но не разрешение на выполнение; разрешить разрешение на чтение для других, но не разрешение на запись или выполнение
umask 0755эквивалентно u-rwx,go=w. ( 0Указывает, что могут быть включены специальные режимы (setuid, setgid, sticky).)

Пример, показывающий эффект umask:

$ umask  -S # Показать (часто начальную) настройку u=rwx,g=rx,o=rx $ gcc hello.c # скомпилировать и создать исполняемый файл a.out $ ls -l a.out -rwxr-xr-x 1 me developer 6010 10 июля 17:10 a.out $ # umask запрещает разрешение на запись для Group и Others $ ls > listOfMyFiles # выходной файл, созданный перенаправлением, не пытается установить eXecute $ ls -l listOfMyFiles -rw-r--r-- 1 me developer 6010 10 июля 17:14 listOfMyFiles $ # umask запрещает разрешение на запись для Group и Others $ ############################################################## $ umask u-w # удалить разрешение пользователя на запись из umask $ umask -S u=rx,g=rx,o=rx $ ls > protectedListOfFiles $ ls -l protectedListOfFiles -r--r--r-- 1 me developer 6010 10 июля 17:15 protectedListOfFiles $ rm protectedListOfFiles переопределить r--r--r-- меня/разработчика для protectedListOfFiles? $ # предупреждение, что protectedListOfFiles недоступен для записи, ответ Y удалит файл $ ######################################################################################### $ umask g-r,or # удалено групповое чтение и прочее чтение из маски $ umask -S u=rx,g=x,o=x $ ls > secretListOfFiles $ ls -l secretListOfFiles -r-------- 1 me developer 6010 10 июля 17:16 secretListOfFiles                          

Эффект маски

Маска применяется всякий раз, когда создается файл. Если в маске бит установлен на «1», это означает, что соответствующее разрешение файла всегда будет отключено при последующем создании файлов. Бит, установленный на «0» в маске, означает, что соответствующее разрешение будет определено запрашивающим процессом и ОС при последующем создании файлов. Другими словами, маска действует как фильтр последней стадии, который удаляет разрешения при создании файла; каждый бит, установленный на «1», удаляет соответствующее разрешение для файла.

Как наносится маска

Как цифры в umaskкоманде отображаются в маске и в конечном итоге влияют на запрос программы на создание файла, например, с полными ( rwx) правами доступа
цифра в
 umaskкоманде 
 Двоичный в 
маске
 Отрицание 
маски
Логическое И
 с запросом "rwx" [5] 
0000111rwx
1001110rw-
2010101рх
3011100р--
4100011-wx
5101010-w-
6110001--х
7111000---

Программно маска применяется ОС, сначала отрицая (дополняя) маску, а затем выполняя логическое И с запрошенным файловым режимом. В [вероятно] первом руководстве UNIX, описывающем его функцию, [6] руководство говорит:

фактический режим... вновь созданного файла — это логическое и заданного режима и дополнение аргумента. Участвуют только младшие 9 бит маски (биты защиты). Другими словами, маска показывает [указывает] биты, которые должны быть отключены при создании файлов.

—  UNIX восьмое издание руководства, Bell Labs UNIX (руководство), AT&T Laboratories

Исключения

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

Маска обычно применяется только к функциям, которые создают новый файл; однако есть исключения. Например, при использовании версий UNIX и GNUchmod для установки разрешений файла, и используется символическая нотация, и не указан пользователь, то маска применяется к запрошенным разрешениям до того, как они будут применены к файлу. Например:

$ umask 0000 $ chmod +rwx имя файла $ ls -l имя файла -rwxrwxrwx имя файла $ umask 0022 $ chmod +rwx имя файла $ ls -l имя файла -rwxr-xr-x имя файла          

Процессы

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

Вариант крепления

В ядре Linux драйверы файловой системыfat , hfs, hpfs, ntfsи поддерживают опцию монтирования , которая управляет тем, как информация о диске сопоставляется с разрешениями. Это не то же самое, что маска для каждого процесса, описанная выше, хотя разрешения вычисляются аналогичным образом. Некоторые из этих драйверов файловой системы также поддерживают отдельные маски для файлов и каталогов, используя такие опции монтирования, как .udf umask fmask

Смотрите также

Ссылки

  1. ^ "UNIX 7th Edition Manual, Bell Labs UNIX". Руководство . AT&T Laboratories . Получено 2019-05-14 .
  2. ^ Олчак, Анатоль (2019-06-09). "Korn Shell: Руководство по программированию в Unix и Linux". Oreilly . Addison-Wesley Professional . Получено 2013-01-14 .
  3. ^ "umask", Единая спецификация UNIX, версия 2 (руководство), The Open Group, 1997 , получено 14 января 2013 г.
  4. ^ Примечание: Некоторые языки программирования требуют префиксный символ перед восьмеричной записью, такой как цифра 0 или буквы o или q. umaskКоманда не использует этот тип префиксной записи — используются только восьмеричные цифры.
  5. ^ Примечание: Операционные системы обычно также отменяют разрешения на выполнение вновь созданных файлов.
  6. ^ "UNIX 8th Edition Manual, Bell Labs UNIX". Руководство . AT&T Laboratories . Получено 2013-01-14 .
  7. ^ "umask(2)", Linux Programmer's Manual release 3.32 (руководство), проект Linux man-pages, 9 января 2008 г. , получено 2013-01-01
Retrieved from "https://en.wikipedia.org/w/index.php?title=Umask&oldid=1230375708"