Я считаю, что umask - это то, что контролирует права доступа к файлам , но не до конца понимаю.
После запуска umask 0644
в терминале я не могу читать файлы, созданные в текстовом редакторе командной строки nano
. Я заметил, что права доступа к этому файлу установлены 0022
вместо значений по умолчанию 0755
.
Как работает Umask? Я думал, что смогу просто удалить каждую цифру в umask 0777
, 7 - 6 = 1
и 7 - 4 = 3
поэтому я ожидаю, что разрешения будут 0133
, но, очевидно, это не так.
- Что такое Умаск? Объясните мне, как будто я был "Linux Noob"
- Как рассчитать с Umask?
- Какие варианты использования для Umask?
permissions
umask
Lekensteyn
источник
источник
app_mode 666 rw- rw- rw-
umask 644 --0 -00 -00
file_mode 022 --- -w- -w-
Ответы:
Umask действует как набор разрешений, которые приложения не могут устанавливать для файлов. Это маска создания режима файла для процессов и не может быть установлена для самих каталогов. Большинство приложений не будут создавать файлы с установленными разрешениями на выполнение, поэтому они будут иметь значение по умолчанию
666
, которое затем будет изменено с помощью umask.Так как вы установили umask для удаления битов чтения / записи для владельца и битов чтения для других, по умолчанию, например,
777
в приложениях, будут предоставлены права доступа к файлу133
. Это будет означать, что вы (и другие) можете выполнить файл, а другие смогут записать в него.Если вы хотите, чтобы файлы не были доступны для чтения / записи / выполнения кем-либо, кроме владельца, вы должны использовать umask, например,
077
чтобы отключить эти разрешения для группы и других пользователей.Напротив, использование umask
000
сделает вновь созданные каталоги доступными для чтения, записи и просмотра для всех (разрешения будут777
). Такой umask крайне небезопасен, и вы никогда не должны устанавливать umask000
.По умолчанию umask в Ubuntu
022
означал, что вновь созданные файлы доступны для чтения всем, но только для записи владельцу:Начиная с Ubuntu Oneiric (11.10), umask по умолчанию был смягчен
002
, что расширяет доступ на запись для группы владельца:Просмотр и изменение umask
Чтобы просмотреть текущие настройки umask, откройте терминал и выполните команду:
Чтобы изменить настройку umask текущей оболочки на что-то другое, скажем, 077, выполните:
Чтобы проверить, работает ли этот параметр или нет, вы можете создать новый файл (права доступа к существующему файлу не будут затронуты) и показать информацию о файле, запустите:
Параметр umask наследуется процессами, запущенными из одной оболочки. Например, запустите текстовый редактор GEdit, выполнив
gedit
в терминале, и сохраните файл с помощью gedit. Вы заметите, что на вновь созданный файл влияет та же настройка umask, что и в терминале.Вариант использования: многопользовательская система
Если вы работаете в системе, которая используется несколькими пользователями, желательно, чтобы другие не могли читать файлы в вашем домашнем каталоге. Для этого умаск очень полезен. Отредактируйте
~/.profile
и добавьте новую строку с:Чтобы изменения
~/.profile
вступили в силу, необходимо повторно войти в систему . Затем вам нужно изменить существующие права доступа к файлам в вашем домашнем каталоге, удалив бит чтения, записи и выполнения для всего мира. Откройте терминал и выполните:Если вы хотите, чтобы этот параметр umask применялся ко всем пользователям в системе, вы можете отредактировать общесистемный файл профиля по адресу
/etc/profile
.источник
777
означает, что группа и другие смогут писать в нее, а077
значит - нет?000
, разрешение файла будет777
. Таким образом, с маской по умолчанию022
не должны ли права доступа к файлу755
, то есть соответствовать-rwxr-xr-x
, а не-rw-r--r--
?000
то никакие разрешения не будут удалены. приложения любятtouch
иnano
создают файлы по умолчанию,666
так что разрешение на файл останется,666
но umask022
удалит биты записи для группы и других, так что666
будет сокращено до644
aka.-rw-r--r--
Рассмотрим,mkdir
какой режим создания по умолчанию777
с umask of022
уменьшит разрешения для755
В дополнение к хорошему обсуждению в принятом ответе, стоит добавить еще несколько моментов, касающихся того
umask
, как это делается в 12.04 и далее.Умаск и Пам_Умаск
Значение umask по умолчанию теперь включено,
/etc/login.defs
а не включено/etc/profile
, как указано в официальном примечании/etc/profile
:Pam_umask
кратко поясняется ниже, и следует сказать, что файл по умолчанию для пользователя, в котором пользователь может разместить свою пользовательскую настройку umask, по-прежнему~/.profile
.Pam_umask
является одним из многих важных модулей PAM, которые имеют решающее значение в работе Ubuntu (запустите,apropos '^pam_'
чтобы найти man-страницы для других). В страницах руководства дляpam_umask
отмечаются , чтоПримечание по умолчанию Umask
Новые папки
$HOME
могут быть созданыmkdir
с разрешениями по умолчанию 775, а файлы -touch
с разрешениями 664 по умолчанию, даже если значение umask по умолчанию равно 022. Сначала это кажется противоречивым и заслуживающим объяснения.Хотя в Ubuntu по умолчанию используется значение umask 022, это еще не все, поскольку в нем есть параметр,
/etc/login.defs
который позволяет umask быть равным 002 для пользователей без полномочий root, если выполняется условие (см. Выдержку ниже). При обычной установке/etc/login.defs
содержит настройкиUSERGROUPS_ENAB yes
. Это чтоПоэтому вы видите следующее
stat
при создании новой папкиmkdir
в однопользовательской системе, такой как моя (uid и gid одинаковы):Для получения дополнительной информации смотрите
man pam_umask
и справочные страницы Ubuntu онлайн .источник
/etc/login.defs
это определенноUSERGROUPS_ENAB yes
после проверки. Синтаксис этого файла немного необычный.Это довольно старый, но стоит упомянуть. Чтобы рассчитать на Umask, в отличие от разрешений файловой системы. Восьмеричные маски вычисляются с помощью побитового И унарного дополнения аргумента с использованием побитового НЕ. Восьмеричные обозначения следующие:
Тогда вы можете рассчитать, чтобы установить правильные разрешения umask такие:
Расчет окончательного разрешения для файлов
Вы можете просто вычесть umask из базовых разрешений, чтобы определить окончательное разрешение для файла следующим образом:
666
022
(666-022)
:644 (rw-r–r–)
Расчет окончательного разрешения для каталогов
Вы можете просто вычесть umask из базовых разрешений, чтобы определить окончательное разрешение для каталога следующим образом:
777
022
(777-022)
:755 (rwxr-xr-x)
источник
077
вычитается666-077
в этом случае?Другие ответили, очень хорошо объяснили концепцию маскировки и почему это требуется. Позвольте мне добавить два цента и дать вам математический пример того, как фактически рассчитываются разрешения.
Во-первых, «Маска» не означает «вычитать» в арифметическом смысле - здесь нет заимствований или переносов, во-вторых,
umask
это маска; это не число, которое нужно вычесть.В-третьих, маска отключает разрешение битов. Если они уже выключены,
umask
разрешение не меняется,Например, предположим, что вы должны снять маску
077
с системных значений по умолчанию для файлов, которые есть,666
и каталогов, которые есть777
.Команда, которую вы будете использовать,
(разобрать значение в двоичном,
000 111 111
)Эта маска будет отключать любой из первых шести младших битов (младших разрядов), если они есть,
1
и не изменится, если какой-либо из них уже отключен.Вот как рассчитывается окончательное разрешение:
Посмотрите, как
110
изменились оба значения000
.По аналогии,
источник
umask 177
(001 111 111), он отключит первые 7 младших битов, если они есть1
result = file permission & (!umask)
Основная концепция:
Если вы похожи на большинство людей и не понимаете, что, черт возьми, восьмеричные маски вычисляются с помощью побитового И унарного дополнения аргумента с использованием побитового НЕ , вот мое простое объяснение:
Прежде всего, подумайте, что такое «маска». Маска что-то блокирует. Подумайте о липкой ленте. В этом случае 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:
Так вот, как вы получите результат 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
значит пройти.Если вы составляете таблицу с помощью
NOT(mask)
, теперь это просто простаяAND
логическая таблица!Итак, формула для этого:
result = perm AND (NOT mask)
источник