M 4.333 Sichere Konfiguration von Winbind unter Samba

Verantwortlich für Initiierung: IT-Sicherheitsbeauftragter, Leiter IT

Verantwortlich für Umsetzung: Administrator

Wird Samba im "domain"- oder "ads"- Security-Mode eingesetzt (siehe M 4.328 Sichere Grundkonfiguration eines Samba-Servers ), spielt die sicherere Konfiguration von Winbind eine wichtige Rolle. In diesem Fall sind eine ganze Reihe von Empfehlungen zu berücksichtigen.

Mit dem Beitreten einer Domäne ist smbd in der Lage, Benutzer beim Domain Controller (DC) zu authentisieren. Je nach Security Mode und Client geschieht dies durch Auswertung des Kerberos-Tickets oder durch Nachfragen beim DC. Insbesondere letzteres ist aufwändig, da sich smbd einen DC suchen und sich dort anmelden muss, bevor er die Benutzerauthentisierung durchführen kann. Dies generiert mindestens 30 Netzpakete, von denen nur zwei für die eigentliche Authentisierung relevant sind.

Windows arbeitet anders. Die Local Security Authority (LSA) baut beim Start des Domänenmitglieds einmal eine Verbindung zum DC auf und authentisiert sich als Maschine. Sämtliche Benutzerauthentisierungen laufen danach nur noch über diese Verbindung. Dieses Konzept mit smbd allein umzusetzen funktioniert nicht, da es für jeden Client einen eigenen smbd-Prozess gibt und sich Netzverbindungen nicht einfach von mehreren Prozessen gleichzeitig nutzen lassen.

Daher kann als Proxy für die Verbindung zum DC winbindd eingesetzt werden. Er hat eine, mit der LSA unter Windows vergleichbare, Funktion. Insbesondere hält er eine Verbindung zum DC offen und bietet seine Dienste für alle Prozesse im System über einen Unix Domain Socket unter /tmp/winbindd/pipe an. Die smbd-Prozesse versuchen sich bei einer Authentisierung zunächst mit diesem Socket zu verbinden. Erst wenn dies fehlschlägt, initiieren die Prozesse selbst eine Verbindung mit einem DC.

Neben der erfolgreichen Authentisierung benötigt Samba weitere Informationen über einen Benutzer. Es ist erforderlich, dass für jeden Benutzer ein Windows- und ein Unix-Benutzerkonto auf dem Samba-Server vorhanden sind. Das Unix-Benutzerkonto wird unter anderem benötigt, damit Samba die Zugriffskontrolle im Dateisystem dem Kernel überlassen kann (siehe auch M 4.332 Sichere Konfiguration der Zugriffssteuerung bei einem Samba-Server ).

Das heißt, dass jeder Domänenbenutzer mit allen Gruppenmitgliedschaften im Unix-Betriebssystem existieren muss. Theoretisch ist es möglich, alle Domänenbenutzer von Hand unter Unix nachzupflegen. Von dieser Vorgehensweise sollte aber abgesehen und stattdessen Winbind eingesetzt werden.

Winbind ist in der Lage, dynamisch zu Windows-Benutzern und -Gruppen passende Unix-Benutzer und -Gruppen zu erzeugen, falls diese unter Unix noch nicht existieren. Dabei kommt das "nss_winbind"-Modul zum Einsatz., es kann durch einen Eintrag in /etc/nsswitch.conf eingebunden werden. Dies könnte beispielsweise folgendermaßen aussehen:

passwd: files winbind
group: files winbind

Mit diesen Einstellungen sucht das Betriebssystem Benutzernamen erst in der Datei /etc/passwd. Findet es dort keinen passenden Benutzer, kontaktiert es winbindd. Damit winbindd in der Lage ist, zu einem Benutzernamen dynamisch alle erforderlichen Unix-Benutzerattribute (beispielsweise Benutzer-ID, Heimatverzeichnis oder Login-Shell) zu erzeugen, muss der Daemon zwei Schritte durchführen. Zuerst erfragt Winbind beim DC den Security Identifier (SID) des Benutzernames. Danach muss Winbind, da der DC normalerweise die Unix-Benutzer-ID für einen Benutzer nicht kennt, selbst eine passende Unix-Benutzer-ID zur SID finden. Je nach konfiguriertem ID-Mapping-Backend geht Winbind anders vor:

Weitere Informationen über die unterschiedlichen Backends für das ID-Mapping finden sich in deren Manpages. Diese sind nach dem Schema "idmap_<name des backends>" benannt. Die Eingabe "man idmap_nss" liefert weitere Informationen zum nss-Backend. Jedes der ID-Mapping-Backends hat individuelle Konfigurationsparameter. Zur Fehleranalyse sollte das Programm "wbinfo" benutzt werden.

Neben der Unix-Benutzer-ID muss Winbind in der Regel jedem Benutzer weitere Unix-Benutzerattribute zuordnen, beispielsweise ein Heimatverzeichnis. Dies lässt sich über Parameter wie "template homedir" oder "template shell" steuern. Nur beim ID-Mapping-Backend "ad" steht, wie bereits angeführt, zusätzlich ein anderer Mechanismus zur Verfügung.

