Модуль 4.3: Контексти SELinux
Безпека Linux | Складність:
[COMPLEX]| Час: 35–40 хв
Передумови
Розділ «Передумови»Перед початком цього модуля:
- Обов’язково: Модуль 2.3: Capabilities та LSM
- Бажано: Доступ до системи на базі RHEL (CentOS, Rocky Linux, Fedora) для практики.
Що ви зможете робити після цього модуля
Розділ «Що ви зможете робити після цього модуля»Після завершення цього модуля ви зможете:
- Пояснити контексти SELinux (user:role:type:level) та як вони контролюють доступ
- Діагностувати помилки “Permission denied”, спричинені SELinux, за допомогою audit2why та sesearch
- Налаштувати SELinux для вузлів Kubernetes (контексти container_t, container_file_t)
- Обрати між режимами enforcing, permissive та disabled і пояснити компроміси
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»SELinux (Security-Enhanced Linux) — це система обов’язкового контролю доступу, розроблена в NSA. Вона є стандартом для дистрибутивів сімейства Red Hat. SELinux складніший за AppArmor, але надає набагато глибший та точніший контроль над безпекою.
Розуміння SELinux допоможе вам:
- Адмініструвати вузли Kubernetes на базі RHEL — там SELinux увімкнено за замовчуванням.
- Виправляти складні помилки доступу — коли права на файли вірні, але “Permission denied” залишається.
- Скласти іспит CKS — SELinux тестується нарівні з AppArmor.
- Зрозуміти ізоляцію контейнерів — SELinux використовує спеціальні мітки (MCS) для розділення контейнерів.
Порада “просто вимкни SELinux” — найгірша в DevOps. Професіонали вчать, як з ним працювати.
Основні концепції
Розділ «Основні концепції»Контекст безпеки (Labels)
Розділ «Контекст безпеки (Labels)»Кожен файл, процес та мережевий порт має мітку:
користувач : роль : ТИП : рівень
Найважливішою частиною є ТИП (Type). Більшість правил базуються саме на ньому (Type Enforcement).
Приклади типів:
Розділ «Приклади типів:»httpd_t— для процесів вебсервера.httpd_sys_content_t— для контенту сайту (html, jpg).container_t— для процесів у контейнерах.
Режими роботи
Розділ «Режими роботи»# Перевірити поточний режимgetenforce# Enforcing - Блокує та логує (безпечно)# Permissive - Тільки логує (для дебагу)# Disabled - Повністю вимкнено (небезпечно)Тимчасова зміна режиму:
Розділ «Тимчасова зміна режиму:»sudo setenforce 0 # Перейти в Permissivesudo setenforce 1 # Повернутися в EnforcingРобота з мітками файлів
Розділ «Робота з мітками файлів»# Переглянути мітки файлів (-Z)ls -Z /var/www/html
# Тимчасово змінити тип файлуchcon -t httpd_sys_content_t index.html
# Встановити постійне правило для папкиsudo semanage fcontext -a -t httpd_sys_content_t "/srv/myweb(/.*)?"
# Застосувати правила до файлівsudo restorecon -Rv /srv/mywebSELinux Booleans
Розділ «SELinux Booleans»Це “вимикачі” в політиці, які дозволяють або забороняють певні дії без написання складного коду.
# Список усіх вимикачівgetsebool -a
# Дозволити вебсерверу з'єднуватися з базою данихsudo setsebool -P httpd_can_network_connect_db on# -P робить зміну постійною (survives reboot)Вирішення проблем (Troubleshooting)
Розділ «Вирішення проблем (Troubleshooting)»Якщо ви підозрюєте SELinux, перевірте журнал аудиту:
# Знайти відмови у доступі (AVC denials)sudo ausearch -m AVC -ts recent
# Отримати людське пояснення причини відмовиsudo ausearch -m AVC -ts recent | audit2whyТест
Розділ «Тест»-
Яка команда в Linux показує поточний режим роботи SELinux?
Відповідь
`getenforce`. -
Що таке Type Enforcement у SELinux?
Відповідь
Це основний механізм контролю, який визначає, які дії (читання, запис, виконання) дозволені процесу з певним типом (наприклад, `httpd_t`) над об'єктом іншого типу (наприклад, файлом `httpd_sys_content_t`). -
Яка різниця між
chconтаsemanage fcontext?Відповідь
`chcon` змінює мітку файлу "тут і зараз", але вона зникне при перемаркуванні системи (relabel). `semanage fcontext` записує правило в базу даних системи, і воно буде діяти завжди після виконання `restorecon`. -
Як дозволити конкретну дію, на яку SELinux каже “ні”, якщо ви впевнені, що вона безпечна?
Відповідь
Спочатку перевірити наявність відповідного **Boolean** через `getsebool`. Якщо його немає — використати утиліту `audit2allow` для генерації кастомного модуля політики.
Практична вправа
Розділ «Практична вправа»Завдання: Змінити контекст файлу та перевірити його.
- Створіть файл у нетиповому місці:
Terminal window touch /tmp/test_file - Перегляньте його початковий контекст:
Terminal window ls -Z /tmp/test_file - Змініть його тип на
httpd_sys_content_t:Terminal window chcon -t httpd_sys_content_t /tmp/test_file - Перевірте, що мітка змінилася:
Terminal window ls -Z /tmp/test_file - Поверніть стандартну мітку для цієї папки:
Terminal window restorecon -v /tmp/test_file
Критерії успіху: Ви розумієте структуру міток SELinux та вмієте їх змінювати.
Підсумок
Розділ «Підсумок»- SELinux — це безпека на основі міток (labels).
- Enforcing — єдиний правильний режим для продакшну.
- Booleans — швидкий спосіб змінити поведінку політики.
- ausearch + audit2why — ваші головні інструменти діагностики.
Далі: Модуль 4.4: Профілі Seccomp — дізнайтеся, як фільтрувати системні виклики до ядра для максимального захисту.