Настройка 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 при развёртывании нового региона, выполните следующие действия:

  1. Откройте веб-интерфейс развёрнутого GitLab.

  2. Настройте следующие параметры в файле globals.d/REGION.yml в репозитории региона:

    # Включение профилей SELinux
    enable_selinux_profiles: "yes"
    # Изменение состояния SELinux на узлах
    change_selinux: true
    # Режим работы SELinux
    selinux_state: "enforcing"
    
  3. Откройте проект project_k / deployments / <имя региона>.

  4. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  5. Запустите пайплайн New Pipeline.

  6. Запустите задачу deploy в созданном пайплайне.

  7. Дождитесь завершения выполнения задачи.

SELinux будет автоматически настроен на всех узлах с SberLinux.

Включение на существующем регионе

Для включения SELinux на уже развёрнутом регионе:

  1. Внесите изменения в файл globals.d/REGION.yml в репозитории региона как описано выше.

  2. Запустите процесс переконфигурирования региона:

    $ kolla-ansible -i /etc/kolla/inventory reconfigure
    
  3. Дождитесь завершения процесса переконфигурирования.

  4. Перезапустите все контейнеры для применения новых политик:

    $ 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, выполните следующие действия:

  1. Измените параметры в файле globals.d/REGION.yml в репозитории региона:

    # Отключение профилей SELinux
    enable_selinux_profiles: "no"
    # Изменение состояния SELinux
    change_selinux: true
    # Отключение SELinux
    selinux_state: "disabled"
    
  2. Выполните переконфигурирование региона:

    $ kolla-ansible -i /etc/kolla/inventory reconfigure
    
  3. Для полного отключения 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.