Delen via


Aan de slag met SQL Server op SELinux

Dit artikel helpt u om aan de slag te gaan met SQL Server als een beperkte service op een Security-Enhanced Linux-distributie (SELinux) op basis van Red Hat Enterprise Linux (RHEL).

Wat is Security-Enhanced Linux?

Security-Enhanced Linux (SELinux) is een beveiligingsarchitectuur voor Linux-systemen. Hiermee kunt u toegangsbeheer definiëren voor toepassingen, processen en bestanden op een systeem. SELinux maakt gebruik van een set regels, of beveiligingsbeleid, om te definiëren wat er wel of niet kan worden geopend. SELinux biedt beheerders meer controle over wie toegang heeft tot het systeem. Zie Wat is SELinux (Security-Enhanced Linux)voor meer informatie.

Zie SELinux Architecturevoor meer informatie over het inschakelen van SELinux voor Red Hat-systemen. U kunt ook gratis aan de slag met een seLinux-besturingssysteem.

SQL Server 2022 op Linux is officieel gecertificeerd met RHEL 9 (vanaf juli 2024) en is nu algemeen beschikbaar in de Red Hat Ecosystem Catalog.

SQL Server en SELinux

Een beperkte service met SELinux betekent dat deze wordt beperkt door beveiligingsregels, expliciet gedefinieerd in het SELinux-beleid. Voor SQL Server worden de aangepaste SELinux-beleidsregels gedefinieerd in het mssql-server-selinux-pakket.

Voorwaarden

  1. Schakel SELinux in en stel het in op enforcing mode. Controleer de SELinux-status door de opdracht uit te sestatus voeren.

    sestatus
    

    Dit is de verwachte uitvoer.

    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. Installeer het mssql-server-selinux-pakket dat het vereiste aangepaste beleid definieert.

Notitie

Als niet aan een van de vereisten wordt voldaan, wordt SQL Server uitgevoerd als een niet-gedefinieerde service.

Minimale vereiste voor secundaire RHEL-versies

Als u SQL Server wilt uitvoeren als een beperkte toepassing op RHEL 9, moet u een minimale secundaire RHEL-versie gebruiken. Deze vereiste bestaat vanwege puntreleaseafhankelijkheden in SELinux-pakketten. Het mssql-server-selinux pakket, dat u nodig hebt om SQL Server uit te voeren in de beperkte modus, is afhankelijk van de selinux-policy en selinux-policy-base pakketten.

Stappen voor het identificeren van de minimale secundaire RHEL-versie

  1. Voeg de SQL Server-opslagplaats toe die mssql-server-selinux bevat.

    Voor SQL Server 2025 (17.x) op RHEL 9:

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

    Voor SQL Server 2022 (16.x) op RHEL 9:

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

    Notitie

    Als u van plan bent om te installeren op RHEL 10, gaat u naar de RHEL 10-opslagplaatsen.

  2. Voer de volgende opdracht uit om de SELinux-beleidsafhankelijkheden weer te geven:

    sudo dnf repoquery --requires --latest-limit=1 mssql-server-selinux | egrep '^selinux-policy(-base)?'
    
  3. De uitvoer bevat de minimale SELinux-beleidsversie die is vereist, aangegeven door een achtervoegsel zoals .el9_6. Dit achtervoegsel vertegenwoordigt de minimale RHEL 9 secundaire release waarvoor het beleid is gemaakt. Komt bijvoorbeeld .el9_6 overeen met RHEL 9.6.

    Als dit achtervoegsel niet wordt weergegeven in de uitvoer, raadpleegt u de Red Hat-documentatie om de minimale secundaire RHEL-versie te bepalen die is gekoppeld aan die SELinux-beleidsbuild. In het volgende voorbeeld is 38.1.53-5de vereiste SELinux-basisversie.

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

    Dit is een voorbeeld van output:

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

    In dit voorbeeld is 38.1.53-5.el9_6 de hoogste vereiste gemarkeerd met de minor-versie. U hebt dus ten minste RHEL 9.6 nodig om SQL Server te installeren met SELinux (mssql-server-selinux) en deze uit te voeren als een beperkte toepassing op RHEL 9.

SQL Server installeren als een beperkte service

Het mssql-server-pakket installeert standaard SQL Server zonder seLinux-beleid en SQL Server wordt uitgevoerd als een niet-gedefinieerde service. De installatie van het mssql-server-pakket schakelt automatisch selinux_execmode Boolean in. U kunt controleren of SQL Server niet beperkt is met de volgende opdracht:

ps -eZ | grep sqlservr

Dit is de verwachte uitvoer.

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

Wanneer u het mssql-server-selinux pakket installeert, wordt een aangepast SELinux-beleid ingeschakeld dat het sqlservr proces beperkt. Wanneer u dit beleid installeert, wordt de Booleaanse waarde opnieuw ingesteld en vervangen door een beleid met de selinuxuser_execmod naam mssql. Dit beleid beperkt het sqlservr proces in het nieuwe mssql_server_t domein.

ps -eZ | grep sqlservr

Dit is de verwachte uitvoer.

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

SQL Server- en SELinux-typen

Wanneer u het optionele SELinux-beleid installeert met behulp van het mssql-server-selinux pakket, worden enkele nieuwe typen gedefinieerd:

SELinux-beleid Beschrijving
mssql_opt_t Bestanden van mssql-server installeren naar /opt/mssql
mssql_server_exec_t Uitvoerbare bestanden op /opt/mssql/bin/
mssql_paldumper_exec_t Uitvoerbare bestanden en scripts waarvoor speciale machtigingen zijn vereist voor het beheren van kerndumps
mssql_conf_exec_t Beheerhulpprogramma bij /opt/mssql/bin/mssql-conf
mssql_var_t Label voor bestanden op /var/opt/mssql
mssql_db_t Label voor de databasebestanden op /var/opt/mssql/data

Voorbeelden

In het volgende voorbeeld ziet u hoe u de databaselocatie wijzigt wanneer SQL Server wordt uitgevoerd als een beperkte service.

  1. Maak de gewenste mappen en label ze als 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
    

    Met de opdracht semanage fcontext beheert u de seLinux-bestandscontexttoewijzing. De -a parameter voegt een nieuwe regel voor bestandscontext toe en de -t parameter definieert het SELinux-type dat moet worden toegepast, wat in dit geval voor SQL Server-databasebestanden is mssql_db_t . Ten slotte geeft de opdracht het padpatroon op, in /opt/mydb dit voorbeeld, en bevat alle bestanden en submappen erin.

  2. Stel de standaarddatabaselocatie in met behulp van mssql-confen voer de installatie uit.

    sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /opt/mydb/data
    sudo systemctl restart mssql-server
    
  3. Controleer door een nieuwe database te maken met behulp van Transact-SQL:

    CREATE DATABASE TestDatabase;
    GO
    
  4. Controleer of de nieuwe database is gemaakt met de juiste labels.

    sudo ls -lZ /opt/mydb/data/
    

    Dit is de verwachte uitvoer.

    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
    

    In het vorige voorbeeld ziet u dat het bestand het mssql_db_t type heeft dat is gekoppeld aan de nieuwe bestanden die zijn gemaakt.