Введение
Стандартная утилита UNIX
В вычислительной технике, umask — это команда, определяющая настройки маски, которая контролирует, как устанавливаются права доступа к вновь создаваемым файлам. Она также может влиять на то, как права доступа к файлам изменяются явно. Umask также является функцией, устанавливающей эту маску, или может относиться к самой маске, формально известной как маска создания прав доступа к файлам. Маска представляет собой набор битов, каждый из которых ограничивает установку соответствующего права доступа для вновь создаваемых файлов. Биты в маске можно изменить, выполнив команду umask.
Обзор
В системах, подобных Unix, каждый файл имеет набор атрибутов, которые определяют, кто может читать, записывать или выполнять его. Когда программа создает файл, разрешения файла ограничиваются маской. Если бит маски установлен в "1", то соответствующее исходное разрешение файла будет отключено. Бит, установленный в "0" в маске, означает, что соответствующее разрешение будет определяться программой и файловой системой. Другими словами, маска действует как финальный фильтр, отменяющий разрешения при создании файла; каждый бит, установленный в "1", отменяет соответствующее разрешение. Разрешения могут быть изменены позже пользователями и программами с помощью команды chmod. Каждая программа (технически называемая процессом) имеет свою собственную маску и может изменять ее настройки с помощью вызова функции. Когда процесс является оболочкой, маска устанавливается командой umask. Когда оболочка или процесс запускает новый процесс, дочерний процесс наследует маску от родительского процесса. Как правило, маска влияет только на разрешения файлов при создании новых файлов и не оказывает влияния при изменении разрешений существующих файлов; однако команда chmod будет проверять маску, когда опции режима указаны в символическом формате и не указана ссылка на класс пользователей. Маска хранится в виде группы битов и может быть представлена в двоичном, восьмеричном или символьном формате. Команда umask позволяет установить маску в восьмеричном (например, 077) или символьном (например, u=rwx,g=rx,o=) формате. Команда umask используется в операционных системах, подобных Unix, а функция umask определена в спецификации POSIX.1.
История
Маска, команда и функция не входили в первоначальную реализацию UNIX. Операционная система развивалась в относительно небольшой среде вычислительного центра, где вопросы безопасности не стояли остро. Впоследствии она стала обслуживать сотни пользователей из различных организаций. Первоначально разработчики ужесточили режимы создания ключевых файлов, особенно в случаях реальных нарушений безопасности, но это не было универсальным решением. Маска и команда были введены примерно в 1978 году, в седьмом издании операционной системы, чтобы предоставить возможность организациям, группам и отдельным пользователям выбирать собственные настройки по умолчанию. С тех пор маска была реализована в большинстве, если не во всех, современных реализациях Unix-подобных операционных систем.
Эффект маски
Маска применяется каждый раз при создании файла. Если бит маски установлен в "1", это означает, что соответствующее разрешение файла всегда будет запрещено при последующем создании файлов. Бит, установленный в "0" в маске, означает, что соответствующее разрешение будет определяться запрашивающим процессом и операционной системой при последующем создании файлов. Иными словами, маска действует как финальный фильтр, отнимающий разрешения при создании файла; каждый бит, установленный в "1", отнимает соответствующее разрешение у файла.
Как наносится маска
Как цифры в команде отражаются в маске и в конечном итоге влияют на запрос программы на создание файла, например, с полными правами доступа, где цифра в команде соответствует: Бинарное представление в маске Отрицание маски Логическое И с запросом "rwx" 0 000 111 rwx 1 001 110 rw 2 010 101 r x 3 011 100 r 4 100 011 wx 5 101 010 w 6 110 001 x 7 111 000
Программно операционная система применяет маску, сначала инвертируя (дополняя) её, а затем выполняя логическое И с запрошенным режимом файла. В, вероятно, первом руководстве UNIX, описывающем эту функцию, сказано:
Процессы
Каждый процесс имеет свою маску, которая применяется при создании нового файла. Когда оболочка или любой другой процесс порождает новый процесс, дочерний процесс наследует маску от родительского процесса. Если процесс является оболочкой, его маска изменяется командой. Любой процесс, запущенный из оболочки, также наследует маску этой оболочки.
Опция установки
В ядре Linux драйверы файловых систем fat, hfs, hpfs, ntfs и udf поддерживают опцию монтирования umask, которая определяет, как информация с диска преобразуется в права доступа. Это отличается от маски для каждого процесса, описанной выше, хотя вычисление прав доступа происходит схожим образом. Некоторые из этих драйверов файловых систем также поддерживают отдельные маски для файлов и каталогов, используя опции монтирования, такие как fmask.