This article needs additional citations for verification. (March 2017) |
Оригинальный автор(ы) | AT&T Bell Laboratories |
---|---|
Разработчик(и) | Различные разработчики открытого и коммерческого ПО |
Первоначальный выпуск | 1978 (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 с синтаксисом:
Обратите внимание, что этот синтаксис не работает при использовании оболочки C из-за другого поведения ее встроенной umask
команды.
Несколько выражений маски разделяются запятыми.
Пробел завершает maskExpression (s).
Разрешения применяются к различным классам пользователей :
Письмо | Сорт | Описание |
---|---|---|
u | пользователь | владелец |
g | группа | пользователи, входящие в группу файла |
o | другие | пользователи, не являющиеся владельцами файла или членами группы |
a | все | все три из вышеперечисленных, то же самое, что и ugo . (По умолчанию, если в maskExpression не указаны буквы класса пользователя .) |
Оператор указывает , как следует настраивать режимы разрешений маски.
Оператор | Воздействие на маску |
---|---|
+ | указанные разрешения включены, неуказанные разрешения не изменяются. |
- | Указанные разрешения запрещены к включению, неуказанные разрешения остаются без изменений. |
= | указанные разрешения включены, разрешения, которые не указаны, включены быть не могут. |
Символы разрешений указывают, какие настройки разрешений файла должны быть разрешены или запрещены маской.
Символ | Имя | Описание |
---|---|---|
r | читать | прочитать файл или просмотреть содержимое каталога |
w | писать | запись в файл или каталог |
x | выполнять | выполнить файл или рекурсивно просмотреть дерево каталогов |
X | специальный выполнить | См. Символические режимы . |
s | setuid/gid | См. Права доступа к файлам . |
t | липкий | См. Права доступа к файлам. |
Например:
umask u-w
Запретить установку разрешения на запись для пользователя . Остальные флаги в маске не изменяются.
Пример множественных изменений:
umask u-w,g = r,o+r
Это установит маску так, что она:
Вот еще примеры использования 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" [5] |
---|---|---|---|
0 | 000 | 111 | rwx |
1 | 001 | 110 | rw- |
2 | 010 | 101 | рх |
3 | 011 | 100 | р-- |
4 | 100 | 011 | -wx |
5 | 101 | 010 | -w- |
6 | 110 | 001 | --х |
7 | 111 | 000 | --- |
Программно маска применяется ОС, сначала отрицая (дополняя) маску, а затем выполняя логическое И с запрошенным файловым режимом. В [вероятно] первом руководстве 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
umask
Команда не использует этот тип префиксной записи — используются только восьмеричные цифры.