Какво е SELinux и как може да подобри сигурността на Linux сървърите?
Когато повечето системни администратори мислят за укрепване на Linux сървър, те се фокусират върху основите: поддържане на пакетите актуални, конфигуриране на правила на защитната стена и ограничаване на SSH достъпа. Всички тези стъпки са валидни и необходими — но оставят значителна празнина. Един от най-мощните и често недостатъчно използвани механизми за сигурност, налични на Linux, е SELinux (Security-Enhanced Linux), рамка за задължителен контрол на достъпа на ниво ядро, предназначена да съдържа заплахи, преди да се превърнат в пълни компрометирания на системата.
Независимо дали управлявате VPS Hosting среда, приложение с висок трафик на Dedicated Servers, или многоклиентна Shared Web Hosting платформа, SELinux може да бъде решаващия слой, който превръща сериозно нарушение в съдържано, възстановимо събитие.
Какво е SELinux?
SELinux е модул за сигурност на ядрото на Linux, който реализира Mandatory Access Control (MAC). За да разберете защо това е важно, първо трябва да разберете какво замества — или по-скоро какво допълва.
Традиционният модел на сигурност на Linux се основава на Discretionary Access Control (DAC). При DAC разрешенията за достъп се определят от собственост на файлове и членство в групи. Потребителят root има неограничена власт над цялата система. Ако нападател получи root, той получава всичко.
При MAC модела на SELinux достъпът се управлява от политики за сигурност на системното ниво, които се прилагат на ниво ядро. Критично е, че дори потребителят root подлежи на тези ограничения. Процес, работещ като root, не може да извършва действия, които неговата SELinux политика не позволява явно.
SELinux е първоначално разработен от National Security Agency (NSA) в сътрудничество с Red Hat и е интегриран в основния Linux kernel в началото на 2000-те години. Днес той е стандартен компонент на корпоративни Linux дистрибуции, включително RHEL, CentOS, Fedora, AlmaLinux и Rocky Linux.
Където традиционната Linux сигурност е недостатъчна
Класическият UNIX модел на разрешения е служил добре на Linux в продължение на десетилетия, но носи структурни слабости, които съвременните нападатели експлоатират редовно:
- Root е всемогъщ. Всяка експлоатация, която успешно повишава привилегиите до root, дава на нападателя неограничен достъп до цялата система — файлове, бази данни, мрежови сокети и всичко останало.
- Компрометиране на услуга означава компрометиране на система. Уязвим Apache модул, лошо написан PHP скрипт или неправилно конфигурирано приложение могат да бъдат използвани за преместване по цялата система.
- Съвременните вектори на атака заобикалят DAC напълно. Уеб обвивки, експлоатации за повишаване на привилегиите, контейнерни бягства и атаки на веригата на доставки са проектирани да работят в границите на традиционните разрешения, докато все още причиняват катастрофални щети.
Сценарий на атака в реалния свят
Помислете за често срещана уязвимост на CMS, която позволява на нападателя да качи и изпълни уеб обвивка.
Без SELinux: Нападателят чете config.php, извлича учетни данни на база данни, изхвърля базата данни, се премества странично към други хостирани сайтове и потенциално постига пълен root достъп. Целия стек е компрометиран от една точка на вход.
С SELinux: Процесът на Apache уеб сървър работи в httpd_t домена. Политиката строго ограничава какво httpd_t може да достъпи. Уеб обвивката не може да чете файлове извън определения домен на съдържанието, не може да отвори неоторизирани мрежови връзки и не може да докосне файлове на конфигурация на системата. Нарушението е съдържано на ниво приложение.
Това е основното предложение на SELinux: ограничаване на щетите чрез ограничаване на процеса.
Как работи SELinux: Контексти на сигурност и прилагане на политики
SELinux работи чрез присвояване на контекст на сигурност (етикет) на всеки процес, файл, порт и мрежов сокет на системата. Политиките след това определят кои контексти могат да взаимодействат един с друг. Ядрото прилага тези правила при всеки опит за достъп.
Конкретен пример
| Обект | Контекст на сигурност |
|---|---|
| Apache процес | httpd_t |
| Файлове на уебсайт | httpd_sys_content_t |
| Файл със сенчести пароли | shadow_t |
Политиката на SELinux позволява на httpd_t да чете файлове, етикетирани като httpd_sys_content_t. Тя не позволява на httpd_t да чете shadow_t.
Ако Apache — независимо дали легално или поради експлоатация — се опита да чете /etc/shadow, ядрото отказва заявката и записва подробен запис за нарушение в /var/log/audit/audit.log. Атаката е блокирана и документирана едновременно.
Режими на работа на SELinux
SELinux работи в три различни режима:
| Режим | Поведение |
|---|---|
| Enforcing | Политиките се прилагат активно. Нарушенията се блокират и регистрират. |
| Permissive | Нарушенията се регистрират, но не се блокират. Полезно за одит и разработка на политики. |
| Disabled | SELinux е напълно изключен. Не се препоръчва за производствени среди. |
Проверка и задаване на текущия режим
# Check current SELinux status
getenforce
sestatus
# Temporarily switch to permissive mode (no reboot required)
setenforce 0
# Switch back to enforcing mode
setenforce 1За да промените режима постоянно, редактирайте /etc/selinux/config и задайте SELINUX=enforcing (или permissive), след това рестартирайте.
> Най-добра практика: Разгърнете нови сървъри в режим Permissive първо. Прегледайте дневниците на одита, идентифицирайте всички легитимни процеси, които се отмечат, фино настройте вашите политики и след това преминете на Enforcing за производство. Този подход предотвратява оперативни прекъсвания, докато гарантира, че вашите политики са точни.
Типове политики на SELinux
SELinux се доставя с няколко типа политики, подходящи за различни среди:
Целева политика (по подразбиране и препоръчана)
Прилага MAC ограничения само към услуги, обърнати към мрежата, като Apache, Nginx, Postfix, Dovecot и DNS. Всички други процеси работят в неограничен домен. Това е най-добрия баланс между сигурност и използваемост за по-голямата част от VPS и dedicated server работни натоварвания.
Строга политика
Прилага MAC към всички процеси на системата, включително потребителски сесии. Осигурява максимална сигурност, но изисква значително повече управление на политики и оперативна експертиза.
MLS/MCS (Multi-Level Security / Multi-Category Security)
Разширени типове политики, предназначени за правителствени, класифицирани или силно регулирани среди, където данните трябва да бъдат изолирани на множество нива на чувствителност едновременно.
За повечето производствени разгръщания на сървъри, Целева политика е правилният избор.
Защо SELinux е важен за хостинг, DevOps и съответствие
SELinux осигурява осезаеми преимущества в сигурност в широк спектър от оперативни контексти:
Изолация на процеса
Всяка ограничена услуга работи в собствения си домен на сигурност. Компрометиране на една услуга — например уеб приложение — не дава достъп до други услуги, работещи на същия хост. Това е особено ценно в среди с многоприложни сървъри.
Прилагане на принципа на най-малкия привилегий
SELinux прилага принципа на най-малкия привилегий на ниво ядро. Процесите могат да достъпват само ресурсите, които явно имат нужда. Дори ако нападателят получи root в ограничен процес, той не може да превиши разрешенията, определени от политиката.
Дневници на одита и криминалистика
Всеки отказан опит за достъп се регистрира в /var/log/audit/audit.log с пълен контекст: процесът, който е участвал, ресурсът, който се опита да достъпи, контекстите на сигурност на двата, и времева печат. Това прави криминалистиката след инцидента драматично по-ефективна.
Сигурност на контейнерите
SELinux предотвратява Docker и Podman контейнерите да избягат своите граници и да достъпят ресурси на хост. Това е критичен слой на защита за контейнеризирани работни натоварвания, където уязвимостите за бягство на контейнер са известен клас атаки.
Съответствие на нормативни изисквания
SELinux е задължителен контрол в няколко рамки за съответствие, включително PCI DSS, HIPAA и военни/правителствени стандарти за сигурност. Работата на SELinux в режим Enforcing с документирана политика е често предварителна условност за преминаване на одити на сигурност в регулирани индустрии.
Основни команди на SELinux за системни администратори
Ето най-често използваните команди за управление на SELinux в ежедневни операции:
Проверка на статуса на SELinux
getenforce
sestatusВъзстановяване на контексти на файлове след преместване на уеб файлове
Когато файлове се преместват вместо да се копират, те могат да запазят неправилни етикети на сигурност. Използвайте restorecon за да поправите това:
restorecon -Rv /var/www/htmlСписък на етикетите на сигурност на файлове
ls -Z /var/www/htmlПозволяване на уеб услуга изходящи връзки (например за API повиквания или прокси)
setsebool -P httpd_can_network_connect 1Позволяване на Apache да се свърже с база данни
setsebool -P httpd_can_network_connect_db 1Преглед на последните отказани действия в дневника на одита
ausearch -m avc -ts recentГенериране на персонализиран модул на политика от отказани действия на одита
audit2allow -a -M my_custom_policy
semodule -i my_custom_policy.pp> Важно: Винаги разследвайте отказите на одита, преди да създавате правила за разрешение. audit2allow е мощен инструмент, но сляпо разрешаване на всички откази отрича целта на SELinux. Разберете какво позволява всяко правило, преди да го приложите.
Често срещани грешки на SELinux и как да ги избегнете
Деактивиране на SELinux вместо поправяне. Най-честата грешка, която администраторите правят, е да деактивират SELinux постоянно, когато срещнат отказ. Това премахва цял слой на защита. Вместо това, използвайте audit2allow и setsebool за да адресирате конкретни проблеми, докато поддържате SELinux активен.
Неправилни етикети на файлове след ръчни разгръщания. Ако разгърнете файлове на приложение чрез копиране им от нестандартно място, те могат да наследят неправилни етикети. Винаги изпълнявайте restorecon след ръчни операции на файлове в уеб корени и директории на приложения.
Непреглед на дневници в режим Permissive. Пропускане
