SELinux (Security-Enhanced Linux) — это расширение для Linux, которое обеспечивает усиленный контроль доступа на основе политик. Разработанное NSA и внедренное в ядро Linux, SELinux добавляет слой безопасности, который может значительно повысить защиту системы от несанкционированного доступа и атак.
Основная концепция SELinux заключается в использовании модели контроля доступа на основе политик, что позволяет управлять доступом на уровне процессов, пользователей и объектов.
Основные компоненты SELinux
Политики безопасности
Политики SELinux определяют, какие действия разрешены или запрещены для различных процессов и пользователей. Они включают:
- Политики уровня ядра: Управляют доступом на уровне системных вызовов.
- Политики пользовательского уровня: Определяют доступ к файлам, сетевым портам и другим ресурсам на уровне приложений.
Пример команды для просмотра текущей политики:
sestatus
Эта команда покажет текущий статус SELinux, включая режим работы и загруженные политики.
Контексты безопасности
Каждый объект в системе (файл, процесс, порт) имеет свой контекст безопасности, который состоит из:
- Тип (Type): Указывает тип объекта и используется для применения правил политики.
- Роль (Role): Определяет, какие роли имеет процесс или пользователь.
- Пользователь (User): SELinux-пользователь, связанный с объектом.
- Уровень (Level): Используется для управления многослойной безопасностью (MLS).
Пример команды для проверки контекста файла:
ls -Z /path/to/file
Эта команда покажет SELinux-контекст для указанного файла.
Режимы работы
SELinux может работать в нескольких режимах:
- Enforcing (Принудительный): Политики полностью применяются, и любые нарушения блокируются.
- Permissive (Разрешающий): Политики не применяются, но нарушения регистрируются в журналах.
- Disabled (Отключён): SELinux полностью отключён.
Пример команды для изменения режима работы:
setenforce 1 # Переключение в режим Enforcing
setenforce 0 # Переключение в режим Permissive
Основные команды CLI SELinux
Работа с SELinux требует знания основных команд для управления политиками, контекстами и журналами. Вот список наиболее часто используемых команд и их описание:
Команды для управления режимами SELinux
-
Проверка текущего режима SELinux:
bashsestatus
Вывод включает текущий режим SELinux, активность, политику и статус контекстов.
-
Изменение режима SELinux (требуются права суперпользователя):
bashsetenforce [0|1]
0
— режим Permissive (разрешающий).1
— режим Enforcing (принудительный).
Команды для управления политиками
-
Просмотр загруженных политик:
bashsemodule -l
Отображает список всех загруженных модулей политики.
-
Загрузка нового модуля политики:
bashsemodule -i /path/to/module.pp
Загрузка и установка пользовательского модуля политики в формате
.pp
. -
Удаление модуля политики:
bashsemodule -r module_name
Удаление указанного модуля политики из системы.
Команды для управления контекстами
-
Просмотр контекста безопасности файла:
bashls -Z /path/to/file
Показывает SELinux-контекст для указанного файла или каталога.
-
Изменение контекста безопасности файла:
bashchcon -t target_type /path/to/file
Устанавливает SELinux-контекст типа для указанного файла.
-
Восстановление стандартных контекстов для файлов:
bashrestorecon -Rv /path/to/directory
Восстанавливает контексты безопасности для всех файлов в указанном каталоге.
Команды для анализа журналов
-
Просмотр записей о нарушениях SELinux в журнале аудита:
bashausearch -m avc
Выводит записи о нарушениях, связанных с доступом к ресурсам.
-
Создание модуля политики на основе записей о нарушениях:
bashaudit2allow -a -M mypolicy semodule -i mypolicy.pp
Создает и загружает новый модуль политики на основе анализа журнала аудита.
Лучшие практики использования SELinux
1. Настройка политики в режиме Permissive
Перед переключением в режим Enforcing запускайте SELinux в режиме Permissive для диагностики нарушений. Это позволит вам корректировать политику, не прерывая работу системы.
Пример диагностики нарушений:
ausearch -m avc --start today
Эта команда ищет нарушения в журнале аудита SELinux за текущий день.
2. Использование правильных контекстов безопасности
Следите за корректностью контекстов безопасности для всех файлов и процессов. Применяйте restorecon
для восстановления правильных контекстов.
Пример восстановления контекста для файла:
restorecon -Rv /path/to/directory
Команда восстанавливает контексты для всех файлов и поддиректорий указанного каталога.
3. Мониторинг и анализ журналов
Регулярный мониторинг журналов SELinux позволяет обнаруживать и устранять проблемы. Используйте audit2allow
для генерации и проверки политик на основе логов.
Пример использования audit2allow
:
grep avc /var/log/audit/audit.log | audit2allow -M mypolicy
semodule -i mypolicy.pp
Эти команды создают модуль политики на основе записей в журнале аудита и загружают его в систему.
4. Периодическое обновление политик
Убедитесь, что политики SELinux обновляются в соответствии с изменениями в конфигурациях системы и установленных приложениях. Регулярно проверяйте и при необходимости корректируйте политику для соответствия текущему состоянию системы.
5. Тестирование новых приложений и служб
При установке новых приложений и служб запускайте их в режиме Permissive для проверки возможных нарушений политики.
Пример создания пользовательской политики:
audit2allow -a -M mycustompolicy
semodule -i mycustompolicy.pp
Этот процесс создаст и загрузит пользовательскую политику на основе зарегистрированных нарушений.
6. Создание и использование собственных политик
Создавайте и модифицируйте политики в ответ на конкретные потребности вашей системы. Используйте semanage
для управления правилами безопасности.
Пример добавления новой категории для файла:
semanage fcontext -a -t my_custom_t '/path/to/file(/.*)?'
restorecon -Rv /path/to/file
Эти команды добавляют новую категорию для указанного пути и применяют её к файлам в указанной директории.
7. Обучение и документация
Обучение персонала и поддержка актуальной документации критичны для эффективного использования SELinux. Ознакомьтесь с ресурсами от Red Hat и других разработчиков SELinux для получения подробных инструкций и лучших практик.
Пример защиты web-сервера с помощью SELinux
Рассмотрим пример защиты Apache Web-сервера с использованием SELinux. Мы настроим SELinux, чтобы обеспечить, что веб-сервер имеет доступ только к необходимым ресурсам и портам.
Шаг 1: Проверка и настройка режима SELinux
Убедитесь, что SELinux включен и работает в режиме Enforcing:
sestatus
Если SELinux работает в режиме Permissive, переключитесь на Enforcing:
setenforce 1
Шаг 2: Установка и настройка Apache
Убедитесь, что Apache установлен и работает:
yum install httpd
systemctl start httpd
systemctl enable httpd
Шаг 3: Проверка контекста безопасности
По умолчанию файлы веб-контента должны иметь контексты безопасности, соответствующие типу httpd_sys_content_t
. Проверьте контексты для файлов веб-контента:
ls -Z /var/www/html
Если файлы не имеют нужного контекста, измените его:
chcon -R -t httpd_sys_content_t /var/www/html
Шаг 4: Настройка политик SELinux
SELinux уже включает политики для большинства веб-серверов, но иногда может понадобиться создание пользовательских политик. Для настройки доступа к определенным ресурсам или портам используйте следующие команды:
Пример 1: Разрешение Apache доступ к нестандартному порту
Если вы хотите, чтобы Apache имел доступ к нестандартному порту (например, 8080), добавьте его в список разрешенных портов:
semanage port -a -t http_port_t -p tcp 8080
Пример 2: Разрешение Apache записи в определенные каталоги
Если необходимо, чтобы Apache имел право записывать в определенные каталоги, создайте и примените пользовательскую политику:
audit2allow -M myhttpdpolicy
semodule -i myhttpdpolicy.pp
Пример 3: Разрешение Apache доступа к сетевым ресурсам
Для доступа Apache к сетевым ресурсам, например, для соединений с базами данных, убедитесь, что все необходимые контексты и правила разрешены. Используйте audit2allow
для создания политики:
ausearch -m avc -ts recent | audit2allow -M httpd_network
semodule -i httpd_network.pp
Шаг 5: Тестирование и мониторинг
После настройки убедитесь, что веб-сервер работает корректно. Проверьте журналы SELinux для выявления возможных нарушений:
ausearch -m avc --start today
Если обнаружены нарушения, отреагируйте на них, создав или обновив политику, и повторите процесс проверки.
Заключение
SELinux представляет собой мощный инструмент для обеспечения безопасности систем на базе Linux, добавляя уровень контроля доступа, который значительно повышает защиту от атак и уязвимостей. Знание основных команд CLI SELinux и умение применять их на практике позволяют эффективно управлять безопасностью системы.
Пример защиты веб-сервера показывает, как можно настроить SELinux для обеспечения строгого контроля доступа, что повышает защиту вашего сервера и приложений.
Следование лучшим практикам и регулярное обновление политик помогут поддерживать высокий уровень безопасности вашей инфраструктуры.
|
Внимание! Данная статья не является официальной документацией.Использование информации необходимо выполнять с осторожностью, используя для этого тестовую среду.
Если у вас есть вопросы о построении современных систем резервного копирования, репликации, синхронизации данных и защиты от программ вымогателей обратитесь в нашу компанию для получения консультации о современных технологиях резервного копирования и восстановления данных. Наша компания имеет более чем 25-летний опыт в этой области. |