SELinux (Security Enhanced Linux) — это механизм контроля доступа, встроенный в RHEL/CentOS, который добавляет второй уровень защиты поверх традиционных прав Unix. Его задача — ограничивать, что может делать процесс или пользователь в случае, если злоумышленнику удалось получить доступ к системе. Это особенно важно для серверов: уязвимость в одном приложении не должна автоматически давать хакеру полный контроль над системой.
Таким образом, даже если сервис скомпрометирован, он не сможет читать или записывать файлы или общаться с другими службами, не входящими в список разрешённых. При этом даже рут-процессам можно задать строгие правила, снижая риски как ошибок, так и злоупотреблений.
Как это работает
SELinux использует так называемые «контексты», присвоенные файлам, процессам и сетевым портам. Контекст выглядит как набор меток (user:role:type:level), но для большинства пользователей важна только часть «type». Политики описывают, какие типы процессов могут обращаться к каким типам файлов или портов.
В упрощённом виде это можно описать так: представьте, что каждому объекту присвоено цветовое обозначение. Политика говорит: синие приложения могут читать только зелёные файлы и отправлять данные на жёлтые порты. При такой схеме, даже если злоумышленник получит доступ к какой-то программе и запустит внутри неё вредоносный код, ущерб, который он потенциально может нанести, будет заметно ограничен.
У этой системы есть три режима:
- Enforcing — активная работа. Это обычный рабочий режим для защиты;
- Permissive — действия не блокируются, любые нарушения политик вносятся в журнал. Полезен для отладки и перехода на SELinux без простоев;
- Disabled — защита отключена. Делать это стоит только при осознанных причинах и с пониманием рисков.
Рекомендации для работы с SELInux
У некоторых приложений при включенном режиме Enforcing могут возникать проблемы. Самый простой способ их решить — это перейти на режим Disabled. Однако не стоит делать из этого привычку, потому что это серьёзно повышает уязвимость системы. Вместо этого лучше переключиться на Permissive и провести диагностику.
Для этого нужно проверить логи: в /var/log/audit и journalctl можно найти подсказки о том, какие именно действия были заблокированы.
Если вы пользуетесь стандартными сервисами, можете смело прибегать к поставляемым политикам — большинство пакетов из репозиториев RHEL/CentOS уже настроены с корректными контекстами и должны сразу работать без проблем. Любые изменения следует документировать, чтобы не терять контроль при обновлениях.
В целом, SELinux — это мощный инструмент, заметно способствующий защите от злонамеренных действий. Он сильно снижает риск эскалации привилегий и распространения атак между службами. Что не менее важно, при правильном использовании сделать это можно с минимальным вмешательством и администрированием. Поэтому его освоение — значимая часть обучения использования RHEL.