<Попередній | зміст | Наступна>
umask – встановити дозволи за замовчуванням
Команда умаск Команда контролює дозволи за замовчуванням, надані файлу під час його створення. Він використовує вісімкове позначення для вираження a маска бітів, які потрібно видалити з атрибутів режиму файлу. Давайте подивимося:
[me@linuxbox ~]$ rm -f foo.txt
[me@linuxbox ~]$ умаск
0002
[me@linuxbox ~]$ > foo.txt
[me@linuxbox ~]$ rm -f foo.txt
[me@linuxbox ~]$ умаск
0002
[me@linuxbox ~]$ > foo.txt
[me@linuxbox ~]$ ls -l foo.txt
-rw-rw-r-- 1 я я 0 2016-03-06 14:53 foo.txt
[me@linuxbox ~]$ ls -l foo.txt
-rw-rw-r-- 1 я я 0 2016-03-06 14:53 foo.txt
Спочатку ми видалили будь-яку стару копію foo.txt щоб переконатися, що ми починаємо нове. Далі ми запустили умаск команда без аргументу, щоб побачити поточне значення. Це відповіло значенням 0002 (значення 0022 є ще одним поширеним значенням за замовчуванням), яке є вісімковим представленням нашої маски. Далі ми створюємо новий екземпляр файлу foo.txt і дотримуватися його дозволів.
Ми бачимо, що і власник, і група отримують дозвіл на читання та запис, а всі інші отримують дозвіл лише на читання. Причина того, що світ не має дозволу на запис, полягає в цінності маски. Давайте повторимо наш приклад, цього разу встановлюючи маску самі:
[me@linuxbox ~]$ rm foo.txt [me@linuxbox ~]$ umask 0000 [me@linuxbox ~]$ > foo.txt [me@linuxbox ~]$ ls -l foo.txt
-rw-rw-rw- 1 я я 0 2016-03-06 14:58 foo.txt
[me@linuxbox ~]$ rm foo.txt [me@linuxbox ~]$ umask 0000 [me@linuxbox ~]$ > foo.txt [me@linuxbox ~]$ ls -l foo.txt
-rw-rw-rw- 1 я я 0 2016-03-06 14:58 foo.txt
Коли ми встановлюємо маску на 0000 (фактично вимкнувши його), ми бачимо, що файл тепер доступний для запису у всьому світі. Щоб зрозуміти, як це працює, ми повинні знову подивитися на вісімкові числа. Якщо ми візьмемо маску і розгорнумо її в двійковий файл, а потім порівняємо її з атрибутами, ми побачимо, що відбувається:
Режим оригінального файлу | --- рв- рв- рв- | |||
Маска | 000 | 000 | 000 | 010 |
Результат | --- | rw- | rw- | р-- |
На даний момент проігноруйте провідні нулі (ми дійдемо до них за хвилину) і зауважте, що там, де в нашій масці з’являється 1, атрибут було видалено - у цьому випадку, світ дозволу на запис. Ось що робить маска. Усюди, де в двійковому значенні маски з’являється 1, атрибут не встановлено. Якщо ми подивимося на значення маски 0022, ми бачимо, що він робить:
Режим оригінального файлу | --- рв- рв- рв- | |||
Маска | 000 | 000 | 010 | 010 |
Результат | --- | rw- | р-- | р-- |
Знову ж таки, якщо у двійковому значенні з’являється 1, відповідний атрибут не встановлено. Пограйте з деякими значеннями (спробуйте кілька сімок), щоб звикнути до того, як це працює. Коли ви закінчите, не забудьте прибрати:
[me@linuxbox ~]$ rm foo.txt; umask 0002
[me@linuxbox ~]$ rm foo.txt; umask 0002
У більшості випадків нам не доведеться змінювати маску; за замовчуванням, надане вашим дистрибутивом, буде добре. Однак у деяких ситуаціях високого рівня безпеки ми хочемо контролювати це.
Деякі спеціальні дозволи
Хоча ми зазвичай бачимо вісімкову маску дозволу, виражену як тризначне число, технічно правильніше виразити її чотирма цифрами. Чому? Тому що, окрім дозволу на читання, запис і виконання, існують інші, менш використовувані параметри дозволу.
Перший з них – це setuid біт (вісімкове число 4000). При застосуванні до виконуваного файлу він встановлює параметр ефективний ідентифікатор користувача від реального користувача (користувача, який фактично запускає програму) до власника програми. Найчастіше це надається кільком програмам, які належать суперкористувачу. Коли звичайний користувач запускає програму, яка є «се- туїдний корінь”, програма працює з дійсними привілеями суперкористувача. Це дозволяє програмі отримувати доступ до файлів і каталогів, доступ до яких звичайному користувачеві зазвичай заборонено. Очевидно, оскільки це викликає проблеми з безпекою, кількість програм setuid має бути зведена до абсолютного мінімуму.
Другим менш використовуваним параметром є біт setgid (вісімкове число 2000), яке, як і біт setuid, змінює ефективний ідентифікатор групи від реальний ідентифікатор групи від реального користувача до власника файлу. Якщо біт setgid встановлено в каталозі, новостворені файли в каталозі отримають групове право власності на каталог, а не групове право власності творця файлу. Це корисно для спільного каталогу, коли членам спільної групи потрібен доступ до всіх файлів у каталозі, незалежно від основної групи власника файлу.
Третій називається липкий біт (вісімкове число 1000). Це пережиток стародавнього Unix, де можна було позначити виконуваний файл як «незмінний». У файлах Linux ігнорує чіпкий біт, але якщо його застосувати до каталогу, він не дозволяє користувачам видаляти чи перейменовувати файли, якщо користувач не є власником каталогу, власником файлу чи суперкористувачем. Це часто використовується для контролю доступу до спільного каталогу, наприклад / Tmp.
Ось кілька прикладів використання CHMOD із символічним позначенням для встановлення цих спеціальних дозволів. Перше призначення setuid програмі:
chmod u+s більшість квитків вже розпродано!
Далі призначаємо setgid до каталогу:
chmod g+s реж
І, нарешті, призначаємо стійкий біт каталогу:
chmod +t реж
При перегляді виходу з ls, ви можете визначити спеціальні дозволи. Ось кілька прикладів. По-перше, програма, яка налаштована:
-rwsr-xr-x
Каталог, який має атрибут setgid:
drwxrwsrx
Каталог із встановленим бітом sticky:
drwxrwxrwt