Wenn es nur einen Samba-Server als Domänenmitglied gibt und die Unix-Benutzer-IDs serverübergreifend nicht synchronisiert werden müssen, kann das ID-Mapping-Backend tdb benutzt werden.

Gibt es mehrere Samba-Server als Domänenmitglieder und müssen daher die Unix-Benutzer-IDs serverübergreifend synchronisiert werden, dann muss auf eines der anderen ID-Mapping-Backends zurückgegriffen werden.

Falls eine Vertrauensstellung zwischen Domänen im Informationsverbund existiert, so muss die folgende Empfehlung im Abschnitt Vertrauensstellungen zwischen Domänen umgesetzt werden.

Vertrauensstellungen zwischen Domänen

Eine Vertrauensstellung ist eine Beziehung zwischen Domänen, durch die Benutzer einer Domäne von einem DC authentifiziert werden können, der sich in einer anderen Domäne befindet.

Auch wenn momentan noch keine Vertrauensstellungen zwischen Domänen im Informationsverbund existieren, ist es sinnvoll, in Hinblick auf die Zukunft, die Maßnahmen in diesem Abschnitt umzusetzen.

Unix-Benutzer-IDs

Windows weist jedem Benutzer und jeder Gruppe eine eindeutige ID zu, den SID (Security Identifier). Der SID enthält einen 96 Bit großen Domänenanteil und einen, innerhalb der Domäne eindeutigen, RID (Relative Identifier). Solange nur eine Domäne im Informationsverbund existiert, kann Unix den RID verwenden um eine eindeutige Unix-Benutzer-ID zu berechnen. Existieren im Informationsverbund mehrere Domänen, die sich gegenseitig vertrauen, funktioniert diese Vorgehensweise nicht mehr. Vertraut die Domäne, in der der Samba-Server Mitglied ist, einer anderen Domäne, ist der RID nicht mehr eindeutig. Der RID "500" bezeichnet grundsätzlich den Administrator, der RID "513" ist der Gruppe der Domänenbenutzer zugeordnet und ab 1000 aufsteigend vergibt jede Domäne fortlaufend RIDs.

Seit Samba Version 3.0.25 gibt es den Parameter "idmap domains". Dieser Parameter ermöglicht es das ID-Mapping, abhängig vom Namen der Domäne, zu konfigurieren.

[global]
idmap domains = BONN BERLIN
idmap config BONN:backend = rid
idmap config BONN:range = 10000 - 49999
idmap config BERLIN:backend = rid
idmap config BERLIN:range = 50000 - 99999

Im oben angeführten Beispiel würde dem Benutzer BONN\Administrator die Unix-Benutzer-ID 10500 zugewiesen, während der Benutzer BERLIN\Administrator die Unix-Benutzer-ID 50500 von Winbind erhalten würde.

Existieren Vertrauensstellungen zwischen Domänen im Informationsverbund, so muss eines der folgenden ID-Mapping-Backends verwendet werden:

Unix Heimatverzeichnis

Die Domäne des Benutzers sollte in den Pfad seines Heimatverzeichnisses aufgenommen werden. Diese Maßnahme verhindert Namenskollisionen bei Vertrauensstellungen. Der Benutzer "benutzer1" in der Domäne BERLIN muss ein anderes Heimatverzeichnis bekommen als der Benutzer "benutzer1" in der Domäne BONN. Dies kann mit folgendem Eintrag in der smb.conf Konfigurationsdatei realisiert werden:

template homedir = /home/%D/%u

Alternativ kann man die Heimatverzeichnisse der Benutzer auch im Active Directory ( AD ) pflegen, wenn Winbind das ID-Mapping-Backend "ad" einsetzt. Im oben angeführten Beispiel würde der Benutzer BERLIN\benutzer1 das Unix Heimatverzeichnis /home/BERLIN/benutzer1 zugewiesen bekommen.

Die Heimatverzeichnisse werden von Winbind nicht automatisch erzeugt. Dies ist, wenn der Samba-Server beispielsweise als Dateiserver eingesetzt wird, auch nicht wünschenswert.

Unix-Benutzername

Um die Eindeutigkeit der Benutzernamen zu gewährleisten, müssen Windows-Benutzernamen auf folgende Art und Weise in Unix-Benutzernamen umgesetzt werden. Der Unix-Benutzername des Windows-Benutzers BONN\benutzer1 lautet BONN<winbind seperator>benutzer1. Standardmäßig ist der Parameter "winbind seperator" auf das Zeichen '\' voreingestellt. Bereitet das voreingestellte Zeichen auf Unix-Systemen Probleme, beispielsweise hat das Zeichen '\' für Unix Eingabeaufforderungen eine Sonderbedeutung, so kann in der Konfigurationsdatei smb.conf ein anderes Zeichen spezifiziert werden.

Beim Ändern des Parameters "winbind seperator" muss vorher geprüft werden an welchen Stellen Domänenbenutzer und -gruppen angegeben sind (beispielsweise in der Konfigurationsdatei smb.conf). Alle diese Stellen müssen nach Ändern des Parameters angepasst werden.

Prüffragen: