Права доступу грають важливу роль у формуванні концепції безпеки ОС. У FreeBSD права доступу є досить простими, на відміну від операційної системи Windows, де є висхідний, спадний успадкування. Звичайно, така гнучкість у встановленні прав доступу до певних ресурсів це позитивний момент, але занадто складна система виставлення прав може призвести до серйозної помилку, що в свою чергу може скомпрометувати систему в цілому.
В операційній система FreeBSD існує всього три стандартних прапора (так само є спеціальні прапори), які визначають ті чи інші права доступу:
r - читання
w - запис
x - виконання
Власника визначає безпосередньо користувач, який володіє тим чи іншим ресурсом (файлом, пристроєм, каталогом), він може як знімати, так і встановлювати різні прапори доступу.
Групу визначать список користувачів, які має спільний доступ до ресурсу.
Інші - це все ті користувачі, які не входять до групи і відповідно ніодін з них не є власником ресурсу. Інші є небажаними користувачами і найчастіше вони мають мінімальний набір прав або не мають їх взагалі.
Як видно з прикладу, каталог має для власника (atrium) права на читання, запис і виконання, для групи (wheel) права на читання і виконання, для всіх інших користувачів права доступу відсутні.
Для того щоб розуміти всі тонкощі прав доступу важливо усвідомити порядок їх перевірки:
1.Первоначально перевіряється чи не є користувач власником файлу і якщо він таким є, визначаються його права і далі перевірка прав доступу не йде, тобто якщо навіть користувач входить до групи у якій права набагато нижче ніж у власника, права групи навіть не будуть перевірятися. Якщо користувач є власником ресурсу і для нього не визначені будь-які права, то у доступі.
Як бачимо запис в файл сталася успішно.
2.Якщо користувач не є власником файлу, то перевіряється, чи не перебуває він в групі, яка має права доступу до ресурсу, якщо це так, то система визначає права доступу користувачу відповідні правам групи. Якщо користувач входить до групи і для групи відсутні права, то у доступі.
3.Далее, якщо користувач не є власником файлу і не перебуває в групі, яка має доступ до файлу, то йому призначаються права певні для інших.
4.Особо перевіряються права доступу для користувача root. Якщо система бачить, що користувач має UID = 0, що відповідає root, незалежно від login_name, то система взагалі не перевіряє права доступу до ресурсу, так як користувач root має необмежений доступ до системи.
Види уявлення прав доступу:
Права доступу можна уявити як в цифровому вигляді, так і в символьному.
1. Цифровий варіант
(111 - 111 -111) - відповідає правам доступу 777.
Для перекладу двійковій системи в десяткову використовується наступна таблиця відповідності, читається вона справа наліво:
128 64 32 16 8 4 2 1
Як же нам перевести наші права доступу в десяткову систему? Давайте потренуємося.
Призначимо файлу з ім'ям test.txt наступні права доступу:
Тепер переведемо отримані цифри:
u (user) - 111 - дивимося нашу таблицю відповідності справа наліво, даної послідовності відповідають цифри - 124, далі отримані цифри підсумовуємо і отримуємо - 1 + 2 + 4 = 7
g (group) - 101 - проробляємо те ж саме - 1 + 4 = 5
o (other) - 100 - проробляємо те ж саме - 4 = 4
В результаті наші права доступу на файл виглядають наступним чином - 754 і їх можна призначити за допомогою команди chmod (1).
Для зворотного перекладу, цифрового значення в двійкове, необхідно розділити на 2, залишок при діленні відповідає одиниці, якщо розподіл без залишку - 0, записується справа наліво.
Так само для полегшення запам'ятовування складемо таблицю відповідну цифровому поданням прав доступу:
1.Для власника - читання, запис, виконання
2. Для групи - читання і запис
3. Для інших - читання
Власник: 0400 + 0200 + 0100 = 0700
Група: 0040 + 0020 = 0060
Інші: 0004 = 0004
У підсумку ми отримуємо права доступу для файлу - 764, дані права можна призначити за допомогою команди chmod (1).
2. Символьний варіант
або можна по-іншому
Способів досить багато, як то кажуть, все залежить від вашої фантазії, мені більше подобається в цифровому варіанті.
Так само крім стандартних прав доступу - читання, запис, виконання існують спеціальні права доступу, їх можна призначити як в символьному, так і в цифровому варіанті:
Важливо!
Права, на каталог за своєю дією відрізняються від прав, встановлених на файл:
1.Право записи встановлене на каталог для групи, власника або інших дозволяє видалити в ньому будь-який файл в незалежності від власника і встановлених на нього прав доступу, тому з правом запису на каталог будьте дуже обережні. Для вирішення даної проблеми можна використовувати спеціальний прапор - Stick біт (1000), наведений в таблиці 1.5.
2.Право виконання встановлене на каталог дозволяє застосування для нього команди ls (1) з ключем '-l', команди cd (1) так як відбувається звернення до метаданих файлів.
3.Право читання для каталогу дозволяє отримати список файлів без докладної інформації про них.
4. Права читання і виконання для каталогу діють незалежно один від одного, тобто наявність обох прав доступу необов'язково. Комбінацією даних прав доступу можна отримати досить цікаві результати:
При встановленому право виконання на каталог, без права читання дозволяє створити так званий "темний" каталог. Що це таке? В даному каталозі відсутня можливість отримати лістинг знаходяться в ньому файлів, але є можливість звертатися до файлів, якщо їхні імена заздалегідь відомі. Наприклад, створимо темний каталог і спробуємо отримати лістинг файлів в ньому і прочитати один з файлів із заздалегідь відомим ім'ям:
Встановлені права доступу на той чи інший ресурс може змінити тільки власник або привілейований користувач з UID = 0.
Доля прав доступу
Існує дуже корисна команда umask (2), вона задає маску на новостворювані файли в системі. Дану команду Ви можете зустріти не тільки в ОС FreeBSD, але так само і в різному ПО (Samba ....). У ПО вона може застосовуватися і для каталогів, але існує різниця в способі вираховування прав доступу для каталогів і файлів, які визначає дана команда. Формат команди досить простий, задаються три цифри, які потім по черзі віднімаються з 7, якщо команда визначає права для каталогів і з 6, якщо команда визначає права для файлів. Для прикладу в ОС FreeBSD ви задаєте маску 240, це дозволить поставити права доступу на новостворювані файли 426, тобто в символьному поданні r --- w-rw-:
Для роботи з правами доступу і зміни власників, груп будуть корисні наступні команди:
chmod (1) - зміни прав доступу до того чи іншого ресурсу.
chown (8) - зміна групи і власника ресурсу.
chgrp (1) - зміна групи ресурсу.
ls (1) - читання каталогу і отримання різної докладної інформації.
stat (1) - отримання статистичної інформації про фото, вельми корисна команда.
umask (2) - задає маску на створювані файли для користувача.
Створимо файл і встановимо йому для власника права на читання і запис, для групи читання, а для інших ніяких прав:
У цифровому варіанті:
У символьному варіанті:
$ Touch test.file
$ Chmod u = rw, g = r, o-rwx test.file
$ Ls -l
total 0
-rw-r ----- 1 atrium wheel 0 Jun 18 1:06 test.file
Змінимо власника або групу для файлу або каталогу:
Подивимося інформацію про файл або каталозі: