Теорія операційної системи

:: Меню ::

Головна
Представлення даних в обчислювальних системах
Машинні мови
Завантаження програм
Управління оперативною пам'яттю
Сегментна і сторінкова віртуальна пам'ять
Комп'ютер і зовнішні події
Паралелізм з точки зору програміста
Реалізація багатозадачності на однопроцесорних комп'ютерах  
Зовнішні пристрої
Драйвери зовнішніх пристроїв
Файлові системи
Безпека
Огляд архітектури сучасних ОС

:: Друзі ::

Карта сайту
 

:: Статистика ::

 

 

 

 

 

Зміна ідентифікатора користувача

В деяких випадках у розробників додатків або ОС виникає потреба або, в усякому разі, бажання вирішити контрольовану зміну ідентичності для виконання однієї операції або групи тісно зв'язаних операцій над даними. Вимога контрольованості означає, що не можна дозволяти користувачеві вільне виконання таких операцій: наприклад, в системі документообігу користувачеві може бути дозволено поставити під документом підпис, що він з ним ознайомився, але при цьому не дано права змінювати вміст документа або видаляти раніше поставлений підпис. Якщо список прав, що надається системою, на документ або дозволяє редагування документа цілком, або знову-таки цілком забороняє його редагування, то ми стикаємося з нерозв'язною проблемою.

Авторизація доступу до полів документа в Notes
Програмний комплекс Lotus Notes, широко визнаний як краща основа для реалізації систем документообігу, дозволяє встановлювати права на окремі поля або групи полів документа, а стандартна техніка реалізації наведених вище вимог полягає в тому, щоб спочатку надати користувачеві право запису в полі, де має бути підпис, а потім — після підписання — це право тут же зняти. Втім, при реалізації складних циклів документообігу, взаємозв'язаних документів, що включають багато, нерідко виникають ситуації, нерозв'язні за допомогою лише цих засобів [Керн/лінд 2000].

Можна навести і інший приклад, тісніше пов'язаний з темою книги: для зміни інформації про користувача необхідний доступ для запису у відповідну базу даних, але не у всю, а лише в певний запис. Цілком природно і навіть необхідно дати користувачеві можливість міняти пароль, не звертаючись до адміністратора. З іншого боку, абсолютно неприпустимо, щоб один користувач, не будучи адміністратором облікових записів, міг змінити пароль іншому.
Одним з рішень було б зберігання пароля для кожного з користувачів в окремому файлі, але це у багатьох відношеннях незручно. Інше рішення може полягати у використанні моделі клієнт-сервер з процесом-сервером, що виконується з привілеями адміністратора, який є єдиним засобом доступу до паролів. Наприклад, в Win32 весь доступ до призначеної для користувача бази даних здійснюється через системні виклики, тобто функції процесу-сервера виконує само ядро системи.
У системах сімейства Unix для цієї мети був запропонований оригінальний механізм, відомий як setuid (setting of user id - установка [ефективного] ідентифікатора користувача). По легенді, ідея цього механізму виникла саме при рішенні задачі про те, як же користувачі зможуть міняти свої паролі, якщо їх хеши зберігатимуться в одному файлі.

Установка ідентифікатора користувача в Unix
У Unix кожне завдання має два призначені для користувача ідентифікатори: реальний і ефективний. Реальний ідентифікатор зазвичай збігається з ідентифікатором користувача, що запустив завдання. Для перевірки прав доступу до файлів і інших об'єктів, проте, використовується ефективний ідентифікатор. При запуску звичайних завдань реальний і ефективний ідентифікатори збігаються. Неспівпадання може виникнути при запуску програми зі встановленою ознакою setuid. При цьому ефективний ідентифікатор для завдання встановлюється рівним ідентифікатору господаря файлу, що містить програму.
Ознака setuid є атрибутом файлу, що зберігає завантажувальний модуль програми. Лише господар може встановити цю ознаку, таким чином, передаючи іншим користувачам право виконувати цю програму від свого імені. При модифікації файлу або при передачі його іншому користувачеві ознака setuid автоматично скидається.
Наприклад, програма /bin/passwd, що викликається для зміни пароля, належить користувачеві root, і у неї встановлена ознака setuid. Будь-який користувач, що запустив цю програму, отримує завдання, що має право модифікації призначеної для користувача бази даних, — файлів /etc/passwd і /etc/shadow. Проте, перш ніж провести модифікацію, програма passwd перевіряє допустимість модифікації. Наприклад, при зміні пароля вона вимагає ввести
старий пароль (мал. 12.20). Змінити пароль користувачеві, який його забув, може лише root.
Іншим прикладом setuid-программы може служити програма /bin/ps (process status — достаток процесів) в старих системах. До встановлення стандарту на псевдофайлову систему /proc, Unix не надавала штатних засобів для здобуття статистики про процеси, що виконуються. Програма /bin/ps в таких системах аналізувала віртуальну пам'ять ядра системи, доступну як файл пристрою /dev/kmem, знаходила в ній список процесів і виводила ті, що містяться в списку дані. Природно, лише привілейована програма може здійснювати доступ до /dev/kmem.

Мал. 12.20. Зміна ідентифікатора користувача в Unix

Механізм setuid був винайдений одним з отцов-основателей Unix, Деннісом Рітчи, і запатентований компанією At&t в 1975 р. Через декілька місяців після здобуття патенту, йому був дан статус public domain. Офіційно At&t пояснила це тим, що плату за використання даного патенту недоцільно робити високою, а збір невеликої плати з великого числа користувачів незручний і теж недоцільний.
Механізм setuid дозволяє видавати привілеї, доступні лише суперкористувачеві, як окремим користувачам (при цьому setuid-программа повинна явним чином перевіряти реальний ідентифікатор користувача і порівнювати його з власною базою даних), так і групам (при цьому досить передати setuid-программу відповідній групі і дати їй право виконання на цю програму), таким чином, частково компенсуючи недостатню гнучкість стандартної системи прав доступу і привілеїв в системі Unix.

Серверні агенти в Notes
До досконалості механізм setuid доведений в Lotus Notes (цей пакет відноситься до прикладних програм, а не операційних систем, але реалізує власні схеми аутентифікації і авторизації). У цій системі всі об'єкти бази даних, у тому числі і агенти (процедури, що зберігаються), забезпечені електронним підписом. Серверні агенти виконуються не від імені користувача, що ініціював операцію, а від імені того, КТО агент підписаний. В даному випадку підпис коди означає, що або користувач сам займався розробкою агента, або він явним чином погодився узяти на себе відповідальність за результати його роботи. Підпис підроблювати практично неможливо (використовується алгоритм RSA з 631-бітовим ключем) [redbooks.ibm.com sg245341].

 

:: Реклама ::

 

:: Посилання ::


 

 

 


Copyright © Kivik, 2017