SELinux

Описание

  • Безопасность системы Linux построена на базе принципов безопасности UNIX

    • Решения в рамках обеспечения безопасности UNIX системы развивались без учета потребностей современных требований к IT инфраструктуре

    • Больгинство этих решений фокусируется на определенной части ОС, таким образом для обеспечения безопасности всей системы нужно собрать множество модулей

  • SELinux обеспечивает комлексное единое решение для целей безопасности системы

    • Главный принцип: "что не разрешено, то запрещено"

    • Исходя из этого "неизвестным" сервисам в системе всегда необходима дополнительная конфигурация для активации их в системе с включенным SELinux

Режимы SELinux

  • SELinux имеет два базовых состояния: включен и выключен

    • Смена состояния возможна только с перезагрузкой системы

  • В включенном (enabled) состоянии есть два режима:

    • Enforcing - включены все механизмы

    • Permissive - логирование, но без блокирования сервисов

    • Смена между режимами не требует перезагрузки

  • setenforce - смена режима

  • getenforce - отобразить текущий статус

  • /etc/sysconfig/selinux позволяет настроить статус по-умолчанию

  • После перевода SELinux из отключенного состояния во включенное, система будет перемаркирована, о чем уведомит в консоли при перезагрузке

    • Это может занять продолжительное время в зависимости от размера файлов и системы

Маркираторы и логические операторы

  • Каждый объект в системе промаркирован с помощью context label

    • Он состоит из трех компонентов:

      • user - пользовательский контекст

      • role - ролевой контекст

      • type - флаги операций, доступных объекту

    • Многие команды поддерживают опцию -Z для отображения текущей контекстной информации

    • Типы контекстов используется в правилах политик для определения того, какие объекты к каким таргетам имеют доступ

    • Пример вывода контекстной информации:

      • unconfined - статус процесса, который не блокируется SELinux

      • system_u - пользовательский контекст

      • system_r - ролевой контекст

      • kernel_t - контекст типа

  • Доступ определяется правилами в SELinux, которые сопоставляют какие контексты могут между собой взаимодействовать

  • Логический оператор (boolean) - есть переключатель on/off

    • Используется для включения или отключения определенных категорий функциональности разом

    • Статус можно проверить через getsebool

  • Изменить значение можно через setsebool -P <boolean_name>

Файловый контекст

  • Установить файловый контекст:

    • semanage fcontext

    • Данная команда запишет контекст в политики SELinux, но не меняет значения в файловой системе

    • Для установки политики в файловую систему необходимо использовать restorecon

    • Альтернативно можно использовать touch /.autorelabel для перемаркировки всех файлов

    • Система должна быть перезагружена

Пример:

  • Если необходимо заменить для HTTP сервера директорию, то соответственно для контекста типа надо произвести замену (в данном случае меняется /var/www/html на /web и создается новое правило)

  • restorecon для применения изменений

Логи SELinux

  • SELinux использует auditd для записи логов

  • Данные логи трудны для восприятия

  • Для интерпретации логов аудита в удобочитаемые логи /var/log/messages используется sealert

  • Использование sealert вместе с UUID даст рекомендации по решению проблемы с SELinux

Last updated

Was this helpful?