Freigeben über


Erste Schritte mit SQL Server unter SELinux

Dieser Artikel hilft Ihnen bei den ersten Schritten mit SQL Server als eingeschränkter Dienst für eine Security-Enhanced Linux (SELinux)-Verteilung basierend auf Red Hat Enterprise Linux (RHEL).

Was ist Security-Enhanced Linux?

Security-Enhanced Linux (SELinux) ist eine Sicherheitsarchitektur für Linux-Systeme. Sie hilft beim Definieren von Zugriffssteuerungen für Anwendungen, Prozesse und Dateien in einem System. SELinux verwendet eine Reihe von Regeln oder Sicherheitsrichtlinien, um zu definieren, was auf sie zugegriffen werden kann oder nicht. SELinux bietet Administratoren mehr Kontrolle darüber, wer auf das System zugreifen kann. Weitere Informationen finden Sie unter "What is SELinux (Security-Enhanced Linux)".

Ausführliche Informationen zum Aktivieren von SELinux für Red Hat-Systeme finden Sie unter SELinux Architecture. Sie können auch kostenlos mit einem SELinux-fähigen Betriebssystem beginnen.

SQL Server 2022 unter Linux ist offiziell mit RHEL 9 (ab Juli 2024) zertifiziert und ist jetzt allgemein im Red Hat-Ökosystemkatalog verfügbar.

SQL Server und SELinux

Ein eingeschränkter Dienst mit SELinux bedeutet, dass er durch Sicherheitsregeln eingeschränkt ist, die in der SELinux-Richtlinie explizit definiert sind. Für SQL Server werden die benutzerdefinierten SELinux-Richtlinien im mssql-server-selinux Paket definiert.

Voraussetzungen

  1. Aktivieren Sie SELinux, und legen Sie ihn auf den enforcing Modus fest. Überprüfen Sie den SELinux-Status, indem Sie den sestatus Befehl ausführen.

    sestatus
    

    Die erwartete Ausgabe sieht folgendermaßen aus.

    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. Installieren Sie das mssql-server-selinux Paket, das die erforderlichen benutzerdefinierten Richtlinien definiert.

Hinweis

Wenn eine der Voraussetzungen nicht erfüllt ist, wird SQL Server als nicht definierter Dienst ausgeführt.

Mindestanforderung für RHEL-Nebenversion

Um SQL Server als eingeschränkte Anwendung auf RHEL 9 auszuführen, müssen Sie eine mindestens RHEL-Nebenversion verwenden. Diese Anforderung ist aufgrund von Point-Release-Abhängigkeiten in SELinux-Paketen vorhanden. Das mssql-server-selinux-Paket, das Sie zum Ausführen von SQL Server im eingeschränkten Modus benötigen, hängt von den Paketen selinux-policy und selinux-policy-base ab.

Schritte zum Identifizieren der minimalen RHEL-Nebenversion

  1. Fügen Sie das SQL Server-Repository hinzu, das enthält mssql-server-selinux.

    Für SQL Server 2025 (17.x) unter 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) unter RHEL 9:

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

    Hinweis

    Wenn Sie die Installation auf RHEL 10 planen, wechseln Sie zu den RHEL 10-Repositorys.

  2. Führen Sie den folgenden Befehl aus, um die SELinux-Richtlinienabhängigkeiten anzuzeigen:

    sudo dnf repoquery --requires --latest-limit=1 mssql-server-selinux | egrep '^selinux-policy(-base)?'
    
  3. Die Ausgabe enthält die erforderliche SELinux-Richtlinienversion, die durch ein Suffix wie z.B. .el9_6 angegeben ist. Dieses Suffix stellt die minimale RHEL 9-Nebenversion dar, für die die Richtlinie erstellt wurde. Entspricht z. B. .el9_6, RHEL 9.6.

    Wenn kein solches Suffix in der Ausgabe angezeigt wird, finden Sie in der Dokumentation zu Red Hat Informationen zur Mindest-RHEL-Nebenversion, die diesem SELinux-Richtlinienbuild zugeordnet ist. Im folgenden Beispiel ist 38.1.53-5die erforderliche SELinux-Basisversion .

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

    Hier ist eine Beispielausgabe:

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

    In diesem Beispiel ist 38.1.53-5.el9_6 die höchste markierte Nebenversion-Anforderung. Sie benötigen also mindestens RHEL 9.6, um SQL Server mit SELinux (mssql-server-selinux) zu installieren und als eingeschränkte Anwendung auf RHEL 9 auszuführen.

