Эта статья требует дополнительных ссылок для проверки . ( март 2017 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
Пример umask команды | |
Начальная версия | 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 ] [ выражение маски ]
(Пункты в скобках необязательны.)
Отображение текущей маски [ править ]
Если 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 команде | Разрешения, которые маска запретит устанавливать во время создания файла |
---|---|
0 | может быть установлено любое разрешение (чтение, запись, выполнение) |
1 | установка разрешения на выполнение запрещена (чтение и запись) |
2 | установка разрешения на запись запрещена (чтение и выполнение) |
3 | установка прав на запись и выполнение запрещена (только чтение) |
4 | установка разрешения на чтение запрещена (запись и выполнение) |
5 | установка разрешений на чтение и выполнение запрещена (только запись) |
6 | установка разрешений на чтение и запись запрещена (только выполнение) |
7 | все разрешения запрещены для установки (нет разрешений) |
Установка маски с использованием символьной записи [ править ]
Когда umask
вызывается с использованием символьной нотации, он изменяет или устанавливает флаги, как указано в maskExpression, с синтаксисом:
Обратите внимание, что этот синтаксис не работает при использовании оболочки C из-за различного поведения ее встроенной umask
команды.
Несколько выражений maskExpressions разделяются запятыми.
Пробел завершает выражение (я) маски .
Эти разрешения применяются к различным классам пользователей:
Письмо | Класс | Описание |
---|---|---|
u | Пользователь | владелец |
g | группа | пользователи, которые являются членами группы файла |
o | другие | пользователи, которые не являются владельцами файла или участниками группы |
a | все | все три из вышеперечисленных, то же, что и ugo . (По умолчанию, если в выражении maskExpression не указаны буквы классов пользователей .) |
Оператор определяет , как должны быть отрегулированы режимы разрешения маски.
Оператор | Влияние на маску |
---|---|
+ | указанные разрешения включены, не указанные разрешения не изменяются. |
- | Указанные разрешения запрещены для включения, не указанные разрешения не изменяются. |
= | Указанные разрешения включены, не указанные разрешения запрещены. |
В разрешительный символы указывают , какой файл разрешения настройки должны быть разрешены или запрещены маской.
Условное обозначение | Имя | Описание |
---|---|---|
r | читать | г EAD файл или список содержимого каталогов |
w | написать | ж обряд к файлу или каталогу |
x | выполнять | е х ecute файл или рекурсию дерева каталогов |
X | специальное исполнение | См. Раздел « Символьные режимы» . |
s | setuid / gid | См. Права доступа к файлам . |
t | липкий | См. Права доступа к файлам. |
Например:
umask uw
Запрещать ж обрядового разрешения быть установлен для ˙U сер. Остальные флаги маски не изменились.
Пример множественных изменений:
umask uw, g = r, o + r
Это установит маску так, чтобы она:
- запретить ж обрядовое разрешения быть установлены для ˙U сер, оставляя остальные флаги без изменений;
- позволяют г разрешения EAD быть включено для г Роапа, запрещая ш обряде и е х ecute разрешения на г Роап;
- позволяют г разрешение Свинец должен быть включен для о Про ч ее, оставляя остальную часть о þé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 $ # маска запрещена Разрешение на запись для группы и других $ 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 - результирующий бит в режиме разрешений созданного файла)
п | q | р |
---|---|---|
Т | Т | F |
Т | F | Т |
F | Т | F |
F | F | F |
Как применяется маска [ править ]
Восьмеричная цифра в umask команде | Двоичный в маске | Отрицание маски | Логическое И с запросом "rwx" [5] |
---|---|---|---|
0 | 000 | 111 | rwx |
1 | 001 | 110 | rw- |
2 | 010 | 101 | rx |
3 | 011 | 100 | р-- |
4 | 100 | 011 | -wx |
5 | 101 | 010 | -w- |
6 | 110 | 001 | --Икс |
7 | 111 | 000 | --- |
Программно маска применяется ОС, сначала отрицая (дополняя) маску, а затем выполняя логическое И с запрошенным файловым режимом. В [вероятно] первом руководстве 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
.
См. Также [ править ]
В Wikibook Guide to Unix есть страница по темам: Команды |
- Разрешения файловой системы
Ссылки [ править ]
- ^ "Руководство по 7-му изданию UNIX, Bell Labs UNIX" . Руководство . Лаборатории AT&T . Проверено 14 мая 2019 .
- ^ Olczak, Анатоль (2019-06-09). «Korn Shell: Руководство по программированию для Unix и Linux» . Орейли . Эддисон-Уэсли Профессионал . Проверено 14 января 2013 .
- ^ "umask", The Single UNIX Specification, Version 2 (manual), The Open Group, 1997 , получено 14 января 2013 г.
- ^ Примечание. Некоторые языки программирования требуют наличия префикса перед восьмеричной системой записи, например цифры 0 или букв o или q. Команда
umask
не использует этот тип префиксной записи - используются только восьмеричные цифры. - ^ Примечание. Операционные системы обычно также отключают права на выполнение для вновь создаваемых файлов.
- ^ "Руководство UNIX 8th Edition, Bell Labs UNIX" . Руководство . Лаборатории AT&T . Проверено 14 января 2013 .
- ^ "umask (2)", Linux Programmer's Manual release 3.32 (manual), Linux man-pages project, 9 января 2008 , получено 01.01.2013.