- •12.1. Історія створення unix
- •12-2. Архітектура системи
- •12.3. Безпека unix
- •12.3.1. Модель безпеки системи unix
- •12.3.2. Підсистема ідентифікації й автентифікації
- •12.3.3. Підсистема розмежування доступу
- •12.3.4. Підсистема реєстрації
- •12.4. Адміністрування засобів безпеки unix 12.4.1. Особливості адміністрування
- •12.4.2. Утиліти безпеки
- •12.4.3. Характерні вразливості системи unix
12.3.3. Підсистема розмежування доступу
Як уже зазначалося, в сисякемі UNIX єдині можливі суб'єкти доступу — користувачі. Для більш гнучкого розмежування доступу всіх користувачів розбито на групи. Один користувач може належати до кількох груп, одна з яких — первинна. Наявність однієї призначеної групи є вимогою стандарту POSIX. Окрім того, саме первинну групу використовують у ситуаціях, де необхідно визначити лише одну групу. Наприклад, у багатьох системах (зокрема, в Solaris), коли користувач створює файл, саме первинну групу користувача призначають як групу, до якої цей файл належить.
Належність користувача до груп визначається у файлах /etc/passwd і /etc/ group. У файлі /etc/passwd призначається ідентифікатор первинної групи (поле GID). Файл /etc/group подібний до /etc/passwd; він також є текстовим, і кожний його рядок інтерпретується як один окремий запис. У файлі /etc/group окремі записи стосуються груп користувачів. Поля мають такі значення;
group_name (ім'я групи);
образ пароля (частіше це поле буває порожнім);
GID (числовий ідентифікатор групи);
список користувачів, які є членами групи. Крім користувачів, зазначених увідповідному поліфайлу /etc/group, членами певної групи є також усі користувачі, для яких цю групу призначено як первинну в файлі /etc/passwd.
Об'єктами доступу в UNIX можуть бути лише файли (звичайні файли, каталоги, посилання (Link), канали (Pipe) та спеціальні файли, що відповідають пристроям введення-виведення). Різні операційні системи, узагальнені назвою UNIX, можуть мати різні файлові системи. Однак усі ці файлові системи мають спільні риси та майже однакову логічну структуру.
Розглянемо особливості файлової системи UNIX, які впливають на роботу системи розмежування доступу. Усю фаі^лову систему поєднано в єдине дерево каталогів, яке починається з кореневого каталогу, позначеного символом «/». Усі зовнішні файлові системи (змінні носії інформації, мережні диски тощо) монтуються у визначені місця загальної файлової системи (команда mount), найчастіше це каталог /mnt. Щоб змінити носій або відключити мережний диск, їх спочатку необхідно розмонтувати (команда umount). Уся інформація про файл (тип, ідентифікатори власника файлу та його групи, розмір, час останнього звернення до файлу, інформація щодо прав доступу, розташування (номери блоків)) міститься не в каталогах, як це зроблено в багатьох інших файлових системах, зокрема у FAT-12, FAT-16, FAT-32 (MS-DOS, Windows), а в системній таблиці індексних дескрипторів (i-node). Безпосередньо звернутися до цієї таблиці неможливо. Каталоги, у свою чергу, містять лише ім'я файлу та посилання на відповідний-$щис у таблиці індексних дескрипторів. Завдяки такій організації кожний файл у файловій системі UNIX може мати кілька абсолютно рівноправних імен, що в загальному випадку містяться в різних каталогах. Знищуючи файл, ми знищуємо лише відповідний запис у каталозі та зменшуємо на одиницю кількість імен, які має цей файл. Файл вважається фізично знищеним лише тоді, коли в нього більше не залишається імен. Кількість імен файлу відстежується за допомогою спеціального поля в таблиці індексних дескрипторів. Однак зворотного посилання (з дескриптора на ім'я файлу) немає.
Уміст каталогу можна переглянути, скориставшись командою ls, а за допомогою розширеного варіанта цієї команди ls -1 можна перегляифти інформацію, що міститься в таблиці індексних дескрипторів.
UNIX реалізує дискреційну модель розмежування доступу, в якій для кожного об'єкта доступу (файлу) визначається, які суб'єкти доступу (користувачі) та за якими методами мають отримувати доступ до об'єкта. Для цього з кожним файлом асоціюють спеціальну інформацію, яка містить ідентифікатор власника файлу, ідентифікатор групи і вектор (масив) прав доступу до файлу, що складається з дванадцяти біт (по чотири біти для власника, групи й решти даних). Перші три біти відповідають правам читання, записування й виконання. Для каталогів право на виконання трактується як право доступу до таблиці індексних дескрипторів на читання йзаписування. Не маючи цього права, не можна зробити поточним цей каталог чи будь- який з його підкаталогів, ознайомитися з правами доступу до об'єктів цього каталогу та змінити їх. За наявності права на читання, можна лише переглядати вміст самого каталогу, тобто список файлів. Маючи право на записування, але не маючи права на виконання, не можна змінити вміст каталогу, оскільки для цього потрібен доступ до таблиці індексних дескрипторів.
Четвертий біт може мати різні значення, залежно від того, до якої категорії користувачів його встановлено. Для прав власника цей біт має назву SUID (Set User ID on execution bit), і якщо його встановлено для файлу, що містить програмний код, то під час його запуску на виконання цей програмний код буде виконуватися не з правами користувача, що його запустив, а з правами власника цього файлу (здебільшого власником таких файлів є root). Четвертий біт для прав доступу членів групи має назву SGID (Set Group ID on execution bit). Програма для файлу якої встановлено цей біт, буде виконуватися з правами члена групи цього файлу. Для каталогів SGID визначає, що для всіх файлів під час їх створення у цьому каталозі буде встановлено такий самий ідентифікатор груйй| що й у каталозі, а не той, що визначено первинною групою користувача (це правило може бути різним у різних системах UNIX). Четвертий біт, встановлений для прав доступу решти користувачів, має значення Sticky. Наразі його використовують лише для каталогів. Користувачі, які мають право на записування в каталог, не мають права видаляти чи перейменовувати файли інших користувачів у цьому каталозі. Дотримання такого правила потребують каталоги спільного використання, на кшталт /tmp.
У класичній системі UNIX є суперкористувач (root), який має ідентифікатор UID = 0. Саме цей ідентифікатор визначає повноваження суперкористувача, a login_name root для системи жодного значення не має. Будь-якому користувачу з UID = 0 система буде показувати, що його login_name саме root. За визначенням суперкористувач має необмежені права в системі, власне, для нього вимоги розмежування доступу ігноруються. У сучасних UNIX-системах це не зовсім так: права доступу в них перевіряються, проте суперкористувач може здійснювати будь-які дії в системі.
У захищених системах доступ суперкористувача до системи обмежують або взагалі забороняють. Наприклад, якщо в системі Solaris у файлі /etc/default/login вказати CONSOLE=/dev/console, то root зможе входити у систему лише з системної консолі, а не з віддалених терміналів через мережу. Якщо ж цей параметр задати як CONSOLE=, root взагалі не зможе входити у систему. В такому випадку для виконання завдань керування системою адміністратори спочатку мають входити в систему як звичайні користувачі, а потім здійснювати перехід до облікового запису суперкористувача. Для цього є команда su (Switch User). Перевага такої процедури полягає у тому, що система відстежує не лише ефективний, тимчасовий ідентифікатор користувача, а й ідентифікатор, під яким користувач увійшов до системи. Це сприяє підвищенню спостережності системи, оскільки дае змогу з'ясувати, хто саме виконував дії від імені root. Ще гнучкіший механізм надає утиліта sudo, яка дає змогу користувачу тимчасово (наприклад, для виконання однієї команди) отримувати певні привілеї. У цьому випадку повноваження окремих користувачів встановлюються за допомогою конфігураційного файлу (наприклад, /etc/sudoers або /usr/local/etc/sudoers).
