Посібник для SELinux

Посібник для SELinux

Переклад статті підготовлений для студентів курсу «Безпека Linux»

SELinux або Security Enhanced Linux – це покращений механізм керування доступом, розроблений Агентством національної безпеки США (АНБ США) для запобігання зловмисним вторгненням. Він реалізує примусову (або мандатну) модель управління доступом (англ. Mandatory Access Control, MAC) поверх існуючої дискреційної (або виборчої) моделі (англ. Discretionary Access Control, DAC), тобто дозволів на читання, запис, виконання.

SELinux має три режими:

  1. Виконання - Заборона доступу на підставі правил політики.
  2. Вседозволений — ведення лога дій, які порушують політику, які в режимі enforcing були б заборонені.
  3. інвалід - повне відключення SELinux.

За замовчуванням параметри знаходяться в /etc/selinux/config

Зміна режимів SELinux

Щоб дізнатися поточний режим, запустіть

$ getenforce

Щоб змінити режим на permissive, запустіть наступну команду

$ setenforce 0

або, для зміни режиму з дозвільна на виконання, виконайте

$ setenforce 1

Якщо вам потрібно повністю відключити SELinux, це можна зробити тільки через файл конфігурації

$ vi /etc/selinux/config

Для вимкнення змініть параметр SELINUX наступним чином:

SELINUX=disabled

Налаштування SELinux

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

$ vi /etc/selinux/config
SELINUX=permissive

Після встановлення режиму дозвільна, створимо докорінно порожній прихований файл з ім'ям autorelabel

$ touch /.autorelabel

та перезавантажимо комп'ютер

$ init 6

Примітка: ми використовуємо режим дозвільна для маркування, оскільки використання режиму виконання може призвести до краху системи під час перезавантаження.

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

$ setenforce 1

Тепер ви успішно увімкнули SELinux на своєму комп'ютері.

Моніторимо логі

Можливо, у вас виникли помилки під час маркування або під час роботи системи. Щоб перевірити, чи ваш SELinux працює правильно і чи не блокує він доступ до якого-небудь порту, додатку і т. д. потрібно подивитися логи. Лог SELinux знаходиться в /var/log/audit/audit.logале вам не потрібно читати його повністю, щоб знайти помилки. Можна використовувати утиліту audit2why для пошуку помилок. Запустіть наступну команду:

$ audit2why < /var/log/audit/audit.log

В результаті ви отримаєте перелік помилок. Якщо помилок у лозі не було, жодних повідомлень не відображатиметься.

Налаштування політики SELinux

Політика SELinux – це набір правил, якими керується механізм безпеки SELinux. Політика визначає набір правил конкретного оточення. Зараз ми вивчимо, як налаштовувати політики, щоб дозволити доступ до заборонених сервісів.

1. Логічні значення (перемикачі)

Перемикачі (booleans) дозволяють змінювати частини політики під час роботи без необхідності створення нових політик. Вони дозволяють вносити зміни без перезавантаження або перекомпіляції SELinux.

Приклад
Припустимо, ми хочемо надати спільний доступ до домашнього каталогу користувача FTP на читання і запис, і ми вже розшарили його, але при спробі доступу ми нічого не бачимо. Це пов'язано з тим, що SELinux забороняє FTP-серверу читати і писати в домашньому каталозі користувача. Нам потрібно змінити політику, щоб FTP-сервер міг звертатися до домашніх каталогів. Подивимося, чи є для цього якісь перемикачі, виконавши

$ semanage boolean -l

Ця команда видасть список доступних перемикачів з їх поточним станом (включено/on або вимкнено/off) та описом. Ви можете уточнити пошук, додавши grep, щоб знайти результати, що стосуються тільки ftp:

$ semanage boolean -l | grep ftp

і знайдете таке

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

Цей перемикач вимкнений, тому ми увімкнемо його за допомогою setsebool $ setsebool ftp_home_dir on

Тепер наш ftp-демон зможе отримати доступ до домашнього каталогу користувача.
Примітка: Ви також можете отримати список доступних перемикачів без опису, виконавши getsebool -a

2. Мітки та контекст

Це найпоширеніший спосіб реалізації політики SELinux. Кожен файл, папка, процес і порт позначаються контекстом SELinux:

  • Для файлів та папок мітки зберігаються як розширені атрибути у файловій системі та можуть бути переглянуті наступною командою:
    $ ls -Z /etc/httpd
  • Для процесів та портів маркуванням керує ядро, і можна подивитися ці мітки наступним чином:

процес

$ ps –auxZ | grep httpd

порт

$ netstat -anpZ | grep httpd

Приклад
Тепер давайте розглянемо приклад, щоб краще зрозуміти мітки та контекст. Допустимо, у нас є веб-сервер, який замість каталогу /var/www/html/ использует /home/dan/html/. SELinux вважає це порушенням політики, і ви не зможете переглядати ваші веб-сторінки. Це тому, що ми не встановили контекст безпеки, пов'язаний із HTML-файлами. Для перегляду контексту безпеки за промовчанням використовуйте таку команду:

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

Тут ми отримали httpd_sys_content_t як контекст для html-файлів. Нам потрібно встановити цей контекст безпеки для нашого поточного каталогу, який має наступний контекст:

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

Альтернативна команда для перевірки контексту безпеки файлу чи каталогу:

$ semanage fcontext -l | grep '/var/www'

Ми також будемо використовувати semanage для зміни контексту після того, як знайдемо правильний контекст безпеки. Щоб змінити контекст /home/dan/html, виконайте такі команди:

$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

Після того, як контекст змінено за допомогою semanage, команда restorecon завантажить контекст за промовчанням для файлів і каталогів. Наш веб-сервер тепер зможе читати файли з папки /home/dan/htmlоскільки контекст безпеки для цієї папки було змінено на httpd_sys_content_t.

3. Створення локальних політик

Можуть виникнути ситуації, коли вищезазначені методи марні для вас і ви отримуєте помилки (avc/denial) в audit.log. Коли таке відбувається, потрібно створити локальну політику (Local policy). Всі помилки можна знайти за допомогою audit2why, як було описано вище.

Для усунення помилок можна створити локальну політику. Наприклад, ми отримуємо помилку, пов'язану з httpd (apache) або smbd (samba), ми grep'аем помилки і створюємо для них політику:

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

Тут http_policy и smb_policy - Це назви локальних політик, які ми створили. Тепер нам потрібно завантажити ці створені локальні політики у поточну політику SELinux. Це можна зробити так:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

Наші локальні політики були завантажені, і ми не повинні більше отримати ніяких avc або denail в audit.log.

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

Джерело: habr.com

Додати коментар або відгук