Dela via


Kom igång med SQL Server på SELinux

Den här artikeln hjälper dig att komma igång med SQL Server som en begränsad tjänst på en Security-Enhanced Linux-distribution (SELinux) baserat på Red Hat Enterprise Linux (RHEL).

Vad är Security-Enhanced Linux?

Security-Enhanced Linux (SELinux) är en säkerhetsarkitektur för Linux-system. Det hjälper dig att definiera åtkomstkontroller för program, processer och filer i ett system. SELinux använder en uppsättning regler eller säkerhetsprinciper för att definiera vad som kan eller inte kan nås. SELinux ger administratörer mer kontroll över vem som kan komma åt systemet. Mer information finns i Vad är SELinux (Security-Enhanced Linux).

Mer information om hur du aktiverar SELinux för Red Hat-system finns i SELinux-arkitektur. Du kan också komma igång med ett SELinux-aktiverat operativsystem utan kostnad.

SQL Server 2022 på Linux är officiellt certifierad med RHEL 9 (från och med juli 2024) och är nu allmänt tillgänglig i Red Hat Ecosystem Catalog.

SQL Server och SELinux

En begränsad tjänst med SELinux innebär att den begränsas av säkerhetsregler som uttryckligen definieras i SELinux-principen. För SQL Server definieras de anpassade SELinux-principerna i mssql-server-selinux paketet.

Förutsättningar

  1. Aktivera SELinux och ställ in det på enforcing läge. Kontrollera SELinux-statusen genom att sestatus köra kommandot .

    sestatus
    

    Här är de förväntade resultaten.

    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. Installera paketet mssql-server-selinux som definierar nödvändiga anpassade principer.

Anmärkning

Om något av förutsättningarna inte uppfylls körs SQL Server som en obefintlig tjänst.

Lägsta krav på rhel-delversion

Om du vill köra SQL Server som ett begränsat program på RHEL 9 måste du använda en lägsta RHEL-delversion. Det här kravet finns på grund av point-release-beroenden i SELinux-paket. Paketet mssql-server-selinux , som du behöver köra SQL Server i begränsat läge, beror på paketen selinux-policy och selinux-policy-base .

Steg för att identifiera lägsta rhel-delversion

  1. Lägg till SQL Server-lagringsplatsen som innehåller mssql-server-selinux.

    För SQL Server 2025 (17.x) på RHEL 9:

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

    För SQL Server 2022 (16.x) på RHEL 9:

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

    Anmärkning

    Om du planerar att installera på RHEL 10 ändrar du till RHEL 10-lagringsplatserna.

  2. Kör följande kommando för att visa SELinux-principberoenden:

    sudo dnf repoquery --requires --latest-limit=1 mssql-server-selinux | egrep '^selinux-policy(-base)?'
    
  3. Utdata innehåller den lägsta SELinux-principversion som krävs, vilket anges av ett suffix som .el9_6. Det här suffixet representerar den lägsta mindre VERSIONEN av RHEL 9 som principen skapades för. Motsvarar till exempel .el9_6 RHEL 9.6.

    Om inget sådant suffix visas i utdata kan du läsa Red Hat-dokumentationen för att fastställa den lägsta RHEL-mindre versionen som är associerad med SELinux-principversionen. I följande exempel är 38.1.53-5den nödvändiga SELinux-basversionen .

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

    Här är exempel på utdata:

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

    I det här exemplet är det högsta kravet på delversionstagg 38.1.53-5.el9_6. Därför behöver du minst RHEL 9.6 för att installera SQL Server med SELinux (mssql-server-selinux) och köra den som ett begränsat program på RHEL 9.

Installera SQL Server som en begränsad tjänst

Som standardinställning installerar paketet SQL Server utan SELinux-policy, och SQL Server körs som en okonfigurerad tjänst. Paketinstallationen mssql-server aktiverar automatiskt det selinux_execmode booleska. Du kan kontrollera att SQL Server körs obestämt med hjälp av följande kommando:

ps -eZ | grep sqlservr

Här är de förväntade resultaten.

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

När du installerar mssql-server-selinux paketet aktiverar det en anpassad SELinux-princip som begränsar sqlservr processen. När du installerar den här principen återställs det selinuxuser_execmod booleska objektet och ersätts av en princip med namnet mssql. Den här principen begränsar sqlservr processen i den nya mssql_server_t domänen.

ps -eZ | grep sqlservr

Här är de förväntade resultaten.

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

SQL Server- och SELinux-typer

När du installerar den valfria SELinux-principen med hjälp av mssql-server-selinux paketet definieras några nya typer:

SELinux-policy Beskrivning
mssql_opt_t Installera filer för mssql-server till /opt/mssql
mssql_server_exec_t Körbara filer på /opt/mssql/bin/
mssql_paldumper_exec_t Körbara filer och skript som kräver särskilda rättigheter för att hantera core dumps
mssql_conf_exec_t Hanteringsverktyg på /opt/mssql/bin/mssql-conf
mssql_var_t Etikett för filer på /var/opt/mssql
mssql_db_t Etikett för databasfilerna på /var/opt/mssql/data

Exempel

I följande exempel visas hur du ändrar databasplatsen när SQL Server körs som en begränsad tjänst.

  1. Skapa önskade kataloger och märk dem som 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
    

    Kommandot semanage fcontext hanterar SELinux-filkontextmappningen. Parametern -a lägger till en ny filkontextregel och parametern -t definierar vilken SELinux-typ som ska tillämpas, vilket i det här fallet är mssql_db_t för SQL Server-databasfiler. Slutligen anger kommandot sökvägsmönstret, som finns /opt/mydb i det här exemplet, och innehåller alla filer och underkataloger i det.

  2. Ange standarddatabasplatsen med mssql-conf och kör konfigurationen.

    sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /opt/mydb/data
    sudo systemctl restart mssql-server
    
  3. Verifiera genom att skapa en ny databas med Transact-SQL:

    CREATE DATABASE TestDatabase;
    GO
    
  4. Kontrollera att den nya databasen har skapats med lämpliga etiketter.

    sudo ls -lZ /opt/mydb/data/
    

    Här är de förväntade resultaten.

    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
    

    I föregående exempel kan du se att filen har den typ som mssql_db_t är associerad med de nya filerna som skapats.