Що ви знаєте про SELinux, крім того, що його потрібно вимкнути?

SELinux — система примусового контролю доступу, реалізована лише на рівні ядра. Перше знайомство з нею починається після того, як на екрані з’являється напис Permission denied. Закінчується все теж досить швидко — на рядку SELINUX = disabled /etc/selinux/config.

Про те, як працювати з цією програмою знають далеко не всі адміни. Ще б пак, адже в кожному другому посібнику з налаштування якогось мережевого сервісу вказано, що насамперед потрібно відключити SELinux. Але не такий страшний чорт, як його малюють. Тому спробуємо розібратися, що таке SELinux і чому варто тричі подумати перед тим, як відмовлятися від використання цієї утиліти.

Що це таке і з чим його їдять

Security Enhanced Linux — система безпеки, яка базується на моделях мандатного та рольового доступу. Мета розробки цієї програми — виправлення недоліків, що існують на той момент (2000-х рр.) системи безпеки DAC. Реалізована лише на рівні ядра, починаючи з версії 2.6. Сьогодні утиліту можна встановити фактично на будь-якому дистрибутиві.

SELinux стає незамінним помічником у тому випадку, якщо стандартної системи контролю доступу, де є маніпуляція з правами на запис, читання та виконання на рівні користувачів та груп, недостатньо.

Нижче наведено кілька прикладів використання

Адміністратор не може повною мірою контролювати дії користувачів. Простий користувач має право дати доступ на читання секретних файлів, наприклад, ключі SSH.

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

Процеси успадковують права користувача, від імені якого було запущено. Типова ситуація, коли заражена трояном версія браузера Firefox може читати SSH-ключі користувача, не маючи цього права.

У деяких дистрибутивах SELinux є за дефолтом: CentOS, Fedora та Red Hat. У Debian та Ubuntu SeLinux включено до репозиторій. Встановити його можна командою

sudo apt-get install selinux
,

потім перезапустити систему.

Щоб увімкнути SELinux, необхідно ввести команду

selinuxenabled 1

Для вимкнення використовується команда

selinuxenabled 0

Режими роботи

SELinux працює у двох режимах.

Permissive – допускається порушення безпекової політики. Факти порушення лише реєструються у системному журналі. У цьому випадку утиліта використовується як фіксатор порушень.

Enforced – режим, у якому порушення політики безпеки блокуються – SELinux працює повною мірою.

Щоб перемикнутися з одного режиму на інший, потрібно ввести команду satenforce 1 (для запуску enforced режиму) або 0 (для включення permissive). Щоб режим роботи встановлювався автоматично після запуску системи, необхідно відредагувати файл /etc/selinux/config, якому можуть надаватися такі значення: permissive, enforced і disabled (відключення утиліти).

Логування SELinux (аудит)

  • налаштування auditallow – журналувати події;
  • налаштування dontaudit – не журналувати події;

Логіка роботи:

  • якщо операція allow, то вона журналується лише у разі auditallow;
  • якщо операція disallow, то вона НЕ журналюється лише у разі dontaudit.

Контекст безпеки

Це сукупність даних, що складається з атрибутів SELinux:

  • ролі;
  • типи користувача/даних;
  • домени процесу;
  • категорії та рівні (застосовується лише у спеціальних політиках MLS/MCS).

Контекст безпеки записується у файловій системі – в атрибути файлу, що створюється при установці утиліти.

Деякі файлові системи (наприклад, NFS) не підтримують запис SELinux. У цьому випадку мітки записуються окремо від файлів, але зв’язок між файлами та мітками відбувається по шляхах файлів. Це може спровокувати «розрив» між файлами та мітками, якщо перемістити файл іншим шляхом.

Мітка файлу може бути невірною навіть тоді, коли файлова система підтримує запис таких міток, однак файл неправильно перемістили або скопіювали всередині файлової системи. Наприклад, при копіюванні файлу в іншу теку мітка може змінитися на ту, яка встановлена ​​для цієї теки. Тому при використанні SELinux важливо правильно копіювати та переміщувати файли.

Щоб дізнатися про контексти, потрібно використовувати команди з ключем -Z.

  • ps -eZ [| gerp ім’я_програми] – контекст SELinux для програм, що працюють/для конкретної програми;
  • ls -Z – контекст SELinux для файлів;
  • id –Z – контекст SELinux для поточного користувача.

