Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lecture.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
740.35 Кб
Скачать
      1. Системні виклики для захисту

У 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-подібних операційних систем, загалом,

є схожими, є й відмінності, які призводять до помилок, а

отже, до уразливості системи безпеки.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]