Что такое “umask” и как он работает?

Я полагаю, что umask - что-то, что управляет полномочиями файла, но не полностью понимайте это.

После выполнения umask 0644 в терминале я не могу считать файлы, которые я создаю с текстовым редактором командной строки nano. Я заметил, что полномочия того файла установлены на 0022 вместо значения по умолчанию 0755.

Как umask работает? Я думал, что мог просто удалить каждую цифру в umask от 0777, 7 - 6 = 1 и 7 - 4 = 3, таким образом, я ожидаю полномочия быть 0133, но по-видимому, дело обстоит не так.

  1. Что такое umask точно? Объясните это мне как, я был "новичком Linux"
  2. Как я вычисляю с umask?
  3. Что такое варианты использования для umask?
216
задан 13 April 2017 в 05:23

5 ответов

umask действует как ряд полномочий, которые приложения не могут установить на файлах. Это - маска создания режима файла для процессов и не может быть установлено для каталогов сама. Большинство приложений не создало бы файлы с, выполняют набор полномочий, таким образом, у них было бы значение по умолчанию 666, который затем изменяется umask.

Поскольку Вы установили umask для удаления битов чтения-записи для владельца и битов чтения для других, значение по умолчанию такой как 777 в приложениях привел бы к файлу полномочиям тому, чтобы быть 133. Это означало бы, что Вы (и другие) могли выполнить файл, и другие смогут записать в него.

Если Вы хотите к make-файлам не, читаются/пишутся/выполняются любым, но владельцем, необходимо использовать umask как 077 выключить те полномочия для группы и других.

Напротив, umask 000 сделает недавно созданные каталоги читаемыми, перезаписываемыми, и передаваемый по наследству для всех (полномочия будут 777). Такой umask очень небезопасен, и Вы никогда не должны устанавливать umask на 000.

Значение по умолчанию umask на Ubuntu было 022 что означает, что недавно созданные файлы читаемы всеми, но только перезаписываемы владельцем:

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-r--r-- 1 user user 0 Apr  1 19:15 new-file-name

При запуске в Ubuntu, Сновещательной (11.10), значение по умолчанию umask было ослаблено к 002, который разворачивает доступ для записи к группе владельца:

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-rw-r-- 1 user user 0 Apr  1 19:15 new-file-name

Просмотр и изменение umask

Для просмотра текущей установки umask откройте терминал и выполните команду:

umask

Для изменения umask настроек текущей оболочки к чему-то еще скажите 077, работайте:

umask 077

Чтобы протестировать, работает ли эта установка или нет, можно создать новый файл (полномочия файла существующего файла не будут затронуты), и покажите информацию о файле, работайте:

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw------- 1 user user 0 Apr  1 19:14 new-file-name

Установка umask наследована процессами, запущенными с той же оболочки. Например, запустите текстовый редактор GEdit путем выполнения gedit в терминале и сохранили файл с помощью gedit. Вы заметите, что недавно созданный файл затронут тем же umask, устанавливающим как в терминале.

Вариант использования: многопользовательская система

Если Вы находитесь в системе, это совместно используется многочисленными пользователями, желательно, чтобы другие не могли считать файлы в Вашем корневом каталоге. Для этого umask очень полезен.Править ~/.profile и добавьте новую строку с:

umask 007

Необходимо повторно войти в систему для этого изменения umask в ~/.profile вступить в силу. Затем, необходимо изменить существующие полномочия файла файлов в корневом каталоге путем удаления чтения, записать и выполнить бит для мира. Откройте терминал и выполнитесь:

chmod -R o-rwx ~

Если Вы хотите этот umask, устанавливающий, применяются ко всем пользователям в системе, Вы могли отредактировать файл профиля в масштабе всей системы в /etc/profile.

145
ответ дан 22 November 2019 в 22:46

В дополнение к хорошему обсуждению в принятом ответе стоит добавить еще некоторые точки о umask, со ссылкой на то, как этим управляют в 12,04 и вперед.

Umask и pam_umask

Значение по умолчанию umask находится теперь в /etc/login.defs а не в /etc/profile, как официальное примечание в /etc/profile чтения:

# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.

Pam_umask кратко объяснен ниже, и нужно сказать, что файл по умолчанию для пользователя для размещения его пользовательского начинающегося umask тих ~/.profile.

Pam_umask один из многих важных модулей PAM, которые крайне важны для операции Ubuntu (выполненный apropos '^pam_' найти страницы справочника для других). В странице справочника для pam_umask это отмечено это

pam_umask является модулем PAM для установки маски создания режима файла текущей среды. umask влияет на полномочия по умолчанию, присвоенные недавно созданным файлам.

Примечание по значению по умолчанию umask

Новые папки в $HOME может быть создан mkdir со значением по умолчанию 775 полномочий и файлы, созданные с touch со значением по умолчанию 664 полномочий, даже когда значение по умолчанию umask равняется 022. Это кажется, сначала, противоречащим, и стоит объяснить.

В то время как значение по умолчанию umask 022 на Ubuntu, это не целая история, поскольку существует установка в /etc/login.defs это позволяет umask быть 002 для некорневых пользователей, если условие соблюдают (см. выборку ниже). На нормальной установке, /etc/login.defs содержит установку USERGROUPS_ENAB yes. Это что

Позволяет установить umask битов группы для совпадения с битами владельца (примеры: 022-> 002, 077-> 007) для некорневых пользователей, если uid совпадает с ценурозом, и имя пользователя совпадает с именем основной группы.

Следовательно, почему Вы видите следующее с stat когда новая папка создается с mkdir в системе отдельного пользователя такой как мой (uid и ценуроз то же):

Access: (0775/drwxrwxr-x)  Uid: ( 1000/username)   Gid: ( 1000/username)

