Freigeben über


Erste Schritte mit SQL Server unter SELinux

Dieser Artikel führt Sie zu den ersten Schritten mit SQL Server als eingeschränktem Dienst für eine Security-Enhanced Linux-Verteilung (SELinux) 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. SELinux sollte aktiviert und im enforcing Modus sein. Sie können den SELinux-Status überprüfen, indem Sie den Befehl sestatusausfü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.

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

Nachdem Sie das mssql-server-selinux Paket installiert haben, 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, die den sqlservr Prozess in der neuen mssql_server_t Domäne beschränkt.

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 die optionale SELinux-Richtlinie mit dem mssql-server-selinux Paket installiert wird, 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 Skripte, die spezielle Berechtigungen zur Verwaltung von Core-Dumps benötigen
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

Im folgenden Beispiel wird das Ändern des Datenbankspeicherorts veranschaulicht, 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 seLinux-Typ, der angewendet werden soll, was in diesem Fall für SQL Server-Datenbankdateien gilt mssql_db_t . Schließlich wird das Pfadmuster angegeben, das sich in diesem Beispiel befindet /opt/mydb , und 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 mit dem mssql_db_t (Typ) den neuen Dateien zugeordnet ist.