Что такое "umask" и как оно работает?
Я считаю, что umask - это то, что контролирует права доступа к файлам, но не до конца понимаю.
После запуска umask 0644
в терминале я не могу прочитать файлы, созданные в текстовом редакторе командной строки nano
, Я заметил, что права доступа к этому файлу установлены на 0022
вместо по умолчанию 0755
,
Как работает Umask? Я думал, что могу просто удалить каждую цифру в маске из 0777
, 7 - 6 = 1
а также 7 - 4 = 3
поэтому я ожидаю, что разрешения будут 0133
, но, видимо, это не тот случай.
- Что такое Умаск? Объясните мне, как будто я был "Linux Noob"
- Как рассчитать с Umask?
- Какие варианты использования для Umask?
7 ответов
Umask действует как набор разрешений, которые приложения не могут устанавливать для файлов. Это маска создания режима файла для процессов и не может быть установлена для самих каталогов. Большинство приложений не создают файлы с установленными разрешениями на выполнение, поэтому по умолчанию они имеют значение 666
, который затем модифицируется Umask.
Поскольку вы установили umask для удаления битов чтения / записи для владельца и битов чтения для других, по умолчанию, например, 777
в приложениях приведет к разрешению файла 133
, Это будет означать, что вы (и другие) можете выполнить файл, а другие смогут записать в него.
Если вы хотите, чтобы файлы не были доступны для чтения / записи / выполнения кем-либо, кроме владельца, вы должны использовать umask вроде 077
отключить эти разрешения для группы и других.
Напротив, маска 000
сделает вновь созданные каталоги доступными для чтения, записи и просмотра для всех (разрешения будут 777
). Такой umask крайне небезопасен, и вы никогда не должны устанавливать umask в 000
,
Маска по умолчанию в 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 Oneiric (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, что и в терминале.
Вариант использования: многопользовательская система
Если вы работаете в системе, которая используется несколькими пользователями, желательно, чтобы другие не могли читать файлы в вашем домашнем каталоге. Для этого умаск очень полезен. редактировать ~/.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)
Самый короткий ответ, который помог мне понять, как работает umask:
Биты маски включения определяют, какие биты разрешений следует отключить.
Пример:
umask 007
- все биты пользователя и группы отключены , поэтому они ничего не делают .
- все мировые биты включены , поэтому они отключают все биты разрешений
Итак, эффект umask007
о разрешении файла644
является
- (): оставить пользовательские биты такими, какие они есть
-
0
(000b
): оставить групповые биты такими, какие они есть -
7
(111b
): отключить все биты мира
в результате разрешение640
.
Хорошо, иногда вопросу уже более 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 в моем случае, когда я запускаю ее в своем терминале.