Partager via


Bien démarrer avec SQL Server sur SELinux

Cet article vous aide à bien démarrer avec SQL Server en tant que service limité sur une distribution Security-Enhanced Linux (SELinux) basée sur Red Hat Enterprise Linux (RHEL).

Qu’est-ce que Security-Enhanced Linux ?

Security-Enhanced Linux (SELinux) est une architecture de sécurité pour les systèmes Linux. Il permet de définir des contrôles d’accès pour les applications, les processus et les fichiers sur un système. SELinux utilise un ensemble de règles, ou stratégies de sécurité, pour définir ce qui peut ou ne peut pas être accessible. SELinux permet aux administrateurs de contrôler davantage qui peut accéder au système. Pour plus d’informations, consultez Qu’est-ce que SELinux (Security-Enhanced Linux).

Pour plus d’informations sur l’activation de SELinux pour les systèmes Red Hat, consultez architecture SELinux. Vous pouvez également commencer à utiliser gratuitement un système d’exploitation compatible AVEC SELinux.

SQL Server 2022 sur Linux est officiellement certifié avec RHEL 9 (à compter de juillet 2024) et est désormais en disponibilité générale sur le catalogue de l’écosystème Red Hat .

SQL Server et SELinux

Un service limité avec SELinux signifie qu’il est limité par les règles de sécurité, explicitement définies dans la stratégie SELinux. Pour SQL Server, les stratégies personnalisées SELinux sont définies dans le package mssql-server-selinux.

Conditions préalables

  1. Activez SELinux et définissez-le en enforcing mode. Vérifiez l’état SELinux en exécutant la sestatus commande.

    sestatus
    

    Voici la sortie attendue.

    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. Installez le package mssql-server-selinux qui définit les stratégies personnalisées requises.

Note

Si l’une des conditions préalables n’est pas remplie, SQL Server s’exécute en tant que service non défini.

Configuration minimale requise pour la version mineure RHEL

Pour exécuter SQL Server en tant qu’application limitée sur RHEL 9, vous devez utiliser une version minimale de RHEL mineure. Cette exigence existe en raison des dépendances de versions mineures dans les paquets SELinux. Le package mssql-server-selinux, nécessaire pour exécuter SQL Server en mode limité, dépend des packages selinux-policy et selinux-policy-base.

Étapes d’identification de la version mineure minimale de RHEL

  1. Ajoutez le référentiel SQL Server qui contient mssql-server-selinux.

    Pour SQL Server 2025 (17.x) sur RHEL 9 :

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

    Pour SQL Server 2022 (16.x) sur RHEL 9 :

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

    Note

    Si vous envisagez d’installer sur RHEL 10, passez aux référentiels RHEL 10.

  2. Exécutez la commande suivante pour afficher les dépendances de stratégie SELinux :

    sudo dnf repoquery --requires --latest-limit=1 mssql-server-selinux | egrep '^selinux-policy(-base)?'
    
  3. La sortie inclut la version minimale de la stratégie SELinux requise, indiquée par un suffixe tel que .el9_6. Ce suffixe représente la version mineure minimale de RHEL 9 pour laquelle la stratégie a été créée. Par exemple, .el9_6 correspond à RHEL 9.6.

    Si aucun suffixe de ce type n’apparaît dans la sortie, reportez-vous à la documentation Red Hat pour déterminer la version mineure RHEL minimale associée à cette version de la politique SELinux. Dans l’exemple suivant, la version de base SELinux requise est 38.1.53-5.

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

    Voici un exemple de sortie :

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

    Dans cet exemple, l’exigence avec l'étiquette de version mineure la plus élevée est 38.1.53-5.el9_6. Par conséquent, vous avez besoin d’au moins RHEL 9.6 pour installer SQL Server avec SELinux (mssql-server-selinux), puis l’exécuter en tant qu’application limitée sur RHEL 9.

Installer SQL Server en tant que service limité

Par défaut, le package mssql-server installe SQL Server sans la stratégie SELinux, et SQL Server s’exécute en tant que service non défini. L’installation du package mssql-server active automatiquement le selinux_execmode booléen. Vous pouvez vérifier que SQL Server est en cours d'exécution sans restriction à l’aide de la commande suivante :

ps -eZ | grep sqlservr

Voici la sortie attendue.

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

Lorsque vous installez le mssql-server-selinux package, il active une stratégie SELinux personnalisée qui limite le sqlservr processus. Lorsque vous installez cette stratégie, la selinuxuser_execmod valeur booléenne est réinitialisée et remplacée par une stratégie nommée mssql. Cette stratégie limite le sqlservr processus dans le nouveau mssql_server_t domaine.

ps -eZ | grep sqlservr

Voici la sortie attendue.

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

Types SQL Server et SELinux

Lorsque vous installez la stratégie SELinux facultative à l’aide du mssql-server-selinux package, elle définit de nouveaux types :

Stratégie SELinux Descriptif
mssql_opt_t Installer des fichiers de mssql-server sur /opt/mssql
mssql_server_exec_t Fichiers exécutables dans /opt/mssql/bin/
mssql_paldumper_exec_t Exécutables et scripts nécessitant des autorisations spéciales pour gérer les décharges mémoire
mssql_conf_exec_t Outil de gestion dans /opt/mssql/bin/mssql-conf
mssql_var_t Étiquette pour les fichiers dans /var/opt/mssql
mssql_db_t Étiquette pour les fichiers de base de données dans /var/opt/mssql/data

Exemples

L’exemple suivant illustre la modification de l’emplacement de la base de données lorsque SQL Server s’exécute en tant que service limité.

  1. Créez les répertoires souhaités et étiquetez-les en tant que 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
    

    La commande semanage fcontext gère le mappage de contexte de fichier SELinux. Le -a paramètre ajoute une nouvelle règle de contexte de fichier et le -t paramètre définit le type SELinux à appliquer, ce qui, dans ce cas, concerne mssql_db_t les fichiers de base de données SQL Server. Enfin, la commande spécifie le modèle de chemin d’accès, qui se trouve /opt/mydb dans cet exemple, et inclut tous les fichiers et sous-répertoires qu’il contient.

  2. Définissez l’emplacement de la base de données par défaut à l’aide de mssql-conf, puis exécutez la configuration.

    sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /opt/mydb/data
    sudo systemctl restart mssql-server
    
  3. Vérifiez en créant une base de données à l’aide de Transact-SQL :

    CREATE DATABASE TestDatabase;
    GO
    
  4. Vérifiez que la nouvelle base de données a été créée avec les étiquettes appropriées.

    sudo ls -lZ /opt/mydb/data/
    

    Voici la sortie attendue.

    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
    

    Dans l’exemple précédent, vous pouvez voir que le fichier a le mssql_db_t type associé aux nouveaux fichiers créés.