Настройка SELinux¶
SELinux (Security-Enhanced Linux) — это система принудительного контроля доступа, которая обеспечивает дополнительный уровень безопасности для компонентов платформы. В платформе реализована поддержка SELinux профилей для всех компонентов, запускаемых в контейнерах.
SELinux позволяет ограничивать доступ контейнеров к ресурсам узла, таким как сокеты, файлы и системные вызовы. Это достигается через применение политик безопасности, которые определяют разрешённые действия для каждого процесса.
Примечание
Функциональность SELinux доступна только для узлов под управлением операционной системы SberLinux. На узлах с Ubuntu SELinux не поддерживается.
Принцип работы¶
В платформе SELinux работает на основе профилей Kolla, которые автоматически загружаются при развёртывании региона. Каждый сервис платформы получает свой профиль безопасности, который определяет его права доступа к системным ресурсам.
Для контейнеров используются стандартные политики container_t и container_runtime_t, которые обеспечивают необходимый уровень изоляции. При включённом SELinux все контейнеры Podman запускаются с соответствующими метками безопасности.
Режимы работы¶
SELinux в платформе поддерживает три режима работы:
Enforcing — режим по умолчанию при включённом SELinux. Все действия, нарушающие политику безопасности, блокируются и регистрируются в журнале. Это рабочий режим, обеспечивающий максимальную защиту.
Permissive — режим отладки, в котором нарушения политики безопасности только регистрируются в журнале, но не блокируются. Используйте этот режим для тестирования и выявления проблем с политиками.
Disabled — полное отключение SELinux. Система принудительного контроля доступа не работает.
Включение SELinux¶
Включение при развёртывании нового региона¶
Для включения SELinux при развёртывании нового региона, выполните следующие действия:
Откройте веб-интерфейс развёрнутого GitLab.
Настройте следующие параметры в файле
globals.d/REGION.ymlв репозитории региона:# Включение профилей SELinux enable_selinux_profiles: "yes" # Изменение состояния SELinux на узлах change_selinux: true # Режим работы SELinux selinux_state: "enforcing"
Откройте проект project_k / deployments / <имя региона>.
Создайте новый пайплайн: .
Запустите пайплайн New Pipeline.
Запустите задачу deploy в созданном пайплайне.
Дождитесь завершения выполнения задачи.
SELinux будет автоматически настроен на всех узлах с SberLinux.
Включение на существующем регионе¶
Для включения SELinux на уже развёрнутом регионе:
Внесите изменения в файл
globals.d/REGION.ymlв репозитории региона как описано выше.Запустите процесс переконфигурирования региона:
$ kolla-ansible -i /etc/kolla/inventory reconfigure
Дождитесь завершения процесса переконфигурирования.
Перезапустите все контейнеры для применения новых политик:
$ kolla-ansible -i /etc/kolla/inventory restart
Проверка статуса SELinux¶
Проверка общего статуса¶
Для проверки текущего состояния SELinux подключитесь к узлу по SSH и выполните команду:
$ sestatus
В выводе команды обратите внимание на следующие параметры:
SELinux status: enabled— SELinux включён.Current mode: enforcing— текущий режим работы.Mode from config file: enforcing— режим из конфигурационного файла.
Пример вывода при включённом SELinux:
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 33
Проверка загруженных профилей Kolla¶
Для проверки загруженных профилей платформы выполните:
$ semodule -l | grep kolla
Команда выведет список всех загруженных модулей SELinux для сервисов Kolla. Пример вывода:
kolla_adminui_backend
kolla_adminui_frontend
kolla_barbican_api
kolla_barbican_keystone_listener
kolla_barbican_worker
kolla_cinder_api
kolla_cinder_scheduler
kolla_cinder_volume
kolla_glance_api
kolla_haproxy
kolla_horizon
kolla_keystone
kolla_neutron_server
kolla_nova_api
kolla_nova_conductor
kolla_nova_scheduler
Проверка контекстов контейнеров¶
Для проверки контекстов безопасности работающих контейнеров используйте:
$ podman ps --format "table {{.Names}}\t{{.Label \"security.selinux\"}}"
Эта команда покажет SELinux-метки для всех запущенных контейнеров.
Выключение SELinux¶
Предупреждение
Отключение SELinux снижает уровень безопасности платформы. Выполняйте эту операцию только при наличии веских оснований и после согласования с службой информационной безопасности.
Для выключения SELinux, выполните следующие действия:
Измените параметры в файле
globals.d/REGION.ymlв репозитории региона:# Отключение профилей SELinux enable_selinux_profiles: "no" # Изменение состояния SELinux change_selinux: true # Отключение SELinux selinux_state: "disabled"
Выполните переконфигурирование региона:
$ kolla-ansible -i /etc/kolla/inventory reconfigure
Для полного отключения SELinux потребуется перезагрузка узлов.
Устранение проблем¶
Анализ отказов доступа¶
При возникновении проблем с доступом контейнеров к ресурсам проверьте журнал аудита SELinux:
$ ausearch -m AVC -ts recent
Для более подробного анализа используйте утилиту audit2allow:
$ ausearch -m AVC -ts recent | audit2allow -w
Эта команда покажет человеко-читаемое описание заблокированных действий и возможные решения.
Временное переключение в режим Permissive¶
Для отладки можно временно переключить SELinux в режим Permissive без изменения конфигурации:
$ setenforce 0
Для возврата в режим Enforcing:
$ setenforce 1
Примечание
Изменение режима через setenforce действует только до перезагрузки системы.
Дополнительные настройки¶
Включение многоуровневой безопасности (MLS)¶
Для организаций с повышенными требованиями к безопасности доступна настройка многоуровневой модели безопасности MLS. При использовании MLS контейнерам присваиваются уровни секретности (s0, s1, s2, s3), и процессы с более низким уровнем не могут взаимодействовать с данными более высокого уровня.
Для включения MLS добавьте в конфигурацию:
# Включение параноидального режима SELinux с MLS
enable_paranoic_selinux: "yes"
При этом контейнеры платформы будут запускаться с максимальным уровнем безопасности s3, что исключит возможность взаимодействия с ними со стороны других процессов.
Ограничения и особенности¶
На узлах с Ubuntu используется AppArmor вместо SELinux.
Изменение режима SELinux требует перезапуска всех контейнеров.
Некоторые сторонние приложения могут требовать дополнительной настройки политик SELinux.