Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

В вычислениях 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 ]  [ выражение маски ]

(Пункты в скобках необязательны.)

Отображение текущей маски [ править ]

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

В большинстве оболочек , но не в оболочке C , -Sаргумент (т.е. 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) групповая часть маски  # 7 - (o) та / не входящая в группу часть маски
$ umask -S # отображать маску символически u = rwx, g = rwx, o =

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

Восьмеричные коды [ править ]

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

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

[ буквы-класса-пользователя ] символы-разрешения оператора

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

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

Пробел завершает выражение (я) маски .

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

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

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

Например:

umask uw

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

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

umask uw, g = r, o + r

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

  1. запретить ж обрядовое разрешения быть установлены для ˙U сер, оставляя остальные флаги без изменений;
  2. позволяют г разрешения EAD быть включено для г Роапа, запрещая ш обряде и е х ecute разрешения на г Роап;
  3. позволяют г разрешение Свинец должен быть включен для о Про ч ее, оставляя остальную часть о þér флаги без изменений.

Примеры командной строки [ править ]

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

Пример, показывающий эффект 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 $ # маска запрещена Разрешение на запись для группы и других $ ls> listOfMyFiles # выходной файл, созданный перенаправлением, не пытается установить eXecute $ ls -l listOfMyFiles -rw-r-- r-- 1 me developer 6010 10 июля, 17:14 listOfMyFiles $ # маска запрещена Разрешение на запись для группы и других $########################################################################## ########## $ umask uw # удалить права записи пользователя из umask $ umask -S u = rx, g = rx, o = rx $ ls> protectedListOfFiles $ ls -l protectedListOfFiles -r - r- -r-- 1 меня разработчик 6010 10 июля 17:15 protectedListOfFiles $ rm protectedListOfFiles переопределяет r - r - r-- me / developer для protectedListOfFiles? $ # предупреждение о том, что protectedListOfFiles не доступен для записи, ответ Y удалит файл $ ################################ ########################################################################## # $ umask gr или # удалено групповое чтение и другое чтение из маски $ umask -S u = rx, g = x, o = x $ ls> secretListOfFiles $ ls -l secretListOfFiles -r -------- 1 me developer 6010 Jul 10 17 : 16 secretListOfFiles

Эффект маски [ править ]

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

Таблица истинности [ править ]

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

Как применяется маска [ править ]

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

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

-  UNIX Eighth Edition Manual, Bell Labs UNIX (руководство), AT&T Laboratories

В логической логике применение маски может быть представлено как:C: (P&(~Q))

Это говорит о том, что режим разрешений для файла (C) является результатом логической операции И между отрицанием маски (Q) и настройкой режима разрешения, запрошенного процессом (P).

Исключения [ править ]

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

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

$ umask  0000 $ chmod + rwx filename $ ls -l filename -rwxrwxrwx filename $ umask  0022 $ chmod + rwx filename $ ls -l filename -rwxr-xr-x filename

Процессы [ править ]

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

Вариант крепления [ править ]

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

См. Также [ править ]

  • Разрешения файловой системы

Ссылки [ править ]

  1. ^ "Руководство по 7-му изданию UNIX, Bell Labs UNIX" . Руководство . Лаборатории AT&T . Проверено 14 мая 2019 .
  2. ^ Olczak, Анатоль (2019-06-09). «Korn Shell: Руководство по программированию для Unix и Linux» . Орейли . Эддисон-Уэсли Профессионал . Проверено 14 января 2013 .
  3. ^ "umask", The Single UNIX Specification, Version 2 (manual), The Open Group, 1997 , получено 14 января 2013 г.
  4. ^ Примечание. Некоторые языки программирования требуют наличия префикса перед восьмеричной системой записи, например цифры 0 или букв o или q. Командаumaskне использует этот тип префиксной записи - используются только восьмеричные цифры.
  5. ^ Примечание. Операционные системы обычно также отключают права на выполнение для вновь создаваемых файлов.
  6. ^ "Руководство UNIX 8th Edition, Bell Labs UNIX" . Руководство . Лаборатории AT&T . Проверено 14 января 2013 .
  7. ^ "umask (2)", Linux Programmer's Manual release 3.32 (manual), Linux man-pages project, 9 января 2008 , получено 01.01.2013.