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

160

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

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

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

  1. Что такое umask? Объясните это мне, как будто я был Linux noob.
  2. Как рассчитать с помощью umask?
  3. Каковы варианты использования umask?
задан Lekensteyn 22.05.2011 в 20:42
источник

5 ответов

126

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

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

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

В противоположность этому, 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

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

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 .

    
ответ дан ajmitch 22.05.2011 в 20:59
источник
35

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

pam_umask is a PAM module to set the file mode creation mask of the current environment. The umask affects the default permissions assigned to newly created files.

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

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

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

Enables setting of the umask group bits to be the same as owner bits (examples: 022 -> 002, 077 -> 007) for non-root users, if the uid is the same as gid, and username is the same as the primary group name.

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

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

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

    
ответ дан user76204 02.04.2013 в 00:16
30

Это довольно старый, но об этом стоит упомянуть. Вычислять для 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)
ответ дан amrx 06.04.2016 в 08:27
25

Другие ответили очень хорошо объяснили концепцию 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
    
ответ дан Sufiyan Ghori 05.06.2016 в 14:09
9

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

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

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

Разрешения по умолчанию при создании нового каталога - 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 вычисляются через побитовое И унарного дополнения аргумента с использованием побитового 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)

    
ответ дан wisbucky 03.04.2017 в 22:30

Ознакомьтесь с другими вопросами по меткам