ТОП 10:

Зберігання інформації про облікові записи



Інформацію про користувачів у UNIX зберігають у файлі /etc/passwd, який віді­грає роль бази даних облікових записів. Кожному користувачу відповідає один рядок цього файла, що має таку структуру:

 

ім'я_каристувача:шифрований_пароль:иій:дігі:відомості:home_KaTanor:shell

де: і м' я_користувача - вхідне ім'я цього користувача;

 

шифрованийпароль - одностороння функція від пароля, обчислена із викори­станням DES, MD5 тощо (якщо значення цього поля починається з '*', кори­стувач не може інтерактивно входити у систему);

uid і gid - чисельні ідентифікатори користувача та його основної групи (кори­стувач може належати до кількох груп, інформація про це зберігається у файлі /etc/group, що розглядатиметься наступним);

відомості — додаткова інформація про користувача (його повне ім'я тощо);

Иошекаталог — місце знаходження домашнього каталогу користувача;

shell — версія командного інтерпретатора, який запускають для користувача,

коли він входить у систему (у Linux це звичайно /bin/bash).

Наведемо приклад рядка /etc/passwd:

 

іvanov:10.elXw3GYJE:540:102:Іванов I.B.:/home/ivanov:/bin/bash

 

Інформацію про групи зберігають у файлі /etc/group. Рядок цього файла має синтаксис:

і м'я групи: пароль_групи :gi d: сгисок_членів де: gid — чисельний ідентифікатор групи (той самий, що в /etc/passwd);

список_члені в — список імен усіх користувачів, які входять у групу, розділених

комами.

Наведемо приклад рядка /etc/group: students::102:і vanov.petrov.sidorov

 

Програмний доступ до облікових записів

Для доступу із застосувань до інформації, яку зберігають у /etc/passwd, можна ви­користати функції, описані в <pwd. h>:

// доступ до інформації для заданого uid

struct passwd *getpwuid(uid_t uid);

// доступ до інформації для заданого імені користувача

struct passwd *getpwnam(char *name):

Обидві ці функції повертають покажчик на структуру passwd. У таблиці 18.1 наведена відповідність її полів елементам рядка файла /etc/passwd.

Усі наведені поля є рядками символів.

Приклад отримання інформації із цього файла наведено нижче.

 

struct passwd *pwd:

pwd = getpwuid(getuidO);

ргіntf("ім'я користувача: *s. домашній каталог: %s\n"

. pwd->pw_name. pwd->pw_dir);

 

Заздалегідь виділяти пам'ять під структуру passwd не потрібно - її розміщують у статичній пам'яті під час першого виклику однієї із наведених функцій. Наступ­ні виклики використовують ту саму пам'ять, затираючи попередній результат, то­му, якщо потрібно зберегти результат виклику, його копіюють в окрему пам'ять.

 

Тіньові паролі

У традиційних UNIX-системах до файла /etc/passwd мав доступ будь-який кори­стувач OC A тому зловмисникові достатньо було отримати непривілейований доступ до системи, щоб почати словникову атаку на цей файл.

Для вирішення даної проблеми потрібно заборонити доступ до цього файла для всіх користувачів, крім root. Проте таке рішення не є прийнятним, оскільки в цьому файлі, крім інформації про паролі, містяться імена та ідентифікатори ко­ристувачів, розташування їхніх домашніх каталогів та інші дані, необхідні біль­шості застосувань. У результаті всі програми, яким потрібна така інформація, до­велося б запускати із правами суперкористувача.

У сучасних UNIX-системах (зокрема в Linux) застосовують інший підхід -технологію тіньових паролів (shadow passwords). При цьому інформацію про па­ролі переносять із /etc/passwd в окремий тіньовий файл паролів (який зазвичай називають /etc/shadow). До нього може звертатися тільки суперкористувач. Іншу інформацію (імена та ідентифікатори користувачів тощо) зберігають у /etc/passwd, що залишається доступним для всіх користувачів. Тіньові паролі дають змогу значно підвищити надійність схеми аутентифікації системи.

Головною проблемою цього підходу є те, що в разі переходу до використання тіньових паролів усі прикладні програми, які працюють із паролями (Іодіптощо), необхідно змінити та перекомпілювати. Найгнучкішим вирішенням у цьому разі є застосування підключуванш модулів аутентифікації (Pluggable Authentication Modules, PAM) [24], які дають можливість під час роботи системи визначати і нала­годжувати процедуру аутентифікації для різних застосувань без зміни їхнього коду.

 

Керування доступом

Реалізація керування доступом до файлів у UNIX збереглася, майже не змінив­шись від ранніх версій системи. Фактично вона є скороченою реалізацією списків контролю доступу.

 

Основні принципи реалізації

Наведемо принципи реалізації керування доступом в UNIX.

1. Усі файли і каталоги в UNIX мають власника (owner), що належить до певної групи (group), і права доступу (permissions).

2. Розрізняють три категорії прав доступу: для читання, записування і виконан­ня. Для звичайних файлів назви прав відповідають їхньому змісту (зазначимо, що ядро UNIX намагатиметься завантажити у пам'ять і виконати будь-який файл, на який у поточного користувача є права на виконання).

3. Для каталогів задають той самий набір прав, але вони відрізняються за змістом від прав для файлів:

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

♦ право записування в каталог означає можливість створення в каталозі но­вих файлів і вилучення наявних (тобто записування в каталог як у файл); зазначимо, що для вилучення файла прав на нього самого можна й не ма­ти — достатньо прав на каталог, де він зберігається;

♦ право виконання означає можливість пошуку в каталозі, тобто доступу до окремих файлів.

Із цього випливає, що якщо для каталогу задаються права «тільки для вико­нання», то доступ до окремих файлів у ньому можна отримати, коли знати їхні імена, список же всіх файлів отримати буде неможливо. Таке задання прав ви­користовують, аби сторонні особи не могли випадково виявити файли, які, од­нак, потребують спільного доступу. 3 іншого боку, якщо задати права «тільки для читання», можна переглядати список файлів каталогу, але доступ до окре­мих файлів стане неможливий.

4. Права кожної категорії задають окремо для власника файла, для користувачів його групи і для всіх інших користувачів усього дев'ять базових комбінацій прав; можна сказати, що із кожним файлом пов'язаний список контролю дос­тупу із трьох елементів.

 

Приклад задання прав

У UNIX-системах є стандартна утиліта виведення вмісту каталогу, яку назива­ють 1 s. Ось фрагмент результату виклику цієї утиліти для каталогу

 

drwxr-xr-x2 shekvl osbook 1024 Sep 8 02:26 dir/

-rwxr-x---1 shekvl osbook 11370 Sep 3 13:18 test*

-rw....... 1 shekvl osbook 149 Sep 3 13:41 test.c

 

Першим полем ліворуч є поле атрибутів файла, формат якого розглянемо докладніше. Перший стовпчик цього поля визначає тип файла (для каталогів у ньому стоятиме символ d, для звичайних файлів - прочерк, для символічних зв'язків — 1).

Далі йде символьне відображення прав доступу. Воно складається із трьох трійок символів rwx. Ці трійки визначають (зліва направо): права власника, групи і всіх інших користувачів. У кожній трійці символ г означає право на читання, w - на записування, x - на виконання. Якщо відповідного права немає, то замість символу стоятиме прочерк.

У наведеному списку файлів:

 

♦ для каталогу dir задані усі права для власника, а також права на читання і ви­конання для групи та інших користувачів; це означає, що додавання і вилу­чення файлів дозволене власникові каталогу, інші дії — усім;

♦ виконуваний файл test може бути прочитаний і запущений власником і члена­ми його групи, записаний — тільки власником, усі інші користувачі доступу до нього не мають;

♦ файл test.c може бути прочитаний і записаний тільки його власником, інші ко­ристувачі жодних прав на нього не мають. '

 







Последнее изменение этой страницы: 2017-02-06; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.232.186.117 (0.008 с.)