Поделиться через


Начало работы с SQL Server в SELinux

Эта статья поможет вам приступить к работе с SQL Server в качестве ограниченной службы в дистрибутиве Security-Enhanced Linux (SELinux) на основе Red Hat Enterprise Linux (RHEL).

Что такое Security-Enhanced Linux?

Security-Enhanced Linux (SELinux) — это архитектура безопасности для систем Linux. Он помогает определить элементы управления доступом для приложений, процессов и файлов в системе. SELinux использует набор правил или политик безопасности, чтобы определить, что можно или нельзя получить доступ. SELinux предоставляет администраторам больше контроля над доступом к системе. Дополнительные сведения см. в разделе "Что такое SELinux" (Security-Enhanced Linux).

Дополнительные сведения о включении SELinux для систем Red Hat см. в разделе "Архитектура SELinux". Вы также можете приступить к работе с операционной системой с поддержкой SELinux бесплатно.

SQL Server 2022 в Linux официально сертифицирован с помощью RHEL 9 (по состоянию на июль 2024 г.) и теперь общедоступен в каталоге экосистем Red Hat.

SQL Server и SELinux

Ограниченная служба с SELinux означает, что она ограничена правилами безопасности, явно определенными в политике SELinux. Для SQL Server пользовательские политики SELinux определяются в пакете mssql-server-selinux .

Предпосылки

  1. Включите SELinux и установите его в enforcing режиме. Проверьте состояние SELinux, выполнив sestatus команду.

    sestatus
    

    Ниже приведены ожидаемые выходные данные.

    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
    
  2. Установите пакет mssql-server-selinux, который определяет необходимые пользовательские политики.

Замечание

Если какие-либо предварительные требования не выполнены, SQL Server запускается как неопределенная служба.

Минимальное требование дополнительной версии RHEL

Чтобы запустить SQL Server в качестве ограниченного приложения в RHEL 9, необходимо использовать минимальную дополнительную версию RHEL. Это требование существует из-за зависимостей point-release в пакетах SELinux. Пакет mssql-server-selinux, необходимый для запуска SQL Server в ограниченном режиме, зависит от пакетов selinux-policy и selinux-policy-base.

Действия по выявлению минимальной дополнительной версии RHEL

  1. Добавьте репозиторий SQL Server, содержащий mssql-server-selinux.

    Для SQL Server 2025 (17.x) в RHEL 9:

    sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/9/mssql-server-2025.repo
    

    Для SQL Server 2022 (16.x) в RHEL 9:

    sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/9/mssql-server-2022.repo
    

    Замечание

    Если вы планируете установить RHEL 10, перейдите на репозитории RHEL 10.

  2. Выполните следующую команду, чтобы просмотреть зависимости политики SELinux:

    sudo dnf repoquery --requires --latest-limit=1 mssql-server-selinux | egrep '^selinux-policy(-base)?'
    
  3. Выходные данные включают минимальную версию политики SELinux, указанную суффиксом, .el9_6например. Этот суффикс представляет минимальный дополнительный выпуск RHEL 9, для который была создана политика. Например, .el9_6 соответствует RHEL 9.6.

    Если такой суффикс не отображается в выходных данных, обратитесь к документации по Red Hat, чтобы определить минимальную дополнительную версию RHEL, связанную с этой сборкой политики SELinux. В следующем примере требуется 38.1.53-5базовая версия SELinux.

    sudo dnf repoquery --requires --latest-limit=1 mssql-server-selinux | egrep '^selinux-policy(-base)?'
    

    Ниже приведен пример выходных данных:

    selinux-policy >= 38.1.53-5.el9_6
    selinux-policy-base >= 38.1.53-5.el9_6
    

    В этом примере самым высоким требованием с тегом для меньшей версии является 38.1.53-5.el9_6. Поэтому, чтобы установить SQL Server с SELinux (mssql-server-selinux), необходимо как минимум RHEL 9.6, и запускать его как в режиме ограниченного приложения на RHEL 9.

Установка SQL Server в качестве ограниченной службы

По умолчанию mssql-server пакет устанавливает SQL Server без политики SELinux, а SQL Server выполняется как неопределенная служба. Установка пакета mssql-server автоматически включает булевый параметр selinux_execmode. Вы можете убедиться, что SQL Server работает без ограничений, используя следующую команду:

ps -eZ | grep sqlservr

Ниже приведены ожидаемые выходные данные.

system_u:system_r:unconfined_service_t:s0 48265 ? 00:00:02 sqlservr

При установке mssql-server-selinux пакета он включает настраиваемую политику SELinux, которая ограничивает sqlservr процесс. При установке этой политики булевое значение selinuxuser_execmod сбрасывается и заменяется политикой с именем mssql. Эта политика ограничивает sqlservr процесс в новом mssql_server_t домене.

ps -eZ | grep sqlservr

Ниже приведены ожидаемые выходные данные.

system_u:system_r:mssql_server_t:s0 48941 ?      00:00:02 sqlservr

Типы SQL Server и SELinux

При установке необязательной политики SELinux с помощью mssql-server-selinux пакета он определяет некоторые новые типы:

Политика SELinux Описание
mssql_opt_t Установка файлов mssql-server в /opt/mssql
mssql_server_exec_t Исполняемые файлы по адресу /opt/mssql/bin/
mssql_paldumper_exec_t Исполняемые файлы и скрипты, требующие специальных разрешений для управления базовыми дампами
mssql_conf_exec_t Инструмент управления в /opt/mssql/bin/mssql-conf
mssql_var_t Метка для файлов по адресу /var/opt/mssql
mssql_db_t Метка для файлов базы данных по адресу /var/opt/mssql/data

Примеры

В следующем примере показано изменение расположения базы данных при запуске SQL Server в качестве ограниченной службы.

  1. Создайте нужные каталоги и примечайте их как mssql_db_t.

    sudo mkdir -p /opt/mydb/
    sudo chown mssql:mssql /opt/mydb
    sudo semanage fcontext -a -t mssql_db_t "/opt/mydb(/.*)?"
    sudo restorecon -R -v /opt/mydb
    

    semanage fcontext Команда управляет сопоставлением контекста файла SELinux. Параметр -a добавляет новое правило контекста файла, а параметр -t определяет тип SELinux, который в этом случае используется как mssql_db_t для файлов базы данных SQL Server. Наконец, команда указывает шаблон пути, который находится /opt/mydb в этом примере, и включает все файлы и подкаталогы в нем.

  2. Задайте расположение базы данных по умолчанию с помощью mssql-conf и запустите программу установки.

    sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /opt/mydb/data
    sudo systemctl restart mssql-server
    
  3. Проверьте, создав новую базу данных с помощью Transact-SQL:

    CREATE DATABASE TestDatabase;
    GO
    
  4. Убедитесь, что новая база данных создана с соответствующими метками.

    sudo ls -lZ /opt/mydb/data/
    

    Ниже приведены ожидаемые выходные данные.

    total 16384
    -rw-rw----. 1 mssql mssql system_u:object_r:mssql_db_t:s0 8388608 Aug  2 14:27 TestDatabase_log.ldf
    -rw-rw----. 1 mssql mssql system_u:object_r:mssql_db_t:s0 8388608 Aug  2 14:27 TestDatabase.mdf
    

    В предыдущем примере вы можете увидеть, что у файла есть тип mssql_db_t, связанный с новыми созданными файлами.