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

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

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

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

  1. Что такое Умаск? Объясните мне, как будто я был "Linux Noob"
  2. Как рассчитать с Umask?
  3. Какие варианты использования для Umask?

6 ответов

Решение

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

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

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

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

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

[email protected]:~$ touch new-file-name
[email protected]:~$ ls -dl new-file-name
-rw-r--r-- 1 user user 0 Apr  1 19:15 new-file-name

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

[email protected]:~$ touch new-file-name
[email protected]:~$ 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

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

[email protected]:~$ touch new-file-name
[email protected]:~$ ls -dl new-file-name
-rw------- 1 user user 0 Apr  1 19:14 new-file-name

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

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

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

umask 007

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

chmod -R o-rwx ~

Если вы хотите, чтобы этот параметр umask применялся ко всем пользователям в системе, вы можете отредактировать файл профиля всей системы по адресу /etc/profile,

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

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

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

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

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

umask 077

(разобрать значение в двоичном виде, 000 111 111)

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

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

Умаск и Пам_Умаск

Маска по умолчанию теперь в /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

Новые папки в $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 в однопользовательской системе, такой как моя (uid и gid одинаковы):

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

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

Это довольно старый, но стоит упомянуть. Чтобы рассчитать на Umask, в отличие от разрешений файловой системы. Восьмеричные маски вычисляются с помощью побитового И унарного дополнения аргумента с использованием побитового НЕ. Восьмеричные обозначения следующие:

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)

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

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

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

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

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

Так что octal 022 (000 010 010) маска означает отключить group write а также others writeи разрешить все остальные разрешения для прохождения.

Расчет:

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

  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,

Бонусный расчет:

Если вы действительно хотите понять, что значит "восьмеричные маски вычисляются с помощью побитового И унарного дополнения аргумента с использованием побитового НЕ", вот несколько логических таблиц, которые могут помочь продемонстрировать. Помните, немного маски 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)

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

В мире нубов ошибочно думать, что существуют какие -то фиксированные значения разрешений по умолчанию (например, 664 и 775, иногда 755 и 644 и т. д.) для вновь создаваемых файлов и каталогов. Хотя эти числа могут быть значениями разрешений по умолчанию, но, как мы уже говорили ранее, они не являются фиксированными (восьмеричными) числами. Они могут быть разными для каждого процесса.

Итак, какова фактическая формула для расчета разрешений по умолчанию для каждого процесса? это 0777 & <mask of the process>для каталогов и 0666 & <mask of the process>для файлов (в обоих из которых &оператором является побитовое И, т. е. с точки зрения непрофессионала, он может отключать некоторые биты в 0777, но НЕ включает биты. Это не отрицание и не вычитание, это побитовое И).

Уведомление 1. man umaskне дает вторую формулу (для файлов), но не волнуйтесь, это правильно.

Примечание 2. Существует законная проблема безопасности с предоставлением файлам разрешений на выполнение по умолчанию. По этой причине системы обычно настроены на удаление разрешения на выполнение для файлов, например, 0666 во второй формуле выше. Однако для навигации по каталогам требуется разрешение на выполнение. То есть, если, например, /home/имеет rразрешение, вы можете lsего и увидеть его содержимое, но без xразрешение, вы не можете ls /home/$USER).

Примечание 3. Чтобы «установить» маску для процесса, используйте кнопку umask <proper-value>команда. Чтобы «получить» маску процесса, используйте umaskтолько команда без каких-либо аргументов, например, дает 0022 в моем случае, когда я запускаю ее в своем терминале.

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