1. Що таке SELinux і навіщо він потрібен?
SELinux (Security-Enhanced Linux) — це модуль безпеки, який підсилює традиційну модель управління правами доступу, додаючи концепцію мандатного контролю. Він дозволяє адміністратору налаштовувати більш суворі обмеження для користувачів і навіть процесів, щоб мінімізувати потенційну шкоду від можливих атак.
У чому його унікальність?
Уявіть, що ваша система — це будинок. Традиційні права доступу (rwx для користувача, групи і решти) — це як ключі від замків на дверях. Але що якщо хтось зламає двері? SELinux стає другою лінією оборони, підсилюючи захист за допомогою правил поведінки: "Гей, навіть якщо ти всередині, у ванну кімнату заходити не можна!"
Основні завдання SELinux:
- Захист від несанкціонованого доступу до процесів та файлів.
- Зменшення шкоди від атак, навіть якщо процес був зламаний.
- Принципи "захисту за замовчуванням" (все заборонено, окрім дозволеного).
Режими роботи SELinux
SELinux може працювати в трьох режимах:
- Enforcing — активний, застосовує політику безпеки і блокує порушуючі процеси.
- Permissive — тільки записує порушення в журнали, але не блокує дії.
- Disabled — повністю вимкнений
SELinux у режимі enforcing нагадує строгого старшого брата для вашої системи. Permissive — це молодший брат, який тільки скаржиться, але нічого не робить.
2. Перевірка статусу SELinux
Для початку давай подивимось, чи активний SELinux і в якому режимі він працює. Для цього існує декілька зручних команд.
Команда getenforce
Ця команда просто скаже тобі, який режим зараз використовується: Enforcing, Permissive, або Disabled.
$ getenforce
Enforcing
Якщо вивід Disabled, то SELinux відключено — і це означає, що для увімкнення тобі доведеться трохи попрацювати, але про це пізніше.
Команда sestatus
Більш детальний звіт про статус SELinux можна отримати за допомогою цієї команди. Вона покаже поточний стан, активний режим і використовувану політику.
$ sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Тут ти можеш побачити:
- enabled/disabled — чи увімкнено SELinux.
- current mode — активний режим (enforcing, permissive).
- loaded policy name — яка політика завантажена. Наприклад, "targeted" означає, що SELinux застосовує контроль лише до ключових процесів.
3. Перемикання режимів SELinux
Щоб змінити поточний режим роботи SELinux, використовується команда setenforce.
Перемикання в permissive-режим
Якщо ти хочеш тимчасово "послабити повідець" SELinux, можна увімкнути permissive-режим.
$ sudo setenforce 0
Тепер SELinux буде тільки фіксувати порушення, але не блокувати їх. Ти можеш перевірити нове налаштування за допомогою команди getenforce:
$ getenforce
Permissive
Перемикання назад в enforcing-режим
Коли захочеш знову увімкнути суворий контроль, виконай:
$ sudo setenforce 1
І, звісно, перевір результат:
$ getenforce
Enforcing
Ця зміна застосовується на льоту, але тільки до наступного перезавантаження системи.
4. Увімкнення SELinux
Якщо SELinux було вимкнено, потрібно внести зміни у конфігураційний файл. SELinux управляється через файл /etc/selinux/config.
Перевірка поточного конфігураційного файлу
Давай подивимося, що там налаштовано. Використовуй будь-який текстовий редактор, наприклад nano:
$ sudo nano /etc/selinux/config
Ти побачиш щось типу:
# This file controls the state of SELinux on the system.
SELINUX=disabled
SELINUXTYPE=targeted
Переключення SELinux в активний стан
Щоб увімкнути SELinux, зміни рядок SELINUX=disabled на SELINUX=enforcing або SELINUX=permissive.
Ось приклад файлу після змін:
# This file controls the state of SELinux on the system.
SELINUX=enforcing
SELINUXTYPE=targeted
Після редагування збережи файл і перезапусти систему:
$ sudo reboot
Після перезавантаження ти можеш перевірити статус за допомогою sestatus, щоб переконатися, що SELinux активний.
5. Розбір контекстів SELinux
Що таке контексти?
Контексти — це мітки, які SELinux використовує для управління доступом. У кожного файлу, процесу і користувача є свій контекст.
Ти можеш подивитися контексти файлів за допомогою команди ls -Z. Ось приклад:
$ ls -Z /var/www/html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
Що це означає?
- unconfinedu — користувач SELinux.
- objectr — тип об'єкта.
- httpdsyscontent_t — тип доступу (у цьому випадку пов'язано з веб-сервером).
- s0 — рівень безпеки.
Зміна контексту
Якщо SELinux заважає роботі твого додатка, можливо, потрібно змінити контекст файлу. Використовуй команду chcon:
$ sudo chcon -t httpd_sys_content_t /var/www/html/index.html
Ця команда тимчасово змінює тип контексту файлу. Але після перезавантаження зміни можуть зникнути, тому для постійних налаштувань краще модифікувати політику SELinux (про це пізніше).
6. Приклад роботи з SELinux
Давайте розберемо приклад. Ви адміністратор сервера, який хоче розгорнути веб-сервер, але SELinux блокує доступ до файлів у каталозі /var/www/html.
Кроки:
Перевірте статус SELinux:
$ sestatusПереконайтесь, що SELinux увімкнено та працює в enforcing-режимі.
Перегляньте контексти файлів:
$ ls -Z /var/www/htmlЯкщо контекст неправильний, змініть його:
$ sudo chcon -t httpd_sys_content_t /var/www/html/*Перевірте роботу веб-сервера.
7. Типові помилки та проблеми
SELinux вимкнено, і ви цього не помічаєте. Завжди перевіряйте статус за допомогою
sestatus. Багато адміністраторів забувають увімкнути SELinux після встановлення системи."Чому мій сервіс не працює?" SELinux блокує доступ. Використовуйте
audit.logдля аналізу:$ sudo cat /var/log/audit/audit.log | grep deniedЗміни контексту не зберігаються. Використовуйте не
chcon, а команди для постійних змін, такі якsemanage.
Вивчення SELinux схоже на підготовку до марафону: спочатку може бути складно, але з часом ви зрозумієте, як цей інструмент може суттєво підвищити безпеку системи. Використовуйте ці знання, щоб бути тим адміном, якого не зламає навіть найпросунутіший хакер.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