Для получения дополнительной информации посмотрите man pam_umask и страницы справочника Ubuntu онлайн.

38
ответ дан 22 November 2019 в 22:46

Это довольно старо, но это стоит упомянуть. Вычислять для umask, в отличие от полномочий файловой системы. Восьмеричные umasks вычисляются через поразрядное И унарного дополнения аргумента с помощью битового "НЕ". Восьмеричные нотации следующие:

Octal value : Permission
0 : read, write and execute
1 : read and write
2 : read and execute
3 : read only
4 : write and execute
5 : write only
6 : execute only
7 : no permissions

Затем можно вычислить для установки umask надлежащих предварительных миссий такой:

$ umask 077
$ mkdir dir1
$ touch file
$ ls -ld dir1 file

drwx------ 2 amrx amrx 4096 2011-03-04 02:05 dir1
-rw------- 1 amrx amrx    0 2011-03-04 02:05 file

Вычисление заключительного разрешения для файлов

Можно просто вычесть umask из основных полномочий определить заключительное разрешение для файла следующим образом:

666 – 022 = 644
  • Полномочия основы файла: 666
  • значение umask: 022
  • вычтите для получения полномочий нового файла (666-022) : 644 (rw-r–r–)

Вычисление заключительного разрешения для каталогов

Можно просто вычесть umask из основных полномочий определить заключительное разрешение для каталога следующим образом:

777 – 022 = 755
  • Полномочия основы каталога: 777
  • значение umask: 022
  • Вычтите для получения полномочий нового каталога (777-022) : 755 (rwxr-xr-x)
34
ответ дан 22 November 2019 в 22:46

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

В первую очередь, “Маска” не означает, “вычитают”, в арифметическом смысле – существует, не одалживают или несут включенный, во-вторых, umask маска; это не число, которое будет вычтено.

В-третьих, маска выключает биты полномочий. Если они уже выключены, umask не вносит изменения в разрешение,

Например, предположите, что необходимо размаскировать 077 от системных значений по умолчанию для файлов, который является 666 и каталоги, который является 777.

Команда, которую Вы будете использовать,

umask 077

(размаскируйте значение в двоичном файле, 000 111 111)

То, что это размаскировало, сделает, это, выключит любой из первых шести LSBs (младшие значащие биты), если они будут 1 и не внесет изменения, если какой-либо из них будет уже выключен.

Вот то, как заключительное разрешение вычисляется:

file permisison 666 = 110 110 110 
unmask value    077 = 000 111 111
will result in, 600 = 110 000 000

Наблюдайте как оба 110 значения изменились на 000.

Точно так же

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000
34
ответ дан 22 November 2019 в 22:46

Фундаментальное понятие:

Если Вы похожи на большинство людей и не понимаете, какого черта "восьмеричные umasks вычисляются через поразрядное, И унарного дополнения аргумента с помощью битового "НЕ"" означает, вот мое простое объяснение:

В первую очередь, думайте о том, какова "маска". Маска блокирует что-то. Думайте о клейкой ленте. В этом случае umask похож на клейкую ленту для блокирования/запрещения полномочий при создании нового файла или dir.

Полномочия по умолчанию при создании нового dir octal 777 (111 111 111), и новый файл octal 666 (110 110 110). Мы устанавливаем umask для блокирования/запрещения определенных полномочий.

  • Бит маски 1 средства блокировать/запрещать то разрешение (помещенная клейкая лента по тому биту).
  • Бит маски 0 позволит разрешению пройти (никакая клейкая лента по тому биту).

Так octal 022 (000 010 010) маска означает отключать group write и others write, и позвольте всем другим полномочиям пройти.

Вычисление:

Вот вычисление в качестве примера для нового файла (значение по умолчанию 666 разрешений) с 022 umask:

  perm mask result
----------------------------
u 1    0    1 (pass through)
  1    0    1 (pass through)
  0    0    0 (pass through)
----------------------------
g 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)
----------------------------
o 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)

Таким образом, это - то, как Вы заканчиваете с результатом 644 при создании нового файла.

Более легкий путь:

Но если обратные вычисления маски просто смущают Вас, существует более легкий способ использовать символьную umask нотацию. При использовании этого метода затем Вы просто указываете биты передачи вместо битов маски.

  • umask u=rwx,g=rx,o=rx средства позволяют, проходят для user rwx, group rx, other rx. Который подразумевает, отключают group w, others w. Если Вы работаете, эта команда затем проверяют umask, Вы доберетесь 022.
  • umask u=rwx,g=,o= средства позволяют, проходят для user rwx. Который подразумевает, отключают весь доступ для group и others. Если Вы работаете, эта команда затем проверяют umask, Вы доберетесь 077.

Бонусное вычисление:

Если Вы на самом деле хотите понять то, что "восьмеричные umasks вычисляются через поразрядное, И унарного дополнения аргумента с помощью битового "НЕ"" означает, вот некоторые логические таблицы, которые могут помочь продемонстрировать. Помните, маска укусила 1 средства отключают, 0 средства проходят.

perm mask result
----------------
0    1    0     (mask 1 always disables)
1    1    0     (mask 1 always disables)
0    0    0     (mask 0 passes through)
1    0    1     (mask 0 passes through)

Если Вы делаете таблицу с NOT(mask), теперь это - просто простое AND логическая таблица!

perm NOT(mask) result
---------------------
0    0         0     (mask 1 always disables)
1    0         0     (mask 1 always disables)
0    1         0     (mask 0 passes through)
1    1         1     (mask 0 passes through)

Таким образом, формула для него: result = perm AND (NOT mask)

16
ответ дан 22 November 2019 в 22:46

Другие вопросы по тегам:

Похожие вопросы: