
- •Поняття операційної системи
- •Операційна система як розширена машина
- •Операційна система як менеджер ресурсів
- •Історія розвитку операційних систем
- •Перше покоління (1945-1955): електронні лампи і комутаційні панелі
- •Друге покоління (1955-1965): транзистори і системи пакетної обробки
- •Третє покоління (1965-1980): інтегральні схеми і багатозадачність
- •Четверте покоління (з 1980 року по наші дні): персональні комп'ютери
- •Історія minix 3
- •Основні концепції
- •Процеси
- •Оболонка
- •Системні виклики
- •Системні виклики для управління процесами
- •Системні виклики для управління сигналами
- •Системні виклики для управління файлами
- •Системні виклики для управління каталогами
- •Системні виклики для захисту
- •Системні виклики для управління часом
- •Структура операційної системи
- •1.5.2. Багаторівневі системи
- •1.5.3. Віртуальні машини
- •1.5.4. Екзоядра
- •1.5.5. Модель клієнт-сервер
- •2.1.1. Модель процесів
- •2.1.2. Створення процесів
- •2.1.3. Завершення процесів
- •2.1.4. Ієрархії процесів
- •2.1.5. Стани процесів
- •2.1.6. Реалізація процесів
- •2.1.7. Програмні потоки
- •2.2. Взаємодія між процесами
- •5.1. Файли
- •5.1.1. Іменування файлів
- •5.1.2. Структура файлу
- •5.1.3. Типи файлів
- •5.1.4. Доступ до файлів
- •5.1.5. Атрибути файлів
- •5.1.6. Операції з файлами
- •5.2. Каталоги
- •5.2.1. Прості каталоги
- •5.2.2. Ієрархічні системи каталогів
- •5.2.3. Шляхи
- •5.2.4. Операції з каталогами
- •5.3. Реалізація файлової системи
- •5.3.1. Структура файлової системи
- •5.3.2. Реалізація файлів
- •5.3.4. Організація дискового простору
Системні виклики для захисту
У MINIX 3 для кожного файлу визначений використовуваний для його захисту 11-раз-
11-розрядний код режиму, іноді також званий модою (mode). Код режиму
включає 9 біт, по три (читання, запис та виконання) для власника, для членів
групи власника і для інших користувачів. Системний виклик chmod
надає можливість зміни коду режиму для файлу. Наприклад, наступний
виклик надасть всім, крім власника, доступ до файлу тільки для читання;
власник ж зможе ще й виконувати файл:
chmodC'file ", 0644);
Інші два біти зашиті, 02000 і 04000, називаються відповідно
SETGID (Set-Group-Id - встановити ідентифікатор групи) і SETUID (Set-
User-Id - встановити ідентифікатор користувача). Коли користувач
запускає програму, для якої встановлено біт SETUID, то на час виконання
процесу ідентифікатор користувача замінюється ідентифікатором власника
програми. Ця спеціальна можливість широко застосовується для того, щоб
дозволити користувачам виконувати функції, доступні лише
суперкористувача, такі як створення каталогів. Саме для створення каталогу потрібно
виклик mknod, доступний тільки суперкористувачеві. Якщо ж власником
програми mkdir виявиться суперкористувач і для неї будуть встановлені права
доступу 04755, звичайні користувачі зможуть запускати її і тим самим робити
виклик mknod, але вельми обмеженим чином.
Коли процес виконує файл, в дозволах якого виставлений біт SETUID
або SETGID, ефективний ідентифікатор користувача або групи
відрізняється від реального значення. Але іноді для процесу важливо знати, чому дорівнюють ефективні та реальні значення ідентифікаторів користувача і групи.
Щоб отримати цю інформацію, процес може робити системні виклики getuid
і getgid. Обидва цих виклику повертають одночасно і ефективний, і
реальний ідентифікатори, а щоб отримувати ці значення окремо, служать
чотири бібліотечні процедури: getuid, getgid, geteuid, getegid. Перші
два повертають реальні значення, другі дві - ефективні.
Для звичайних користувачів єдиний спосіб змінити свій ідентифікації
ідентифікатор - запустити програму, у якій встановлено біт SETUID. Але для
суперкористувачем існує і інша можливість, яка надається системним
викликом setuid, що встановлює одночасно реальне і ефективне
значення ідентифікатора користувача. Виклик setgid, відповідно,
встановлює реальне і ефективне значення ідентифікатора групи. Крім того,
суперкористувач може змінювати власника файла за допомогою системного
виклику chown. Іншими словами, у суперкористувача є безліч
можливостей порушувати всі можливі правила захисту. Це пояснює, чому багато
студенти присвячують настільки багато часу спробам стати суперкористувачем.
Два останніх системних виклику з даної категорії можуть робитися і
звичайними процесами. Перший з них, umask, встановлює системну бітову
маску, яка застосовується для маскування бітів прав доступу до файлу при його
створенні. Наприклад:
umask @ 22);
Якщо зробити такий виклик, то при викликах creat або mknod в правах доступу
до створюваного об'єкту будуть маскуватися біти 022. Інакше кажучи,
наступний виклик створить файл з правами доступу 0755, а не 0777:
creat ("file", 0777);
Крім того, бітова маска успадковується дочірніми процесами, тому якщо
оболонка відразу після входу зробить виклик umask, жодної із запущених
користувачем в цьому сеансі програм не вдасться створити файл, в який зможуть
записувати дані інші користувачі.
Коли власником програми є суперкористувач і в неї встановлений біт
SETUID, то вона може звертатися до будь-якого файлу. Але часто програмі потрібно
знати, чи має викликав її користувач дозвіл звертатися до даного
файлу. Проста спроба звернення до файлу нічого не дасть, тому що вона завжди
завершиться успіхом.
Отже, необхідно мати можливість дізнатися, чи дозволений доступ для
реального (а не ефективного) ідентифікатора користувача. Це можна зробити
за допомогою системного виклику access. Щоб перевірити можливість читання,
код режиму має дорівнювати 4, параметр записи - 2 і параметр виконання - 1.
Ці значення можна комбінувати. Наприклад, якщо код режиму дорівнює 6, то
виклик поверне 0, якщо дозволені і запис, і читання. В іншому випадку виклик
поверне -1. Якщо код режиму дорівнює 0, перевіряється, що файл існує і можливий
пошук у провідних до нього каталогах.
Хоча механізми захисту UNIX-подібних операційних систем, загалом,
є схожими, є й відмінності, які призводять до помилок, а
отже, до уразливості системи безпеки.