Вопрос Что такое «umask» и как он работает?


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

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

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

  1. Что такое umask? Объясните мне, как я был «Linux noob»,
  2. Как рассчитать с помощью umask?
  3. Каковы варианты использования umask?

160
2018-05-22 20:42


происхождения


app_mode 666 rw- rw- rw-  umask 644 --0 -00 -00  file_mode 022 --- -w- -w- - grabantot


ответы:


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

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

Если вы хотите, чтобы файлы не читались / записывались / выполнялись кем-либо, кроме владельца, вы должны использовать 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

Просмотр и изменение 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,


125
2018-05-22 20:59



Итак, что означают цифры в umask? Почему 777 означает, что группа и другие смогут писать на нее, в то время как 077 значит, они не могут? - HelloGoodbye
Кроме того, вы говорите, что если umask 000, разрешение файла будет 777, Итак, с маской по умолчанию 022, не должны разрешать файлы 755, т.е. соответствует -rwxr-xr-x, а не -rw-r--r--? - HelloGoodbye
Должен признать, это объяснение смутило меня больше, чем это мне помогло. - Connel Hooley
заметка что Ubuntu по умолчанию umask изменен на 0002 всего через месяц после публикации этого ответа. - Jeff Puckett
@HelloGoodbye, если umask 000 то разрешения не будут удалены. таких приложений, как touch а также nano создавать файлы по умолчанию 666 поэтому разрешение файла останется 666 но umask 022 удалит биты записи для группы и другие, поэтому 666 уменьшается до 644 ака -rw-r--r-- Рассматривать mkdir который по умолчанию создает режим 777 с umask 022 уменьшит разрешения на 755 - Jeff Puckett


В дополнение к хорошему обсуждению в принятом ответе, стоит добавить еще несколько замечаний о 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 (run apropos '^pam_' чтобы найти файлы для других). в страница руководства для pam_umask отмечается, что

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

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

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

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

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

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

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

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


35
2018-04-02 00:16



Похоже, ваша вторая часть чего-то не хватает? (USERGROUP_ENABLE?) +1 для обновленной информации - Lekensteyn
@Lekensteyn Как ни странно, установка в /etc/login.defs определенно USERGROUPS_ENAB yes после проверки. Синтаксис этого файла несколько необычен.
Я только что проверил файл и источник, и вы правы, это (и некоторые другие) настройки смутно названы «_ENAB». - Lekensteyn


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

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)

30
2018-04-06 08:27



Я не думаю, что это то, как вычисляются окончательные permissons, что, если значение unmask равно 077 как бы вы вычли 666-077 в таком случае ? - Sufiyan Ghori
Объяснение @SufiyanGhori Baron не является полным для разрешения файлов. В вашем случае и любых будущих вычислениях, для удобства запоминания, вы должны иметь в виду вычесть их таким образом: 6-0 6-7 6-7, если любой результат этих трех равен -1, тогда пусть это будет 0. Итак, мы имеют конечный результат 600 - Huy.PhamNhu
@ Huy.PhamNhu Это тоже не правильно. С базовым разрешением 666 и umask от 033 вы наверняка не получите 633. - maaartinus
Нет нет нет. Вы не можете использовать вычитание для вычисления umask (он работает с определенными значениями, но не со всеми). Вы должны думать о umask как «disable bits». См. Другие ответы Суфияна и Висбаки. - wisbucky


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

Прежде всего, «Маска» не означает «вычесть», в арифметическом смысле - нет заимствования или переноса, во-вторых, umask это маска; это не число, которое нужно вычесть.

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

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

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

umask 077

(unmask значение в двоичном, 000 111 111)

То, что этот unmask будет делать, это отключить любой из первых шести младших бит (младших значащих разрядов), если они 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

24
2018-06-05 14:09



это должен быть ответ! - Abdelouahab
@SufiyanGhori Итак, если umask 177 (001 111 111), он отключит первые 7 младших значащих бит, если они 1 - Kasun Siyambalapitiya
это правильно @ KasunSiyambalapitiya - Sufiyan Ghori


Основная концепция:

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

Прежде всего, подумайте о том, что такое «маска». Маска что-то блокирует. Подумайте о маской ленте. В этом случае umask похож на маскировочную ленту, чтобы блокировать / отключать разрешения при создании нового файла или каталога.

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

  • Матовый бит 1 означает блокировать / отключать это разрешение (помещать маскирующую ленту поверх этого бита).
  • Матовый бит 0 разрешит разрешение пройти (нет маскировочной ленты над этим битом).

Таким образом, octal 022 (000 010 010) mask означает отключить 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 вычисляются через побитовое И унарного дополнения аргумента, используя побитовое NOT" означает, вот некоторые логические таблицы, которые могут помочь продемонстрировать. Помните, бит маски 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)


9
2018-04-03 22:30