Condividi tramite


Introduzione a SQL Server in SELinux

Questo articolo illustra come iniziare a usare SQL Server come servizio limitato in una distribuzione Security-Enhanced Linux (SELinux) basata su Red Hat Enterprise Linux (RHEL).

Che cos'è Security-Enhanced Linux?

Security-Enhanced Linux (SELinux) è un'architettura di sicurezza per i sistemi Linux. Consente di definire controlli di accesso per applicazioni, processi e file in un sistema. SELinux utilizza un insieme di regole, o criteri di sicurezza, per definire a cosa è possibile o non possibile accedere. SELinux offre agli amministratori un maggiore controllo su chi può accedere al sistema. Per altre informazioni, vedere Che cos'è SELinux (Security-Enhanced Linux).

Per informazioni dettagliate su come abilitare SELinux per i sistemi Red Hat, vedere SELinux Architecture. È anche possibile iniziare gratuitamente con un sistema operativo abilitato SELinux .

SQL Server 2022 in Linux è ufficialmente certificato con RHEL 9 (a partire da luglio 2024) ed è ora disponibile a livello generale nel catalogo Red Hat Ecosystem.

SQL Server e SELinux

Un servizio limitato con SELinux significa che è limitato dalle regole di sicurezza, definite in modo esplicito nei criteri SELinux. Per SQL Server, i criteri personalizzati SELinux vengono definiti nel pacchetto mssql-server-selinux.

Prerequisiti

  1. Abilitare SELinux e impostarlo sulla enforcing modalità. Controllare lo stato DI SELinux eseguendo il sestatus comando .

    sestatus
    

    Ecco l'output previsto.

    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. Installare il pacchetto mssql-server-selinux che definisce i criteri personalizzati necessari.

Nota

Se uno dei prerequisiti non è soddisfatto, SQL Server viene eseguito come servizio non definito .

Requisito di versione secondaria di RHEL minimo

Per eseguire SQL Server come applicazione limitata in RHEL 9, è necessario usare una versione minima di RHEL secondaria. Questo requisito esiste a causa delle dipendenze da punto a rilascio nei pacchetti SELinux. Il pacchetto mssql-server-selinux, necessario per eseguire SQL Server in modalità limitata, dipende dai pacchetti selinux-policy e selinux-policy-base.

Passaggi per identificare la versione minima di RHEL secondaria

  1. Aggiungere il repository di SQL Server che contiene mssql-server-selinux.

    Per SQL Server 2025 (17.x) in RHEL 9:

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

    Per SQL Server 2022 (16.x) in RHEL 9:

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

    Nota

    Se si prevede di installare in RHEL 10, passare ai repository RHEL 10.

  2. Eseguire il comando seguente per visualizzare le dipendenze dei criteri SELinux:

    sudo dnf repoquery --requires --latest-limit=1 mssql-server-selinux | egrep '^selinux-policy(-base)?'
    
  3. L'output include la versione minima dei criteri SELinux richiesta, indicata da un suffisso come .el9_6, ad esempio. Questo suffisso rappresenta la versione secondaria minima di RHEL 9 per cui è stata costruita la politica. Ad esempio, .el9_6 corrisponde a RHEL 9.6.

    Se nell'output non viene visualizzato alcun suffisso di questo tipo, fare riferimento alla documentazione di Red Hat per determinare la versione secondaria RHEL minima associata alla compilazione dei criteri SELinux. Nell'esempio seguente la versione di base SELinux richiesta è 38.1.53-5.

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

    Ecco l'output di esempio:

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

    In questo esempio, il requisito con tag versione secondaria più alto è 38.1.53-5.el9_6. È quindi necessario almeno RHEL 9.6 per installare SQL Server con SELinux (mssql-server-selinux) ed eseguirlo come applicazione limitata in RHEL 9.

Installare SQL Server come servizio limitato

Per impostazione predefinita, il pacchetto mssql-server installa SQL Server senza la policy SELinux, e SQL Server viene eseguito come servizio non confinato. L'installazione del pacchetto mssql-server abilita automaticamente l'selinux_execmode booleano. È possibile verificare che SQL Server sia in esecuzione senza limitazioni usando il comando seguente:

ps -eZ | grep sqlservr

Ecco l'output previsto.

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

Quando si installa il mssql-server-selinux pacchetto, viene abilitato un criterio SELinux personalizzato che limita il sqlservr processo. Quando si installa questo criterio, il selinuxuser_execmod valore booleano viene reimpostato e viene sostituito da un criterio denominato mssql. Questo criterio limita il sqlservr processo nel nuovo mssql_server_t dominio.

ps -eZ | grep sqlservr

Ecco l'output previsto.

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

I tipi di SQL Server e SELinux

Quando si installano i criteri SELinux facoltativi usando il mssql-server-selinux pacchetto, vengono definiti alcuni nuovi tipi:

Politica SELinux Descrizione
mssql_opt_t Installare i file di mssql-server in /opt/mssql
mssql_server_exec_t File eseguibili in /opt/mssql/bin/
mssql_paldumper_exec_t File eseguibili e script che richiedono autorizzazioni speciali per gestire i dump di base
mssql_conf_exec_t Strumento di gestione presso /opt/mssql/bin/mssql-conf
mssql_var_t Etichetta per i file a /var/opt/mssql
mssql_db_t Etichetta per i file di database in /var/opt/mssql/data

Esempi

Nell'esempio seguente viene illustrata la modifica del percorso del database quando SQL Server viene eseguito come servizio limitato.

  1. Crea le directory desiderate ed etichettale come 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
    

    Il comando semanage fcontext gestisce il mapping del contesto di file SELinux. Il -a parametro aggiunge una nuova regola di contesto di file e il -t parametro definisce il tipo SELinux da applicare, che in questo caso riguarda mssql_db_t i file di database di SQL Server. Infine, il comando specifica il modello di percorso, che si trova /opt/mydb in questo esempio, e include tutti i file e le sottodirectory al suo interno.

  2. Impostare il percorso predefinito del database usando mssql-confed eseguire l'installazione.

    sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /opt/mydb/data
    sudo systemctl restart mssql-server
    
  3. Verificare creando un nuovo database usando Transact-SQL:

    CREATE DATABASE TestDatabase;
    GO
    
  4. Verificare che il nuovo database sia stato creato con le etichette appropriate.

    sudo ls -lZ /opt/mydb/data/
    

    Ecco l'output previsto.

    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
    

    Nell'esempio precedente è possibile vedere che il file ha il mssql_db_t tipo associato ai nuovi file creati.