Як обчислюється umask в Linux?


15

Тому я знаю, що umaskможна обмежувати пільгових користувачів, використовуючи цей формат umask ugo.

Я розумію, що read = 4, write = 2 і exec = 1. Однак, коли я набираю umask, він повертає 4 цифри, що є 0022або 0073. Я не розумію, як це працює зараз, оскільки є додаткова цифра. Що це за додаткова цифра і що це 0022означає?

Відповіді:


18

Припустимо, маска за замовчуванням 0666. umask0022 зробить нову маску 0644 (0666-0022 = 0644), що означає, що група та інші люди прочитали (не пишуть і не виконують) дозволи.

"Додаткова" цифра (перше число = 0) вказує на відсутність спеціальних режимів.

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

0 - це цифра, як 1 (для клейкого біта) або 6 (для SGID). Команду, таку як chmodможна викликати іншими методами, наприклад, chmod ug+rw mydirде ви могли б додати права читання та запису користувачеві та групі. Зауважте, що режим у цьому випадку (ug + rw) не починається з цифри, тому не трактується як восьмеричний, а скоріше символічний.

Дивіться en.wikipedia.org/wiki/Chmod#Symbolic_examples для символіки, а також www.lifeaftercoffee.com/2007/03/20/special-permission-modes-in-linux-and-unix/ для отримання додаткових відомостей про спеціальні режими.

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

Кредит на pinkfloydx33

Перша цифра маски стосується спеціальних дозволів, які не дуже чітко вписуються у власнику / групу / іншу модель. Коли для дозволу на файл надано чотири цифри, перша стосується цих спеціальних значень:

4000 = SUID
2000 = SGID
1000 = sticky bit

Біт SUID, короткий для ідентифікатора set-user, призводить до запуску виконуваної програми з ефективним ідентифікатором користувача (uid) власника - іншими словами, незалежно від того, хто його виконує, програма виконує з правами власника. Це часто спостерігається в програмах, які виконують речі, які вимагають привілеїв root, але призначені для виконання звичайними користувачами: passwdє одним з таких прикладів.

Біт SGID, короткий для ідентифікатора set-group, дуже схожий, але працює з ефективним ідентифікатором групи (gid) власника.

Клейкий шматочок трохи складніше, якщо ви хочете отримати додаткову інформацію про це, ви можете прочитати сторінку sticky.

Ці біти також можна використовувати з каталогами, але їх значення змінюються.

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

Кредит користувачу470379


1
Насправді ви не можете ввести ненульове значення, окрім останніх 3 цифр. За словами Posix: "Інтерпретація значень режиму, які задають біти режиму файлу, окрім бітів дозволу файлу, не визначена." Відповідно до man 2 umask(відповідний системний виклик) "використовуються лише біти дозволу файлу mask". У bash, umask 1000 створює помилку: "восьмеричне число поза діапазоном". То чому додаткові 0? Я думаю, це просто показати, що число знаходиться в восьмериці.
rici

цей пастбін не має жодного посилання на umask, тому я не бачу, наскільки це актуально. chmod дозволяє встановлювати перші три біти, але umask не дозволяє їх маскувати. (тобто ви могли писати chmod 6777 dropbox. І, до речі, теж chmod ug+s.)
rici

Так, ти маєш рацію, не знаю, що я думав.
Брайам

@Braiam: Ваша формула для розрахунку нової маски неправильна, це не 0666-0022так 0666 & ~0022.
cuonglm

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