Microsoft SQL Server unter Linux mit einer Active Directory-Domäne verbinden

    Linux-Windows-AD-IntegrationNach der Installation von SQL Server auf Linux kann man nur mit SQL-Benutzern darauf zu­greifen. Das SQL Management Studio zeigt AD-Benutzer zwar an, sie las­sen sich aber nicht hinzu­fügen. Die fo­lgende An­leitung zeigt, wie man den Linux-Server in die Domäne auf­nimmt und AD-User auf dem SQL Server berechtigt.

    Damit auch Benutzer aus dem Active Directory auf dem Linux MS SQL Server verwendet werden können, sind einige Einstellungen vonnöten. Dazu gehört vor allem, dass der Linux-Server mit dem AD verbunden wird.

    Das Berechtigen von AD-Benutzern auf einem frisch installierten SQL Server unter Linux führt zu einem Fehler.

    Im ersten Schritt sollte man prüfen, ob der Linux-Server den Domänennamen auflösen kann. Dazu verwende ich Ping nach dem Muster

    ping contoso.de

    Wenn sich der Name der Domäne nicht auflösen lässt, dann muss man die Suchliste aktualisieren.

    Netzwerk-Interface konfigurieren

    Ist die Domäne nicht erreichbar oder wird diese nicht gefunden, so muss man die Domänen-Suchliste unter Linux aktualisieren. Dazu bearbeitet man die Datei /etc/network/interfaces. Für diesen Zweck eignet sich ein beliebiger Texteditor, zum Beispiel

    sudo nano /etc/network/interfaces

    Ab Ubuntu 18.04 konfiguriert man die Netzwerk­schnittstelle durch Editieren der yaml-Datei:

    sudo nano /etc/netplan/*.yaml

    Die folgenden Screenshots beruhen auf dieser Variante.

    Normalerweise sollte die Netzwerk­schnittstelle eth0 heißen, aber die Bezeichnung kann davon abweichen. Den tatsächlichen Namen des Interfaces kann man mit dem Befehl ifconfig herausfinden.

    Namen des Netzwerk-Interfaces ermitteln mit ifconfig

    In unserem Beispiel hört die Netzwerk­schnittstelle auf die Bezeichnung ens33. Für ihre statische IP-Konfiguration trägt man die IP-Adresse, das Gateway und den bzw. die DNS-Server in die yaml-datei ein.

    Konfigurieren von statischen Netzwerkeinstellungen

    Dabei sollte man Zeilen­umbrüche und Einrückungen genau so einfügen, wie im Screenshot zu sehen. Zu beachten ist außerdem, dass keine Tabulatoren zulässig sind.

    Nach dem Speichern der Datei übernimmt man die darin enthaltenen Einstellungen mit

    sudo netplan apply

    Der Befehl moniert eventuell vorhandene Syntaxfehler.

    Eine andere Möglichkeit wäre, die Daten per DHCP zuzuweisen und keine statische IP Adresse zu verwenden. In diesem Fall würde die Konfiguration so aussehen:

    Konfiguration der Schnittstelle für DHCP

    Danach sollte man die Datei /etc/resolv.conf prüfen, hier müsste zumindest die Suchdomäne enthalten sein. Andernfalls funktioniert die Namensauflösung für die Domäne nicht.

    Nach dem Aktualisieren der Einstellungen sollte die Datei /etc/resolv.conf die Domäne enthalten.

    Domain Join mit dem Linux-Server

    Microsoft empfiehlt für den Domänenbeitritt von Linux das SSSD-Paket. Dabei installiert man zuerst realmd und den Kerberos-Client:

    sudo apt -y install realmd libnss-sss libpam-sss sssd sssd-tools adcli samba-common-bin oddjob oddjob-mkhomedir packagekit

    Danach erfolgt der Beitritt zur Domäne:

    sudo realm join contoso.de -U 'administrator' -v

    Beim administrativen Benutzer verwendet man am besten nur den SAMAccountName und nicht den UniversalPrincipalName, damit ist der AD-Join nicht möglich.

    Das Computer-Objekt des Linux-Servers sollte nun im Active Directory sichtbar sein.

    Nach dem Beitritt zur Domäne sollte das Computer-Objekt für den Linux-Server im AD auftauchen.

    Ab hier können nun Active Directory-Benutzer auch über das SQL Management Studio berechtigt werden. Es ist allerdings weiterhin nicht möglich, mit diesen Konten zu arbeiten, sprich die Authentifizierung und dadurch auch der Zugriff über PowerShell funktioniert nicht.

    keytab-Datei anlegen

    Daher müssen noch weitere Einstellungen getätigt werden. Dazu zählt das Erstellen einer keytab-Datei, sie wird für die Authentifizierung über Kerberos benötigt. Sie ist grundsätzlich verschlüsselt und ermöglicht es, dass sich ein Principal auf einen Host verbinden kann, ohne dafür ein Kennwort einzugeben.

    Als Erstes muss man dafür im Active Directory einen Benutzer anlegen, dessen Kennwort nie abläuft und das nicht geändert werden kann. Mit PowerShell würde man so vorgehen:

    New-ADUser lxmssql -AccountPassword (Read-Host -AsSecureString "Enter Password") `
    -PasswordNeverExpires $true -Enabled $true

    Danach setzt man auf dem Domänen-Controller einen SPN für den Linux-SQL-Server. Wichtig dabei ist, dass man den eben erstellten Benutzer mit aufnimmt.

    setspn -A MSSQLSvc/linuxsql.smartsocke.com:1433 lxmssql

    Anlegen eines Service Principal Name für den Linux-Computer

    Als nächstes erstellt man auf dem Linux-Server die keytab-Datei:

    sudo kvno lxmssql@SMARTSOCKE.COM
    sudo kvno MSSQLSvc/linuxsql.smartsocke.com:1433@SMARTSOCKE.COM

    Die Datei selbst wird mit folgenden Befehlen erzeugt:

    sudo ktutil

    addent -password -p MSSQLSvc/linuxsql.smartsocke.com:1433@SMARTSOCKE.COM -k 2 -e aes256-cts-hmac-sha1-96

    addent -password -p MSSQLSvc/linuxsql.smartsocke.com:1433@SMARTSOCKE.com -k 2 -e rc4-hmac

    wkt /var/opt/mssql/secrets/mssql.keytab

    exit

    Anschließend sichert man die frisch erstelle keytab-Datei ab, indem man die Berechtigungen auf die Datei so setzt, dass nur der mssql-Benutzer die Erlaubnis zum Lesen erhält.

    sudo chown mssql:mssql /var/opt/mssql/secrets/mssql.keytab

    sudo chmod 400 /var/opt/mssql/secrets/mssql.keytab

    Zum Schluss muss man dem SQL Server nur noch vermitteln, dass er die keytab-Datei nutzen soll:

    sudo /opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab

    sudo systemctl restart mssql-server

    Damit wäre die Konfiguration abgeschlossen.

    AD-Benutzer lassen sich nach dem Abschluss der Konfiguration im SQL Server Management Studio berechtigen.

    Jetzt lassen sich AD-User für den SQL Server berechtigen, und darüber hinaus ist jetzt auch der Zugriff per PowerShell im Kontext eines AD-Benutzers möglich.

    Update: Die Konfiguration auf der Linux-Seite will Microsoft mit adutil vereinfachen. Das Tool wurde kürzlich als Public Preview freigegeben.

    Zum Schluss sollten Sie auf die Systemzeit, das Datum und die Zeitzone des Linux-Servers achten. Es kann sein, dass Ubuntu nach der Installation in der Zeitzone UTC liegt. In diesem Fall kann es passieren, dass keine Active Directory-Benutzer für SQL berechtigt werden können.

    2 Kommentare

    28. November 2020 - 16:17

    Wäre es nicht sinnvoller, bei dieser Anforderung den MS SQL gleich unter Windows Server zu betreiben?

    Roland sagt:
    1. Dezember 2020 - 11:11

    Hallo Herr Jelinski,
    jedes Unternehmen tickt da anders. Was man natürlich beachten sollte wäre zum einen die Lizenzkosten für das Windows-System und natürlich läuft Linux etwas performanter als Windows. Ist halt alles irgendwie Gefühls- oder Glaubenssache.
    Ich persönlich finde es gar nicht so verkehrt, teste gerade einen SQLer auf Linux bisher alles recht erfolgreich.
    Beste Grüße
    Roland Eich