Перейти до вмісту

Модуль 4.3: Контексти SELinux

Hands-On Lab Available
Ubuntu advanced 40 min
Launch Lab ↗

Opens in Killercoda in a new tab

Безпека Linux | Складність: [COMPLEX] | Час: 35–40 хв

Перед початком цього модуля:


Що ви зможете робити після цього модуля

Розділ «Що ви зможете робити після цього модуля»

Після завершення цього модуля ви зможете:

  • Пояснити контексти 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 — для процесів у контейнерах.

Terminal window
# Перевірити поточний режим
getenforce
# Enforcing - Блокує та логує (безпечно)
# Permissive - Тільки логує (для дебагу)
# Disabled - Повністю вимкнено (небезпечно)

Тимчасова зміна режиму:

Розділ «Тимчасова зміна режиму:»
Terminal window
sudo setenforce 0 # Перейти в Permissive
sudo setenforce 1 # Повернутися в Enforcing

Робота з мітками файлів

Розділ «Робота з мітками файлів»
Terminal window
# Переглянути мітки файлів (-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/myweb

Це “вимикачі” в політиці, які дозволяють або забороняють певні дії без написання складного коду.

Terminal window
# Список усіх вимикачів
getsebool -a
# Дозволити вебсерверу з'єднуватися з базою даних
sudo setsebool -P httpd_can_network_connect_db on
# -P робить зміну постійною (survives reboot)

Вирішення проблем (Troubleshooting)

Розділ «Вирішення проблем (Troubleshooting)»

Якщо ви підозрюєте SELinux, перевірте журнал аудиту:

Terminal window
# Знайти відмови у доступі (AVC denials)
sudo ausearch -m AVC -ts recent
# Отримати людське пояснення причини відмови
sudo ausearch -m AVC -ts recent | audit2why

  1. Яка команда в Linux показує поточний режим роботи SELinux?

    Відповідь `getenforce`.
  2. Що таке Type Enforcement у SELinux?

    Відповідь Це основний механізм контролю, який визначає, які дії (читання, запис, виконання) дозволені процесу з певним типом (наприклад, `httpd_t`) над об'єктом іншого типу (наприклад, файлом `httpd_sys_content_t`).
  3. Яка різниця між chcon та semanage fcontext?

    Відповідь `chcon` змінює мітку файлу "тут і зараз", але вона зникне при перемаркуванні системи (relabel). `semanage fcontext` записує правило в базу даних системи, і воно буде діяти завжди після виконання `restorecon`.
  4. Як дозволити конкретну дію, на яку SELinux каже “ні”, якщо ви впевнені, що вона безпечна?

    Відповідь Спочатку перевірити наявність відповідного **Boolean** через `getsebool`. Якщо його немає — використати утиліту `audit2allow` для генерації кастомного модуля політики.

Завдання: Змінити контекст файлу та перевірити його.

  1. Створіть файл у нетиповому місці:
    Terminal window
    touch /tmp/test_file
  2. Перегляньте його початковий контекст:
    Terminal window
    ls -Z /tmp/test_file
  3. Змініть його тип на httpd_sys_content_t:
    Terminal window
    chcon -t httpd_sys_content_t /tmp/test_file
  4. Перевірте, що мітка змінилася:
    Terminal window
    ls -Z /tmp/test_file
  5. Поверніть стандартну мітку для цієї папки:
    Terminal window
    restorecon -v /tmp/test_file

Критерії успіху: Ви розумієте структуру міток SELinux та вмієте їх змінювати.


  • SELinux — це безпека на основі міток (labels).
  • Enforcing — єдиний правильний режим для продакшну.
  • Booleans — швидкий спосіб змінити поведінку політики.
  • ausearch + audit2why — ваші головні інструменти діагностики.

Далі: Модуль 4.4: Профілі Seccomp — дізнайтеся, як фільтрувати системні виклики до ядра для максимального захисту.