- •Введення
- •1. Структура та обсяг дисципліни
- •2. Основи програмування на мові с
- •2.1 Найпростіші конструкції мови
- •2.2 Типи даних
- •2.4 Операції мови с
- •2.5 Структура простої с програми
- •2.6 Організація введення-виведення
- •2.7 Компіляція в системі Linux
- •2.8 Організація розгалужень в програмі
- •2.9 Організація циклів
- •2.10 Оператор break
- •2.11 Оператор continue
- •2.11 Масиви
- •2.12 Функції
- •2.13 Вызов функции с переменным числом параметров
- •2.14 Рекурсивні функції
- •2.15 Читання і запис текстових файлів
- •2.16 Структури даних
- •2.17 Перелік|перерахування| (enumeration)
- •2.18 Об'єднання (union)
- •3. Операційні системи і системне програмування
- •3.1. Поняття операційної системи
- •4. Корисні команди Linux
- •4.1. Загальні|спільні| команди
- •4.1.1. Команда arch – виведення архітектури комп'ютера
- •4.1.2. Команда clear – очищення екрану
- •4.1.3. Команда date
- •4.1.9. Команда uptime – інформація про роботу системи
- •4.1.10. Команда users – інформація про користувачів
- •4.1.11. Команди w, who і whoami інформація про користувачів
- •4.1.12. Команда xf8config – настройка графічної підсистеми
- •4.2. Команди для роботи з текстом
- •4.2.1. Команди diff і cmp
- •4.2.2. Команди grep і egrep – текстовий фільтр
- •4.2.3. Команди more и less – посторінкове виведення
- •4.2.4. Команди head і tail – виведення начала і хвоста файлу
- •4.2.5. Команда wc – підрахунок слів у файлі
- •5. Захист інформації в інформаційних системах
- •5.1 Основні завдання забезпечення безпеки
- •5.2 Базові поняття криптографії
- •5.2.1 Поняття криптографічного алгоритму і протоколу
- •5.2.2 Криптосистеми з секретним ключем
- •5.2.3 Криптосистеми із відкритим ключем
- •5.2.4. Гибридні криптосистеми
- •5.2.5. Цифрові підписи
- •5.2.6. Сертифікати
- •5.3. Принципи аутентифіекації і керування доступом
- •5.3.1. Основи аутентифікації
- •5.3.2. Основи керування доступом
- •5.4. Аутентифікація та керування доступом в unix
- •5.4.1. Облікові записи користувачів
- •5.4.2. Аутентифікація
- •5.4.3. Керування доступом
- •6. Програмний інтерфейс unix. Системні виклики і функції стандартних бібліотек
- •6.1. Підтримка програмування в oc unix. Вивчення передачі інформації
- •6.2. Змінні оточення
- •6.3. Обробка помилок
- •6.4. Правила формування і засоби розбору командних рядків
- •7. Операції над файлами
- •7.1 Файлові операції posix
- •7.2. Збирання інформації про атрибути файла
- •7.3. Операції над каталогами
- •Література
5.4. Аутентифікація та керування доступом в unix
Розглянемо, як реалізуват аутентифікацію і керувати доступом в UNIX-системах на прикладі Linux.
5.4.1. Облікові записи користувачів
Перш ніж розглянути реалізацію аутентифікації в UNIX, зупинимося на концепції користувача цієї системи.
Користувачі та групи користувачів
Кожному користувачу в UNIX ставлять у відповідь обліковий запис (account), що характерізується іменем користувача та ідентифікатором (uid). Як ім’я користувача, так і його ідентифікатор мають бути унікальними в межах усієї системи. Крім того, з обліковим записом користувача пов’язують його домашній каталог (home directory), у який він за замовчуванням може записувати дані. Після входу користувача у систему відбуваєтьмя перехід у його домашній каталог.
Користувачі об’єднуються в групи. Кожна група характерізується іменем та інтифікатором (gid).
Команда id дозволяє дізнатися|упізнати,взнати,пізнати| ідентифікатор поточного користувача і групи, в які він входить:
$id
uid=501(mitchell) gid=501 (mitchell) groups=501 (mitchelll), 503 (csl)
У першій частині|частці| вихідних даних вказано, що ідентифікатор користувача рівний 501. У дужках приведено відповідне цьому ідентифікатору ім'я користувача. Як випливає з результатів роботи команди, користувач mitchell входить до двох груп: з|із| номером 501 (mitchell) і з|із| номером 503 (csl).
З|із| кожним процесом пов'язані ідентифікатори користувача і групи. Коли користувач викликає|спричиняє| програму, запускається процес, ідентифікатори якого співпадають|збігаються| з|із| ідентифікаторами цього користувача.Коли ми говоримо, що користувач виконує операцію, то насправді вважається|внаслідок,унаслідок|, що операцію виконує процес з|із| ідентифікатором відповідного користувача. Коли процес робить|чинить| системний виклик, ядро перевіряє ідентифікатори процесу і визначає, чи має процес право доступу до запрошуваних У|в,біля| кожного файлу є лише один користувач-власник і одна група-власник. При створенні|створінні| файлу за ним закріплюються ідентифікатори користувача і групи того процесу, в якому відбувається|походить| ця операція.
Загалом процес виконують із правами того користувача, який запустив відповідний виконуваний файл (винятки з цього розлянемо пізніше).
Для доступу до ідентифікатора користувача поточного процесу використовується системний виклик getuid(), до ідентифікатора основної групи цього користувачач – getgid().
#include<unistd.h>
printf(“uid=%d, gid=%d\n”,getuid(), getgid());
Суперкористувач root
Користувач із uid, що дорівнює нулю (звичайно його називають root) має в UNIX особливий статус – він може виконувати в системі будь-які дії без обмежень. Такого користувача також називають суперкористувачем. Усі інші – звичайні користувачі.
Наявність єдиного суперкористувача вважають головною слабкістю системи безпеки UNIX, оскільки компрометація єдиного пароля root негайно призводить до того, що зловмисник отримує повний контроль над системою. Крім цього, процеси під час виконання не можуть бути обмежені якоюсь частиною прав суперкористувача. Фактично, процес, якому потрібна лише невелика частина таких прав, змушений виконуватися під керуванням root із повним контролем над системою.
