- •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-2. Архітектура системи
Архітектуру UNIX можна подати у вигляді дворівневої моделі (рис 12.1) [100J. Основною її складовою є ядро, яке повністю ізолює прикладні програми від
апаратної реалізації конкретного комп'ютера. Ядро надає прикладним програмам набір послуг, найважливішими з яких є введення-виведення, керування процесами, їх синхронізація та міжпроцесна взаємодія.
У зовнішньому кільці на схемі показано системні та прикладні програми. Усі вони взаємодіють з ядром за однаковою схемою. Програми звертаються до ядра за послугами через інтерфейс системних викликів. Інтерфейс системних викликів визначає набір послуг ядра, що надаються програмам, і формат запитів. Системні виклики подібні до звичайних викликів бібліотечних функцій.

На рис. 12.2 наведено структуру ядра UNIX [93].
Ядро складається з трьох основних підсистем:
файлової;
введення-виведення;
керування процесами та пам'яттю.
Файлова підсистема
Це одна з найхарактерніших і найважливіших для UNIX підсистем. Вона надає уніфікований доступ до даних на дисках і до периферійних пристроїв. Тобто одні й ті самі функції відкривання файлу, його читання й записування та деякі інші використовуються як під час роботи з диском, так і, наприклад, для введення даних із клавіатури чи друкування на принтері. Майже всі операції введення-виведення в UNIX виконуються через інтерфейс файлової системи. Це дає змогу зробити систему контролю і розмежування доступу дуже ефективною, а саме — керувати лише правами доступу користувачів до файлів.
Підсистема введення-виведення
Підсистема виконує запити файлової системи і взаємодіє з драйверами пристроїв. Як і в інших операційних системах, в UNIX розрізняють байт-орієнтовані (символьні) та блок-орієнтовані пристрої. Перші видають або приймають потік байтів даних (до них належать клавіатура і мережний адаптер). Другі, на кшталт диска, дають змогу здійснювати пошук даних («позиціонувати курсор»). Драйвери пристроїв мають свої особливості. Під час взаємодії файлової підсистеми з підсистемою введення-виведення на блок-орієнтовані пристрої використовується буферний кеш.
У системі UNIX драйвери, які включено до складу її ядра, зазвичай компіл; ються і компонуються разом із ним. Сучасні UNIX-системи, зокрема Linux, м; ють модульне ядро і дають можливість легко завантажувати та вивантажувати модулі. Це дає змогу компонувати в ядро лише необхідні драйвери, настроюючи його безпосередньо під час виконання. У системах із відкритим кодом, таких як Linux, можна включати до складу системи модулі, які не мають відкритого коду, насамперед — драйвери від розробників апаратних компонентів.
Підсистема керування процесами та пам'яттю
Ця підсистема контролює створення і завершення процесів, розподіл системних ресурсів між процесами, синхронізацію процесів, міжпроцесну взаємодію. За виділення ресурсів відповідає спеціальний компонент ядра, який називають розпорядником або планувальником (Scheduler). Модуль керування пам'яттю забезпечує розподіл оперативної пам'яті між усіма процесами. Його завданням також є підтримка віртуальної пам'яті. Модуль міжпроцесної взаємодії передає повідомлення процесам про події за допомогою системи сигналів, а також надає можливість обміну даними між процесами.
За будовоюядро класичної системи UNIX є монолітним; цю властивість успад-кувало і ядро Linux. 3 точки зору будови захищених систем це вважають недоліком [96]. Є UNIX-подібні системи, що підтримують типові для UNIX інтерфейси користувача і системних викликів, хоча за будовою вони мікроядерні.
і
З-поміж таких систем слід назвати мікроядро Mach, розроблене в університеті Карнегі — Меллон [101], мікроядерну систему Chorus [102], а також мікроядерну систему реального часу QNX [103].