Мітки (labels)

Всім суб’єктам і об’єктам SELinux надано мітки безпеки, які забезпечують першим доступ до других. Мітка суб’єкта вказує на його надійність, мітка об’єкта – на ступінь конфіденційності інформації, що міститься в ньому.

Тип і домен

Домен – список дій, які виконує процес (суб’єкт) над об’єктами. Тип – надається об’єкту, визначає, хто може отримати доступ до нього. У SELinux використовується Type Enforcement – ​​механізм примусового присвоєння типів. Кожному суб’єкту/об’єкту надається певний домен (тип).

Ролі

Роль – це сукупність доменів, які може запускати користувач. Взаємодія ролей та доменів регулюється політикою безпеки.

Відповідно до правил політики безпеки, допускається перехід з однієї ролі в іншу для зміни повноважень. Ролі що неспроможні поєднуватися, лише замінювати одна одну. Однак користувач не має права поміняти одну роль на іншу у довільному порядку. Через те, що ролі пов’язані з доменами, процес зміни ролей часто називається зміною домену -– Domain Transition.

Користувач

Абстрактне поняття, а не конкретний користувач з логіном та паролем. Це так само як і група користувачів у DAC – системі безпеки, яка активно застосовувалася до SELinux. При додаванні нового користувача до системи він зіставляється з певним типом користувача SELinux. Йому надаються ті права (дозволи та заборони), які належать його типу користувача.

Суб’єкт

Користувачі або процеси, які виконують певні дії над будь-чим.

Об’єкт

Файли, сокети, порти, fifo (файл каналу “first in – first out”) та інші елементи архітектури SELinux – те, над чим виконуються дії суб’єктів.

Політика MLS/MCS

Політика MLS (Multi-level-security) базується на двох принципах.

no write down, no read up

    Суб’єкт під грифом “таємно” має доступ до об’єкта або з таким самим рівнем секретності, або нижче. Якщо суб’єкт запитує доступ до файлу з міткою “цілком таємно”, то спроба буде відкинута системою.

    no write down

      Суб’єкт не має права створювати/змінювати об’єкт з рівнем допуску нижче свого, щоб уникнути витоку інформації. Це може статися, наприклад, якщо суб’єкт, що містить секретну інформацію, не записав її в об’єкт зі статусом, наприклад, “для службового використання”. Ці принципи характеризують вертикальний рівень контролю.

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

      Якщо в системі існує лише вертикальний рівень контролю, то йдеться про мультикатегорійну безпеку (MCS).

      Як працює SELinux

      Що відбувається, коли користувач звертається до файлу?

      Спочатку перевіряються DAC-права, потім хуки LSM. Перехоплювач LSM (linux security module) відловлює всі звернення суб’єктів (користувачів або додатків) до системних файлів та передає їх SELinux разом із контекстом безпеки.

      Надати або позбавити доступ – це вирішує сервер реалізації політики безпеки (Policy Enforcement Server). Для цього він спочатку надсилає запит до підсистеми AVC – Access Vector Cache, де знаходяться кешовані дані про права доступу до об’єкта. У тому випадку, якщо рішення про контроль доступу відсутнє в кеші, запит перенаправляється в базу даних політики безпеки. Дані кешуються в AVC і знову перенаправляється в Policy Enforcement Server. Якщо запитувана дія відповідає вимогам знайденої політики, доступ дозволяється, якщо ні – сервер реалізації політики блокує доступ. Дані записуються в log-файл SELinux.

      Крім прийняття рішень про надання/дозвіл доступу, Policy Enforcement Server відповідає за керування мітками безпеки (видалення або призначення).

      При грамотному налаштуванні ця утиліта дозволяє:

      – обмежити права користувачів та процесів на рівні ядра системи;

      – мінімізувати ризики, які виникають через помилки, допущені в коді/конфігурації;

      – Заблокувати несанкціонований доступ, захистити систему від експлойтів.

      Авторські ІТ-курси з системного адміністрування та DevOps у IT Education Center.

      Залишити відповідь

      Відповідь на коментар

      Коментарі (1)

        Дякуємо, що поділились