Installieren eines SQL Servers als eingeschränkten Dienst

Standardmäßig installiert das mssql-server Paket SQL Server ohne die SELinux-Richtlinie, und SQL Server wird als nicht definierter Dienst ausgeführt. Die Installation des Pakets mssql-server aktiviert automatisch die Boolesche Variable selinux_execmode. Sie können überprüfen, ob SQL Server unbeschränkt ausgeführt wird, indem Sie den folgenden Befehl verwenden:

ps -eZ | grep sqlservr

Die erwartete Ausgabe sieht folgendermaßen aus.

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

Wenn Sie das mssql-server-selinux Paket installieren, wird eine benutzerdefinierte SELinux-Richtlinie aktiviert, die den sqlservr Prozess beschränkt. Wenn Sie diese Richtlinie installieren, wird der selinuxuser_execmod boolesche Wert zurückgesetzt und durch eine Richtlinie mit dem Namen mssqlersetzt. Diese Richtlinie beschränkt den sqlservr Prozess in der neuen mssql_server_t Domäne.

ps -eZ | grep sqlservr

Die erwartete Ausgabe sieht folgendermaßen aus.

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

SQL Server- und SELinux-Typen

Wenn Sie die optionale SELinux-Richtlinie mithilfe des mssql-server-selinux Pakets installieren, werden einige neue Typen definiert:

SELinux-Richtlinie BESCHREIBUNG
mssql_opt_t Installieren Sie die Dateien von mssql-server in /opt/mssql
mssql_server_exec_t Ausführbare Dateien unter /opt/mssql/bin/
mssql_paldumper_exec_t Ausführbare Dateien und Skripts, die spezielle Berechtigungen zum Verwalten von Kernabbildern erfordern
mssql_conf_exec_t Verwaltungstool unter /opt/mssql/bin/mssql-conf
mssql_var_t Bezeichnung für Dateien unter /var/opt/mssql
mssql_db_t Bezeichnung für die Datenbankdateien unter /var/opt/mssql/data

Beispiele

Das folgende Beispiel veranschaulicht das Ändern des Datenbankspeicherorts, wenn SQL Server als eingeschränkter Dienst ausgeführt wird.

  1. Erstellen Sie die gewünschten Verzeichnisse, und bezeichnen Sie sie 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
    

    Der Befehl semanage fcontext verwaltet die SELinux-Dateikontextzuordnung. Der -a Parameter fügt eine neue Dateikontextregel hinzu, und der -t Parameter definiert den anzuwendenden SELinux-Typ, der in diesem Fall für SQL Server-Datenbankdateien gilt mssql_db_t . Schließlich gibt der Befehl das Pfadmuster an, das sich in diesem Beispiel befindet /opt/mydb , und enthält alle Darin enthaltenen Dateien und Unterverzeichnisse.

  2. Legen Sie den Standarddatenbankspeicherort mithilfe von mssql-conf fest, und führen Sie das Setup aus.

    sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /opt/mydb/data
    sudo systemctl restart mssql-server
    
  3. Überprüfen Sie, indem Sie eine neue Datenbank mit Transact-SQL erstellen:

    CREATE DATABASE TestDatabase;
    GO
    
  4. Überprüfen Sie, ob die neue Datenbank mit den entsprechenden Bezeichnungen erstellt wurde.

    sudo ls -lZ /opt/mydb/data/
    

    Die erwartete Ausgabe sieht folgendermaßen aus.

    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
    

    Im vorherigen Beispiel können Sie sehen, dass die Datei dem Typ zugeordnet mssql_db_t ist, den die neuen Dateien erstellt haben.