Що таке "umask" і як він працює?


190

Я вважаю, що umask - це те, що контролює дозволи файлів , але не цілком його розумію.

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

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

  1. Що таке саме umask? Поясніть мені, що я "Linux noob"
  2. Як обчислити umask?
  3. Які є випадки використання для umask?

app_mode 666 rw- rw- rw- umask 644 --0 -00 -00 file_mode 022 --- -w- -w-
грабантот

Відповіді:


143

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

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

Якщо ви хочете, щоб файли не читав / записував / не виконував хтось, крім власника, вам слід скористатися umask, як 077щоб вимкнути ці дозволи для групи та інших.

На противагу цьому, умаска 000зроблять новостворені каталоги читабельними, доступними для запису та доступними для всіх (дозволи будуть 777). Такий умаск є дуже небезпечним, і ви ніколи не повинні встановлювати його 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

Починаючи з 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

Вам потрібно повторно увійти, щоб ця зміна умака набула ~/.profileчинності. Далі вам потрібно змінити наявні дозволи файлів у вашому домашньому каталозі, видаливши біт для читання, запису та виконання для всього світу. Відкрийте термінал і виконайте:

chmod -R o-rwx ~

Якщо ви хочете, щоб цей параметр umask застосовано до всіх користувачів системи, ви можете відредагувати загальносистемний файл профілю за адресою /etc/profile.


3
Отже, що означають цифри умаска? Чому це 777означає, що група та інші зможуть написати їй, а 077значить, вони не можуть?
HelloGoodbye

3
Крім того, ви кажете, що якщо umask є 000, дозвіл на файл буде 777. Отже, маска за замовчуванням 022не повинна бути дозволом на файл 755, тобто відповідним -rwxr-xr-x, ні -rw-r--r--?
HelloGoodbye

12
Потрібно визнати, це пояснення мене більше збентежило, ніж мені допомогло.
Коннел Гулі

8
зауважте, що umask за замовчуванням Ubuntu змінився на 0002 лише через місяць після опублікування цієї відповіді.
Джефф Пукетт

7
@HelloGoodbye, якщо umask 000відсутній, дозволи не будуть видалені. додатки , як touchі nanoстворювати файли з по замовчуванням , 666так що дозвіл файлу залишиться , 666але Umask з 022видалить біти записи для групи і всіх інших, так що 666отримує зводиться до 644аке -rw-r--r--Розгляне , mkdirякий по замовчуванням режим створення 777з UMASK з 022зменшать дозволу на755
Джеффу Пукетт

38

Окрім хорошого обговорення у прийнятій відповіді, варто додати ще декілька пунктів про 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_'щоб знайти керівництво для інших). У сторінках керівництва для pam_umaskвідзначаються , що

pam_umask - це модуль PAM для встановлення маски створення файлового режиму поточного середовища. Umask впливає на стандартні дозволи, призначені новоствореним файлам.

Примітка про umask за замовчуванням

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

У той час як umask за замовчуванням на Ubuntu - 022, це не вся історія, оскільки є налаштування, /etc/login.defsяке дозволяє umask бути 002 для не-root користувачів, якщо умова виконана (див. Уривок нижче). При звичайній установці /etc/login.defsмістить налаштування USERGROUPS_ENAB yes. Це те, що

Увімкнення встановлення бітів групи umask таким самим, як і біти власника (приклади: 022 -> 002, 077 -> 007) для некорінних користувачів, якщо uid такий, як gid, а ім'я користувача - те саме, що і основне назва групи.

Отже, чому ви бачите наступне, statколи створюється нова папка mkdirв для однієї користувацької системи, наприклад, моя (uid та gid однакові):

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

Для отримання додаткової інформації дивіться man pam_umaskта веб- сторінки Ubuntu в Інтернеті .


Схоже, у вашій другій частині щось не вистачає? (USERGROUP_ENABLE?) +1 для оновленої інформації
Lekensteyn

2
@Lekensteyn Як не дивно, налаштування /etc/login.defs, безумовно, USERGROUPS_ENAB yesпісля перевірки. Синтаксис цього файлу дещо незвичний.

Я щойно перевірив файл та джерело, і ви маєте рацію, ці (та деякі інші) налаштування в заплутаному порядку називаються "_ENAB".
Лекенштейн

33

Це досить старе, але це варто згадати. Для обчислення для umask, на відміну від дозволів файлової системи. Вісімкові умаски обчислюються за допомогою побітового AND одинарного доповнення аргументу за допомогою бітового НЕ. Восьмі позначення наступні:

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)

3
Я не думаю, що так обчислюються кінцеві дозволи, а якби розім’яти значення, 077як би ви відняли 666-077в цьому випадку?
Суфіян Горі

5
Пояснення @SufiyanGhori Барона не є повним для дозволу файлів. У вашому випадку та будь-якому майбутньому обчисленні для легкого запам’ятовування слід пам’ятати, що їх відняти так: 6-0 6-7 6-7, якщо будь-який результат з цих трьох дорівнює -1, нехай це буде 0. Тож ми мають остаточний результат 600
Хуй.Фамху

1
@ Huy.PhamNhu Це теж неправильно. З базовим дозволом 666 та umask 033 ви точно не отримаєте 633.
maaartinus

7
Ні-ні-ні. Не можна використовувати віднімання для обчислення umask (він працює з певними значеннями, але не з усіма). Ви повинні думати про umask як "відключити біти". Дивіться інші відповіді Суфіяна та Вісбукі.
wisbucky

33

Інші, хто відповів, дуже добре пояснили поняття умакінгу і чому це потрібно. Дозвольте додати два центи і навести математичний приклад того, як насправді розраховуються дозволи.

По-перше, "маска" не означає "віднімання", в арифметичному сенсі - немає позики чи залучення, по-друге, umaskце маска; це не число, яке слід відняти.

По-третє, маска вимикає дозвольні біти. Якщо вони вже вимкнено, umaskдозвіл не змінює,

Наприклад, припустимо, що вам потрібно видалити 077з системи за замовчуванням файли, які є, 666і каталоги, які є 777.

Команда, яку ви будете використовувати,

umask 077

(значення маскування у двійковій формі 000 111 111)

Ця маска зробить це, що вона вимкне будь-який з перших шести LSB (найменш значущих бітів), якщо вони є, 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

7
це повинна бути відповідь!
Абделуааб

@SufiyanGhori Отож, якщо umask 177(001 111 111), він вимкне перші 7 найменш значущих бітів, якщо вони є1
Kasun Siyambalapitiya

це правильно @KasunSiyambalapitiya
Горі

1
так це формулаresult = file permission & (!umask)
Ерік Ходгінс

1
@EricHodgins: Так, саме так.
Аміт Найду

14

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

Якщо ви схожі на більшість людей і не розумієте, що чорт "восьмеричні умаски обчислюються за допомогою побітового значення І одинарного доповнення аргументу за допомогою бітового НЕ" означає, ось моє просте пояснення:

Перш за все, подумайте, що таке "маска". Маска щось блокує. Подумайте про маскування стрічки. У цьому випадку umask - це як маскувальна стрічка для блокування / відключення дозволів під час створення нового файлу чи dir.

Дозволу за замовчуванням під час створення нового dir є 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 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)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.