русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Поняття прав доступу користувача


Дата додавання: 2014-11-27; переглядів: 953.


 

Будь-яка Unix-подібна ОС, і зокрема FreeBSD, є система багатокористувацька, у ній передбачено механізм, який обмежує доступ користувачів до файлів та директорій. Природно, "доступ" означає не лише можливість читати чи змінювати вміст окремих файлів, але й можливість створювати файли (директорії), вилучати їх, запускати файли, якщо вони є виконувані, змінювати їхні назви, а також змінювати всі ті атрибути, що й визначають "право доступу", тобто — "хто саме й що саме" може чинити з даним файлом чи директорією.

Насамперед слід зазначити, що слушніше говорити не про "права користувача" стосовно певного файла, а про "права процесу" чи виконуваної програми. По-перше, якщо користувач і вносить певні зміни в файли або директорії, він це здійснює за допомогою певних програм (редакторів, "командерів", системних утиліт для копіювання, вилучення файлів тощо). По-друге, не всі програми запускаються користувачами "вручну". Деякі з них (демони) запускаються при стартуванні системи. Інші можуть запускатися в певні моменти часу, наприклад за допомогою програми cron, чи викликатися в міру необхідності для обслуговування запитів, які надходять мережею (зазвичай їх запускає програма-"диспетчер" inetd). Окрім того, існує низка програм, які для виконання певних допоміжних дій самі запускають інші програми, в цьому разі говорять, що процес-"батько" запустив процес-"нащадок". Зрозуміло, що цим програмам (процесам) слід обмежити доступ до файлів. І, врешті, по-третє, у певних випадках є надто корисно, щоби програма, запущена користувачем, мала більше прав, аніж зазвичай має цей користувач. Приміром, звичайний користувач не може навіть читати файл, у якому "заховано" паролі всіх користувачів. Водночас будь-який користувач має мати можливість змінювати свій особистий пароль, не звертаючись для цього до адміністратора, але для цього йому треба мати можливість записати дещо у файл паролів. Отже, програма, котра це здійснює (passwd), в момент виконання має мати права набагато більші, аніж користувач, котрий її запускає.


 

Отже:

кожен процес має ідентифікатор користувача (userID); зазвичай він збігається з usеrID того користувача, котрий запустив цей процес;

процеси, запущені автоматично, теж мають userID, начебто їх запустив реальний користувач; чий саме userID одержують ці програми, зазвичай визначається тими програмами, які стартують: програмою-завантажувачем, cron, inetd тощо; у найпростіших випадках програми-"нащадки" лише "успадковують" userID від програми-"батька", але деякі "батьки" можуть запускати програми з іншим userID, котрий не збігається з власним;

деякі програми в процесі виконання можуть змінювати свій userID і, відповідно, набувати прав, яких сам користувач не мав. Природно, для того, щоби програма могла це здійснити, адміністратор має "дозволити" їй таке поводження (докладніше про це буде сказано нижче). До речі, зміна usеrID здійснюється не лише коли потрібно "розширити" права програми, але й навпаки — "звузити" їх до прав певного конкретного користувача;

якщо процес може змінювати свій userID, то розрізнюють "реальний userID" та "ефективний userID" (є ще "збережений userID"). Реальний userID — це ідентифікатор користувача, котрий запустив процес (або userID процесу-"батька"). А ефективний — це новий userID, якого задача одержала під час виконання;

права на файл (чи директорію) визначаються за "ефективним userID" процесом. У найпростішому випадку, коли userID не змінюється, "реальний" та "ефективний" usеrіD збігаються — і можна говорити лише про usеrID чи процес, навіть лише про права користувача (а не процесу) на файл.

Усі користувачі для кожного файла (чи директорії) поділяються на три категорії:

— власник (чи хазяїн) цього файла;

— група "особливо допущених" до цього файла;

— вся решта.

Це означає, що можна установити три різних "допуски" (набору прав доступу) для кожного файла чи директорії. Один такий набір визначатиме права користувача, котрий є власником файла; інший набір визначатиме права для користувачів, котрі входять у певну групу, але не є власниками, і, врешті, третій набір установлює права для всієї решти користувачів, котрі не входять у цю групу "особливо допущених" і не є власниками файла. Отже, у кожного файла (директорії) є три атрибути, які зберігаються десь у заголовку файла і також регулюють доступ до нього. Звичайно, атрибутів у файлі є не три, а більше. До атрибутів можна віднести ім’я файла, його обсяг, час створення тощо. Але в даному разі нас цікавлять лише ці три.

У заголовок файла записується ідентифікатор користувача userID, який вважається його власником. При цьому "хазяїном" може бути лише один певний користувач. Окрім того, як атрибут записується ідентифікатор групи (groupID), котрий і визначає ту групу "особливо допущених", про яку йшлося вище. Кожна така група (її назва, числовий ідентифікатор — groupID і склад) визначається адміністратором системи. Тобто "пересічний" користувач, навіть якщо він і є хазяїном файла, не може довільно скласти список "близьких друзів", яким він довіряє особливі права стосовно свого файла. Він може лише обрати придатну групу з наявних тільки якщо він сам входить у цю групу. В атрибутах файла є певний набір бітів чи "прапорців", який і зазначає — хто саме й що саме може чинити з цим файлом. Цей набір називається permissions, що можна перекласти як "допуски", чи "права на доступ".

При наборі команди ls –l на моніторі висвітлюється:

 

-rw-r--r-- st1 wheel 4297 23мар 17:37 list_us

-rwxr-xr-x st1 wheel 1502 17мар 12:03 myProg

-rw-r--r-- st1 wheel 5354 12мар 23:51 tmp.dat

\_________/ \_______/ \________/ \_________/ \_______________/ \__________/

"права" власник група довжина дата ім’я файла

 

У другому стовпчику подано ім’я (login name) користувача — "хазяїна" цих файлів (у даному разі це – st1). У третьому стовпчику — назва групи, приписаної також до цих файлів (у даному разі — wheel). У першому стовпчику набір знаків типу "r" (читання), "w" (запис) та "-" (нічого) зазначає можливості для всіх трьох категорій користувачів. Слід зауважити, що в самому заголовку файла зберігаються не імена користувачів та груп, а їхні числові номери, а "права" насправді являють собою не ланцюжок літер, а набір бінарних бітів. Просто команда ls зображує їх у більш узвичаєному вигляді.

 


<== попередня лекція | наступна лекція ==>
Домашнє завдання | Основні біти доступу (читання/запис/виконання)


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн