Kapitel 21. Winbind: Benutzung von Domänenkonten

Tim Potter

Andrew Tridgell

Samba Team

Naag Mummaneni

Notes for Solaris

John Trostel

Jelmer R. Vernooij

Samba Team

John H. Terpstra

Samba Team

Stefan G. Weichinger

Deutsche Übersetzung
German Samba-3-Docs-Translation Team

Inhaltsverzeichnis

Eigenschaften und Vorzüge
Einführung
Was Winbind anbietet
Zielgruppen
Wie Winbind arbeitet
Microsoft Remote Procedure Calls
Microsoft Active Directory
Name Service Switch
Pluggable Authentication Modules
Zuordnung von Benutzer- und Gruppen-IDs
Das Cachen der Resultate
Installation und Konfiguration
Einführung
Anforderungen
Testen
Zusammenfassung
Gängige Fehler
Warnung vor Problemen durch NSCD
Winbind löst keine Benutzer- und Gruppen-Namen auf

Eigenschaften und Vorzüge

Die Integration von UNIX und Microsoft Windows NT durch eine einheitliche Anmeldung („unified logon“) galt lange Zeit als „heiliger Gral“ in heterogenen EDV-Umgebungen.

Es gibt eine weitere Sache, ohne die die UNIX- und Microsoft Windows-Netzwerk-Interoperabilität leiden würde. Es ist zwingend notwendig, dass es einen Mechanismus gibt, mit dem es möglich ist, Dateien über UNIX-Systeme hinweg bereitzustellen und gleichzeitig die Integrität der Domänen-Benutzer- und Gruppenrechte zu wahren.

winbind ist ein Bestandteil der Samba-Suite, der das Problem der einheitlichen Anmeldung löst. Winbind benutzt eine UNIX-Implementierung der Microsoft RPC-Aufrufe, „Pluggable Authentication“-Module (PAM) und den Name Service Switch (NSS), um Windows NT-Domänenbenutzer auf UNIX-Systemen als UNIX-Benutzer erscheinen und arbeiten zu lassen. Dieses Kapitel beschreibt das System von winbind, erklärt die Funktionsweise und zeigt, wie es konfiguriert wird und wie es intern arbeitet.

Winbind stellt drei unterschiedliche Funktionen zur Verfügung:

  • Die Authentifizierung der Benutzerbeglaubigung (mittels PAM)

  • Die Auflösung der Identität (mittels NSS)

  • Winbind hält eine Datenbank namens winbind_idmap.tdb, in der die Zuordnungen zwischen den UNIX UIDs/GIDs und den NT-SIDs vermerkt sind. Diese Zuordnungen werden nur für Benutzer und Gruppen verwendet, die nicht über eine lokale UID/GID verfügen. Winbind sichert die Zusammengehörigkeit zwischen der UID/GID, die im idmap-uid/gid-Bereich zugeteilt wird, und der NT-SID. Wenn idmap backend auf den Wert „ldapsam:url“ statt für die Nutzung einer lokalen Datei gesetzt ist, dann holt Winbind diese Informationen aus der LDAP-Datenbank.

Anmerkung

Wenn winbindd nicht läuft, dann wird der smbd (der winbindd aufruft) auf die nur lokal vorhandenen Informationen der /etc/passwd und /etc/group ohne eine dynamische Zuordnung zurückgreifen.

Abbildung 21.1. Winbind Idmap

Winbind Idmap

Einführung

Es ist allgemein bekannt, dass UNIX und Windows NT verschiedene Modelle zur Repräsentation von Benutzer- und Gruppen-Informationen haben und verschiedene Technologien nutzen, um diese zu implementieren. Diese Tatsache macht es schwierig, die beiden Systeme auf befriedigende Weise zu integrieren.

Eine gängige Lösung ist es, identisch benannte Benutzerkonten sowohl im Windows- als auch im UNIX-System anzulegen und die Samba-Suite dafür zu nutzen, Datei- und Druckdienste zwischen den beiden Systemen anzubieten. Diese Lösung ist jedoch weit davon entfernt, perfekt zu sein, da das Hinzufügen und Löschen von Benutzern auf beiden Gruppen von Maschinen zur lästigen Pflicht wird und zwei Sätze Passwörter benötigt werden. Beides führt zu Synchronisationsproblemen zwischen Windows und UNIX und zur Verwirrung der Benutzer.

Wir teilen das Problem der einheitlichen Anmeldung für UNIX-Maschinen in drei kleinere Probleme auf:

  • Das Beziehen von Windows NT-Benutzer- und Gruppen-Informationen

  • Die Authentifikation von Windows NT-Benutzern

  • Das Ändern von Passwörtern der Windows NT-Benutzer

Im Idealfall würde eine weitblickende Lösung des „unified logon“-Problems alle oben genannten Teilprobleme lösen, ohne Informationen auf den UNIX-Systemen zu duplizieren und ohne zusätzliche Arbeiten für den System-Administrator zu verursachen, wenn er Benutzer und Gruppen auf den einzelnen Systemen administriert. Das Winbind-System bietet eine einfache und elegante Lösung für alle drei Teile des „unified logon“-Problems an.

Was Winbind anbietet

Winbind vereint die UNIX- und Windows NT-Konten-Verwaltung, indem es einer UNIX-Maschine erlaubt, ein vollwertiges Mitglied einer NT-Domäne zu werden. Sobald dies erfolgt ist, sieht die UNIX-Maschine die NT-Benutzer und -Gruppen so, als ob sie „native“ UNIX-Benutzer und -Gruppen wären, was die Benutzung der NT-Domäne in fast derselben Art erlaubt, wie NIS+ in reinen UNIX-Umgebungen verwendet wird.

Als Endergebnis wird, immer wenn ein Programm auf der UNIX-Maschine das Betriebssystem nach einem Benutzer- oder Gruppen-Namen fragt, die Anfrage an den NT-Domänencontroller weitergegeben, der diese Namensabfrage durchführt. Weil Winbind sich auf einem sehr tiefgreifenden Level ins Betriebssystem einhängt (über die NSS-Namensauflösungsmodule in der C-Library), ist diese Umleitung zum NT-Domänencontroller völlig transparent.

Die Benutzer auf der UNIX-Maschine können dann NT-Benutzer- und NT-Gruppen-Namen so verwenden, als ob sie „native“ UNIX-Namen wären. Sie können mit chown Eigentümer von Dateien werden, so dass die Dateien NT-Domänen-Benutzern gehören, oder sich sogar auf einer UNIX-Maschine anmelden und eine UNIX-X-Window-Session als Domänen-Benutzer ausführen.

Das einzige sichtbare Anzeichen, dass Winbind verwendet wird, ist, dass Benutzer- und Gruppen-Namen die Form DOMÄNE\benutzer und DOMÄNE\gruppe annehmen. Das ist notwendig, da Winbind auf diese Weise erkennt, wann eine Umleitung zum Domänencontroller erforderlich ist und auf welche Domäne sich diese Anfrage bezieht.

Zusätzlich bietet Winbind einen Authentifikationsdienst, der sich ins PAM-System (Pluggable Authentication Modules) einhängt, um allen PAM-fähigen Applikationen die Authentifikation über eine NT-Domäne anzubieten. Diese Fähigkeit löst das Problem der Synchronisation von Passwörtern zwischen Systemen, da alle Passwörter an nur einem Platz gespeichert werden - auf dem Domänencontroller.

Zielgruppen

Winbind zielt auf Organisationen ab, die eine existierende, auf NT-Domänen basierende Infrastruktur haben, in die sie UNIX-Maschinen integrieren wollen. Winbind erlaubt diesen Organisationen, UNIX-Maschinen einzusetzen, ohne eine separate Struktur für deren Konten aufrechterhalten zu müssen. Dies vereinfacht den administrativen Overhead der Integration von UNIX in einer NT-basierenden Organisation.

Eine weitere interessante Art, in der wir erwarten, dass Winbind eingesetzt wird, ist Winbind als zentraler Teil von UNIX-basierenden Geräten. Solche Geräte, die Datei- und Druck-Dienste für MS-basierende Netzwerke anbieten, können Winbind einsetzen, um eine nahtlose Integration in die Domäne zu erreichen.

Wie Winbind arbeitet

Das Winbind-System ist rund um eine Client-Server-Architektur entworfen worden. Ein winbindd-Daemon mit langer Laufzeit hört auf einem UNIX-Domänen-Socket auf ankommende Anfragen. Diese Anfragen („Requests“) werden von den NSS- und PAM-Clients generiert und sequenziell verarbeitet.

Die Technologien, die zur Implementation von Winbind verwendet werden, werden nachfolgend im Detail beschrieben.

Microsoft Remote Procedure Calls

In den letzten paar Jahren wurden von verschiedenen Samba-Team-Mitgliedern Anstrengungen unternommen, die verschiedenen Aspekte des Systems „Microsoft Remote Procedure Call“ (MSRPC) zu entschlüsseln. Dieses System wird für die meisten netzwerkbasierenden Operationen zwischen Windows NT-Maschinen verwendet, inklusive Fernwartung, Benutzer-Authentifikation und Druck-Spooling. Obwohl diese Arbeit ursprünglich zur Unterstützung der Funktionalitäten primären Domänencontroller (PDC) in Samba geleistet wurde, hat sie auch eine Menge Code hervorgebracht, die für andere Zwecke eingesetzt werden kann.

Winbind verwendet verschiedene MSRPC-Aufrufe, um Domänen-Benutzer und -Gruppen aufzuzählen und detaillierte Informationen über einzelne Benutzer oder Gruppen zu beziehen. Andere MSRPC-Aufrufe können zur Authentifikation von NT-Domänen-Benutzern verwendet werden und zum Ändern von Benutzer-Passwörtern. Durch direktes Abfragen eines Windows-PDCs stellt Winbind die Zuordnung von NT-Konteninformationen zu UNIX-Benutzer- und Gruppen-Namen her.

Microsoft Active Directory

Seit Ende 2001 hat Samba die Fähigkeiten, mit Microsoft Windows 2000 über dessen „Native Mode“-Protokolle zusammenzuarbeiten statt über die NT4-RPC-Dienste. Unter Verwendung von LDAP und Kerberos kann ein Domänen-Mitglied, das Winbind ausführt, Benutzer und Gruppen genau in derselben Art aufzählen, wie es ein Windows 200x-Client tun würde, und schafft damit eine viel effizientere und effektivere Winbind-Implementation.

Name Service Switch

Der Name Service Switch (NSS) ist eine Funktionalität, die in vielen UNIX-Betriebssystemen vorhanden ist. Er erlaubt das Auflösen von System-Informationen, wie Hostnamen, Mail-Aliases oder Benutzerinformationen unter Verwendung verschiedener Quellen. Zum Beispiel kann eine Standalone-UNIX-Workstation ihre Systeminformationen aus einer Reihe von einfachen Dateien im lokalen Dateisystem beziehen. Eine vernetzte Workstation könnte zuerst versuchen, die Systeminformationen aus den lokalen Dateien zu beziehen und dann eine NIS-Datenbank oder einen DNS-Server nach Informationen zu Hostnamen befragen.

Die NSS-API erlaubt es Winbind, sich selbst als Quelle für Systeminformationen anzubieten, wenn UNIX-Benutzer- und Gruppen-Namen aufgelöst werden sollen. Winbind verwendet dieses Interface und Informationen, die mit MSRPC-Aufrufen von einem Windows NT-Server bezogen wurden, um eine neue Informationsquelle zur Verfügung zu stellen. Unter Verwendung von Standard-UNIX-Bibliotheksaufrufen kann man die Benutzer und Gruppen auf einer UNIX-Maschine, die Winbind ausführt, auflisten und alle Benutzer und Gruppen in einer NT-Domäne plus diejenigen jeglicher Vertrauensdomänen so sehen, als ob sie lokale Benutzer und Gruppen wären.

Die primäre Steuerdatei für NSS ist /etc/nsswitch.conf. Wenn eine UNIX-Applikation eine Anfrage stellt, durchsucht die C-Library /etc/nsswitch.conf nach einer Zeile, die dem erfragten Dienst entspricht, z.B. dem Dienst „passwd“, der verwendet wird, wenn nach Benutzer- oder Gruppen-Namen gesucht wird. Diese Konfigurationszeile gibt an, welche Implementation dieses Diensts in welcher Reihenfolge versucht werden soll. Wenn die Zeile

		passwd: files example
		

lautet, dann wird die C-Library zuerst ein Modul namens /lib/libnss_files.so laden, gefolgt vom Modul /lib/libnss_example.so. Die C-Library wird dynamisch jedes dieser Module der Reihe nach laden und die Auflösungsfunktionen innerhalb jedes Moduls ausführen, um zu versuchen, die Anfrage aufzulösen. Sobald dies geschehen ist, gibt die C-Library das Ergebnis an die Anwendung zurück.

Dieses NSS-Interface bietet eine einfache Möglichkeit, Winbind in das Betriebssystem einzuhängen. Sie müssen nur libnss_winbind.so in /lib/ platzieren und dann „winbind“ an der richtigen Stelle in /etc/nsswitch.conf hinzufügen. Die C-Library wird dann Winbind zur Namensauflösung aufrufen.

Pluggable Authentication Modules

Pluggable Authentication Modules, auch als PAM bekannt, sind ein System zum Abstrahieren von Authentifikations- und Autorisationstechnologien. Mit einem PAM-Modul ist es möglich, verschiedene Authentifikationsmethoden für verschiedene Systemanwendungen zu spezifizieren, ohne diese Anwendungen neu kompilieren zu müssen. PAM ist außerdem beim Implementieren einer speziellen Richtlinie für die Autorisierung hilfreich. Zum Beispiel könnte ein System-Administrator Konsolen-Logins nur den Benutzern erlauben, die in der lokalen Passwort-Datei gespeichert sind, und Netzwerk-Logins nur dem Benutzern, die in einer NIS-Datenbank gespeichert sind.

Winbind nutzt das Authentifikationsmanagement- und Passwort-Management-PAM-Interface, um Windows-NT-Benutzer in ein UNIX-System zu integrieren. Das erlaubt es Windows-NT-Benutzern, sich an einer UNIX-Maschine anzumelden und durch einen passenden PDC authentifiziert zu werden. Diese Benutzer können außerdem ihre Passwörter ändern, und diese Veränderung findet direkt auf dem PDC statt.

PAM wird dadurch konfiguriert, dass im Verzeichnis /etc/pam.d/ Steuerdateien für jeden Dienst bereitgestellt werden, der Authentifikation benötigt. Wenn eine Authentifikationsanfrage von einer Anwendung gestellt wird, liest der PAM-Code in der C-Library aus dieser Steuerdatei, welche Module in welcher Reihenfolge für diese Authentifikation geladen werden müssen. Das Interface vereinfacht das Hinzufügen neuer Authentifikationsdienste zu Winbind. Sie müssen lediglich das Modul pam_winbind.so in das Verzeichnis /lib/security/ kopieren und die Steuerdateien der relevanten Dienste aktualisieren, um eine Authentifikation via Winbind zu erlauben. Lesen Sie die PAM-Dokumentation in ??? für mehr Informationen dazu.

Zuordnung von Benutzer- und Gruppen-IDs

Wenn ein Benutzer oder eine Gruppe unter Windows NT/200x angelegt wird, wird ihm bzw. ihr ein „numerical relative identifier“ (RID) zugeordnet. Das ist etwas anders als in UNIX, das einen Nummernbereich für Benutzer und denselben Nummernbereich für Gruppen hat. Es ist die Aufgabe von Winbind, die RIDs in UNIX-IDs zu konvertieren und vice versa. Wenn Winbind konfiguriert wird, wird ihm ein Teil des UNIX-Benutzer-ID-Namensraums und ein Teil des UNIX-Gruppen-ID-Namensraums zugewiesen, um darin die Windows NT-Benutzer und -Gruppen zu speichern. Wenn ein Windows NT-Benutzer zum ersten Mal aufgelöst werden soll, wird ihm die nächste freie UNIX-ID aus dem Bereich zugewiesen. Derselbe Prozess wird für Windows NT-Gruppen angewendet. Im Laufe der Zeit hat Winbind dann alle Windows NT-Benutzer und -Gruppen entsprechenden UNIX-Benutzern und -Gruppen zugewiesen.

Die Ergebnisse dieser Zuordnung werden dauerhaft in einer ID-Zuordnungsdatenbank abgelegt (gespeichert in einer tdb-Datenbank). Das gewährleistet die konsistente Zuordnung von RIDs zu UNIX-IDs.

Das Cachen der Resultate

Ein aktives System kann sehr viele Anfragen nach Benutzer- und Gruppen-Namen generieren. Um die Netzwerklast dieser Anfragen zu reduzieren, verwendet Winbind ein Caching-Schema, das auf der SAM-Sequenznummer beruht, die von NT-Domänencontrollern zur Verfügung gestellt wird. Benutzer- oder Gruppen-Informationen, die von einem PDC zurückgegeben werden, werden von Winbind gemeinsam mit einer auch vom PDC vergebenen Sequenznummer gepuffert. Diese Sequenznummer wird immer dann von Windows NT erhöht, wenn irgendeine Benutzer- und Gruppen-Information verändert wird. Wenn ein gepufferter Eintrag veraltet ist, wird die Sequenznummer vom PDC abgefragt und mit der Sequenznummer des Cache-Eintrags verglichen. Stimmen die beiden nicht überein, wird die gepufferte Information verworfen und die aktuelle Information direkt vom PDC abgefragt.

Installation und Konfiguration

Einführung

Dieser Abschnitt beschreibt die Abläufe, die notwendig sind, um Winbind in Betrieb zu nehmen. Winbind kann eine Zugriffs- und Authentifikationsverwaltung für Windows-Domänen-Benutzer zur Verfügung stellen, indem es einen Windows NT- oder Windows 200x-PDC sowohl für normale Dienste wie telnet und ftp als auch für Samba zur Verfügung stellt.

  • Warum sollte ich das tun?

    Dies erlaubt dem Samba-Administrator, auf dem Authentifikationsmechanismus des Windows NT/200x-PDC für die Authentifikation von Domänen-Mitgliedern aufzubauen. Windows NT/200x-Benutzer müssen nicht länger Konten auf dem Samba-Server haben.

  • Wer sollte dieses Dokument lesen?

    Dieses Dokument ist für System-Administratoren gedacht. Wenn Sie Samba auf einem Datei-Server implementieren und Sie wollen (ziemlich einfach) bestehende Windows NT/200x-Benutzer von Ihrem PDC auf dem Samba-Server integrieren, ist dieses Dokument das richtige für Sie.

Anforderungen

Wenn Sie eine Samba-Konfigurationsdatei haben, die Sie momentan benutzen, SICHERN SIE DIE DATEI! Wenn Ihr System bereits PAM verwendet, SICHERN SIE die Inhalte des Verzeichnisses /etc/pam.d! Wenn Sie noch keine Bootdiskette angelegt haben, ERSTELLEN SIE JETZT EINE!

Das Herumbasteln an den PAM-Konfigurationsdateien kann es nahezu unmöglich machen, sich an Ihrer Maschine anzumelden. Sie müssen imstande sein, im „single user mode“ Ihre Maschine neu zu booten und Ihr Verzeichnis /etc/pam.d in den Urzustand zu versetzen, wenn Sie von Ihren Fortschritten irgendwie frustriert sein sollten.

Die letzte Version von Samba-3 beinhaltet einen funktionierenden Winbind-Daemon. Bitte besuchen Sie die Samba-Website, oder - noch besser - Ihren nächsten Samba-Mirror, um Anleitungen zum Download des Quellcodes zu erhalten.

Um Domänen-Benutzern die Fähigkeit zu verleihen, auf Samba-Freigaben und -Dateien zuzugreifen, wie auch auf möglicherweise andere von Ihrer Samba-Maschine angebotene Dienste, muss PAM auf dieser Maschine ordnungsgemäß eingerichtet sein. Um die Winbind-Module zu kompilieren, sollten Sie zumindest die PAM-Entwickler-Bibliotheken auf Ihrem System installiert haben. Bitte sehen Sie sich dazu auch die PAM-Website http://www.kernel.org/pub/linux/libs/pam/ an.

Testen

Bevor Sie beginnen, ist es möglicherweise das Beste, all die Samba-bezogenen Daemons zu killen, die auf Ihrem Server laufen. Killen Sie all die smbd-, nmbd- und winbindd -Prozesse, die da laufen. Um PAM zu verwenden, stellen Sie sicher, dass Sie das Standard-PAM-Paket haben, das die Verzeichnis-Struktur /etc/pam.d unterstützt, und die PAM-Module enthält, die von PAM-fähigen Diensten verwendet werden, sowie einige PAM-Bibliotheken, und die Einträge für PAM in /usr/doc und /usr/man. Winbind kann besser in Samba kompiliert werden, wenn auch das Paket „pam-devel“ installiert ist. Dieses Paket beinhaltet die Header-Dateien, die zum Kompilieren PAM-fähiger Anwendungen benötigt werden.

Konfigurieren Sie nsswitch.conf und die Winbind-Bibliotheken unter Linux und Solaris

PAM ist eine Standard-Komponente der meisten aktuellen UNIX/Linux-Systeme. Leider installieren wenige Systeme die pam-devel-Bibliotheken, die benötigt werden, um ein PAM-fähiges Samba zu kompilieren. Zusätzlich kann Samba-3 automatisch die Winbind-Dateien in die benötigten Verzeichnisse auf Ihrem System installieren. Bevor Sie also zu tief graben, prüfen Sie zuerst, ob die nachfolgende Konfiguration wirklich notwendig ist. Es kann sein, dass Sie nur /etc/nsswitch.conf konfigurieren müssen.

Die Bibliotheken zur Ausführung des winbindd-Daemons durch nsswitch müssen in die entsprechenden Verzeichnisse kopiert werden:

root# cp ../samba/source/nsswitch/libnss_winbind.so /lib

Ich habe außerdem herausgefunden, dass der folgende Symlink angelegt werden muss:

root# ln -s /lib/libnss_winbind.so /lib/libnss_winbind.so.2

Und im Falle von Sun Solaris:

root# ln -s /usr/lib/libnss_winbind.so /usr/lib/libnss_winbind.so.1
root# ln -s /usr/lib/libnss_winbind.so /usr/lib/nss_winbind.so.1
root# ln -s /usr/lib/libnss_winbind.so /usr/lib/nss_winbind.so.2

Nun müssen Sie als root die Datei /etc/nsswitch.conf editieren, um Benutzer- und Gruppen-Einträge vom winbindd-Daemon sichtbar zu machen. Mein Eintrag in /etc/nsswitch.conf sieht nach dem Editieren so aus:

	passwd:     files winbind
	shadow:     files 
	group:      files winbind

Die vom Daemon winbindd benötigten Bibliotheken werden automatisch in den Cache von ldconfig eingetragen, sobald Ihr System das nächste Mal neu startet, aber es geht schneller (und ohne Reboot), wenn Sie das von Hand tun:

root# /sbin/ldconfig -v | grep winbind

Dies macht libnss_winbind für winbindd verfügbar und gibt eine Bestätigung zurück.

NSS Winbind auf AIX

(Dieser Abschnitt ist nur für jene gedacht, die AIX betreiben.)

Das Winbind-AIX-Identifikationsmodul wird als libnss_winbind.so im nsswitch-Verzeichnis des Samba-Quellcodes kompiliert. Diese Datei kann ins Verzeichnis /usr/lib/security kopiert werden, und die AIX-Namenskonvention würde sagen, dass es WINBIND genannt werden sollte. Ein Absatz wie

WINBIND:
        program = /usr/lib/security/WINBIND
        options = authonly

kann dann zu /usr/lib/security/methods.cfg hinzugefügt werden. Dieses Modul unterstützt nur die Identifikation, aber es gibt Meldungen über die erfolgreiche Verwendung des Standard-Winbind-PAM-Moduls für die Authentifikation. Seien Sie mit dem Konfigurieren ladbarer Authentifikationsmodule vorsichtig, da Sie es damit unmöglich machen können, sich am System anzumelden. Mehr Informationen zur AIX-Authentifikationsmodul-API finden Sie unter „Kernel Extensions and Device Support Programming Concepts for AIX. Chapter 18. Loadable Authentication Module Programming Interface, und mehr Informationen zur Administration der Module finden Sie unter System Management Guide: Operating System and Devices.

Das Konfigurieren von smb.conf

Einige Parameter werden in der Datei smb.conf benötigt, um das Verhalten von winbindd zu beeinflussen. Diese werden in der winbindd(8)-Manpage detaillierter beschrieben. Meine smb.conf, die in ??? gezeigt wird, wurde verändert, um die notwendigen Einträge in den Abschnitt [global] einzubinden.

Beispiel 21.1. smb.conf für Winbind

[global]
# Trenne Domäne und Benutzername durch '+', wie DOMÄNE+benutzername
winbind separator = +
# Verwende UIDs von 10000 bis 20000 für Domänen-Benutzer
idmap uid = 10000-20000
# Verwende GIDs von 10000 bis 20000 für Domänen-Gruppen
idmap gid = 10000-20000
# Erlaube die Aufzählung von winbind-Benutzern und -Gruppen
winbind enum users = yes
winbind enum groups = yes
# Gib winbind-Benutzern eine echte Shell (nur benötigt, wenn diese telnet-Zugriff haben)
template homedir = /home/winnt/%D/%U
template shell = /bin/bash

Den Samba-Server der Domäne des PDCs anschließen

Geben Sie den folgenden Befehl ein, um den Samba-Server der Domäne des PDCs anzuschließen, wobei DOMÄNE der Name Ihrer Windows-Domäne ist und Administrator der Name eines Domänen-Benutzers mit administrativen Rechten in der Domäne.

root# /usr/local/samba/bin/net rpc join -S PDC -U Administrator

Die richtige Antwort auf diesen Befehl sollte „Joined the domain DOMÄNE“ sein.

Starten und Testen des winbindd-Daemons

Sie wollen eventuell Ihr Samba-Startskript verändern, um den winbindd-Daemon automatisch aufzurufen, wenn die anderen Teile von Samba starten, aber es ist möglich, zuerst nur den Winbind-Teil alleine zu testen. Um den Winbind-Dienst zu starten, geben Sie folgenden Befehl als root ein:

root# /usr/local/samba/bin/winbindd

Anmerkung

Obiges geht davon aus, dass Samba im Verzeichnis /usr/local/samba installiert wurde. Sie müssen nach dem Pfad Ihrer Samba-Dateien suchen, falls dies auf Ihrem System nicht der Pfad zu winbindd ist.

Winbindd kann mittlerweile auch im „dual daemon mode“ laufen. Das lässt ihn in Form von zwei Prozessen laufen. Der erste beantwortet alle Anfragen aus dem Cache und beschleunigt damit die Antworten an die Clients. Der andere Prozess aktualisiert den Cache für die Anfrage, die der erste Prozess gerade beantwortet hat. Der Vorteil all dessen ist, dass die Antworten schneller sind und trotzdem richtig bleiben. Sie aktivieren diesen Modus mit der Option -B auf der Befehlszeile:

root# /usr/local/samba/bin/winbindd -B

Ich bin immer paranoid und prüfe, dass der Daemon wirklich läuft:

root# ps -ae | grep winbindd

Dieser Befehl sollte eine Ausgabe wie die folgende erzeugen. Wenn der Daemon läuft, sollten Sie etwas wie das hier sehen:

3025 ?        00:00:00 winbindd

Nun zum Test in der Praxis, versuchen Sie, Informationen über die Benutzer auf Ihrem PDC zu erhalten:

root# /usr/local/samba/bin/wbinfo -u

Dies sollte eine Liste Ihrer Windows-Benutzer auf Ihrem PDC zurückgeben. Ich bekomme zum Beispiel das:

	CEO+Administrator
	CEO+burdell
	CEO+Guest
	CEO+jt-ad
	CEO+krbtgt
	CEO+TsInternetUser

Offensichtlich habe ich meine Domäne „CEO“ benannt, und mein winbind separator ist „+“.

Sie können dasselbe tun, um Gruppeninformationen vom PDC zu erhalten:

root# /usr/local/samba/bin/wbinfo -g
	CEO+Domain Admins
	CEO+Domain Users
	CEO+Domain Guests
	CEO+Domain Computers
	CEO+Domain Controllers
	CEO+Cert Publishers
	CEO+Schema Admins
	CEO+Enterprise Admins
	CEO+Group Policy Creator Owners

Die Funktion getent kann jetzt dafür verwendet werden, Gesamt-Listen sowohl von lokalen als auch von PDC-Benutzern und -Gruppen zu erhalten. Probieren Sie folgenden Befehl aus:

root# getent passwd

Sie sollten eine Liste erhalten, die wie Ihre Datei /etc/passwd aussieht, gefolgt von den Domänen-Benutzern mit ihren neuen UIDs, GIDs, home-Verzeichnissen und Standard-Shells.

Dasselbe kann für Gruppen geschehen:

root# getent group

Die init.d-Startskripten anpassen

Linux

Der winbindd-Daemon muss starten, nachdem die smbd- und nmbd-Daemons laufen. Um diese Forderung zu erfüllen, müssen Sie die Start-Skripten Ihres Systems anpassen. Sie finden sie in Red Hat Linux unter /etc/init.d/smb und in Debian Linux unter /etc/init.d/samba. Editieren Sie Ihr Skript, um den winbindd-Daemon in der richtigen Sequenz zu starten. Mein Start-Skript startet smbd, nmbd und winbindd direkt aus dem Verzeichnis /usr/local/samba/bin. Die Funktion start in diesem Skript sieht so aus:

start() {
        KIND="SMB"
        echo -n $"Start des Diensts $KIND: "
        daemon /usr/local/samba/bin/smbd $SMBDOPTIONS
        RETVAL=$?
        echo
        KIND="NMB"
        echo -n $"Start des Diensts $KIND: "
        daemon /usr/local/samba/bin/nmbd $NMBDOPTIONS
        RETVAL2=$?
        echo
        KIND="Winbind"
        echo -n $"Start des Diensts $KIND: "
        daemon /usr/local/samba/bin/winbindd
        RETVAL3=$?
        echo
        [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 -a $RETVAL3 -eq 0 ] && \
		touch /var/lock/subsys/smb || RETVAL=1
        return $RETVAL
}

Wenn Sie winbindd im „dual daemon mode“ ausführen wollen, ersetzen Sie die Zeile

        daemon /usr/local/samba/bin/winbindd

in obigem Beispiel durch:

        daemon /usr/local/samba/bin/winbindd -B

.

Die Funktion stop hat einen korrespondierenden Eintrag, um die Dienste herunterzufahren, und sieht so aus:

stop() {
        KIND="SMB"
        echo -n $"Stoppen des Diensts $KIND: "
        killproc smbd
        RETVAL=$?
        echo
        KIND="NMB"
        echo -n $"Stoppen des Diensts $KIND: "
        killproc nmbd
        RETVAL2=$?
        echo
        KIND="Winbind"
        echo -n $"Stoppen des Diensts $KIND: "
        killproc winbindd
        RETVAL3=$?
        [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 -a $RETVAL3 -eq 0 ] && \
		 rm -f /var/lock/subsys/smb
        echo ""
        return $RETVAL
}
Solaris

Winbind funktioniert nicht unter Solaris 9, lesen Sie dazu ???.

Unter Solaris müssen Sie das Start-Skript /etc/init.d/samba.server editieren. Es startet üblicherweise nur smbd und nmbd, sollte jetzt aber auch winbindd starten. Wenn Sie Samba in /usr/local/samba/bin installiert haben, sollte die Datei etwas wie das hier enthalten:

	##
	## samba.server
	##

	if [ ! -d /usr/bin ]
	then                    # /usr nicht gemountet 
		exit
	fi

	killproc() {            # kill den/die angegebenen Prozess(e) 
		pid=`/usr/bin/ps -e |
		     /usr/bin/grep -w $1 |
		     /usr/bin/sed -e 's/^  *//' -e 's/ .*//'`
		[ "$pid" != "" ] && kill $pid
	}
	 
	# Starte/stoppe die für den Samba-Server erforderlichen Prozesse


	case "$1" in

	'start')
	#
	# Editieren Sie diese Zeilen passend zu Ihrer Installation 
	# (Pfade, Arbeitsgruppe, Host)
	#
	echo Starten von SMBD
	   /usr/local/samba/bin/smbd -D -s \
		/usr/local/samba/smb.conf

	echo Starten von NMBD
	   /usr/local/samba/bin/nmbd -D -l \
		/usr/local/samba/var/log -s /usr/local/samba/smb.conf

	echo Starten von WINBINDD
	   /usr/local/samba/bin/winbindd
	   ;;

	'stop')
	   killproc nmbd
	   killproc smbd
	   killproc winbindd
	   ;;

	*)
	   echo "Usage: /etc/init.d/samba.server { start | stop }"
	   ;;
	esac

Auch hier gilt: Wenn Sie Samba im „dual daemon mode“ ausführen wollen, ersetzen Sie

	/usr/local/samba/bin/winbindd

in obigem Skript durch:

	/usr/local/samba/bin/winbindd -B

Neustart

Wenn Sie an diesem Punkt die Daemons smbd, nmbd und winbindd neu starten, sollten Sie sich als Domänen-Mitglied genauso mit dem Samba-Server verbinden können, als ob Sie ein lokaler Benutzer wären.

Winbind und PAM konfigurieren

Wenn Sie es bis hierher geschafft haben, wissen Sie, dass winbindd und Samba zusammenarbeiten. Wenn Sie Winbind dazu verwenden wollen, Authentifikation für andere Dienste anzubieten, lesen Sie weiter. Die PAM-Konfigurationsdateien müssen in diesem Schritt verändert werden. (Haben Sie auch nicht vergessen, Backups der Dateien in /etc/pam.d anzulegen? Wenn doch, sichern Sie sie jetzt.)

Sie brauchen ein PAM-Modul, um winbindd mit diesen anderen Diensten zu verwenden. Dieses Modul wird im Verzeichnis ../source/nsswitch kompiliert, indem Sie den Befehl

root# make nsswitch/pam_winbind.so

im Verzeichnis ../source ausführen. Die Datei pam_winbind.so sollte zu Ihren anderen PAM-Sicherheitsmodulen kopiert werden. Auf meinem RedHat-System war das das Verzeichnis /lib/security. Unter Solaris liegen die PAM-Sicherheitsmodule in /usr/lib/security:

root# cp ../samba/source/nsswitch/pam_winbind.so /lib/security

Linux/FreeBSD-spezifische PAM-Konfiguration

Die Datei /etc/pam.d/samba muss nicht verändert werden. Ich habe diese Datei einfach so belassen, wie sie war:

	auth    required        /lib/security/pam_stack.so service=system-auth
	account required        /lib/security/pam_stack.so service=system-auth

Die anderen Dienste, die ich modifiziert habe, um die Verwendung von Winbind als Authentifikationsdienst zu erlauben, waren der normale Konsolen-Login (oder eine Terminal-Session), telnet-logins und der ftp-Dienst. Um diese Dienste zu aktivieren, müssen Sie zuerst die Einträge in /etc/xinetd.d (oder /etc/inetd.conf) ändern. Red Hat Linux ab Version 7.1 verwendet die neue xinetd.d-Struktur. In diesem Fall müssen Sie die Zeilen in /etc/xinetd.d/telnet und /etc/xinetd.d/wu-ftp ändern.

	enable = no

wird zu:

	enable = yes

Damit der ftp-Dienst ordnungsgemäß arbeitet, müssen Sie auch die einzelnen Verzeichnisse für die Domänen-Benutzer auf dem Server angelegt haben oder das home-Verzeichnis für die Domänen-Benutzer auf ein allgemeines, gemeinsames Verzeichnis für alle Domänen-Benutzer gesetzt haben. Das kann einfach dadurch geschehen, dass Sie den globalen Eintrag template homedir in smb.conf setzen.

Die Datei /etc/pam.d/ftp kann verändert werden, um den ftp-Zugriff in derselben Art wie den Samba-Zugriff zu erlauben. Meine Datei /etc/pam.d/ftp wurde so verändert:

auth       required     /lib/security/pam_listfile.so item=user sense=deny \
	 file=/etc/ftpusers onerr=succeed
auth       sufficient   /lib/security/pam_winbind.so
auth       required     /lib/security/pam_stack.so service=system-auth
auth       required     /lib/security/pam_shells.so
account    sufficient   /lib/security/pam_winbind.so
account    required     /lib/security/pam_stack.so service=system-auth
session    required     /lib/security/pam_stack.so service=system-auth

Die Datei /etc/pam.d/login kann fast genauso verändert werden. Sie sieht jetzt so aus:

auth       required     /lib/security/pam_securetty.so
auth       sufficient   /lib/security/pam_winbind.so
auth       sufficient   /lib/security/pam_UNIX.so use_first_pass
auth       required     /lib/security/pam_stack.so service=system-auth
auth       required     /lib/security/pam_nologin.so
account    sufficient   /lib/security/pam_winbind.so
account    required     /lib/security/pam_stack.so service=system-auth
password   required     /lib/security/pam_stack.so service=system-auth
session    required     /lib/security/pam_stack.so service=system-auth
session    optional     /lib/security/pam_console.so

In diesem Fall habe ich die Zeilen

auth sufficient /lib/security/pam_winbind.so

wie zuvor hinzugefügt, aber auch davor

required pam_securetty.so

eingefügt, um root-Logins über das Netzwerk zu verbieten. Ich habe auch eine Zeile

sufficient /lib/security/pam_unix.so use_first_pass

nach der winbind.so-Zeile eingefügt, um die nervenden Doppel-Aufforderungen nach dem Passwort loszuwerden.

Solaris-spezifische Konfiguration

Die Datei /etc/pam.conf muss geändert werden. Ich habe diese Datei so geändert, dass meine Domänen-Benutzer sich sowohl lokal als auch über telnet anmelden können. Sie können die Datei pam.conf an Ihre Bedürfnisse anpassen, aber sorgen Sie dafür, dass Sie wissen, was Sie tun, da diese Änderungen im schlimmsten Fall Ihre Maschine in einem nahezu nicht-startfähigen Zustand zurücklassen. Ich habe Folgendes geändert:

#
#ident "@(#)pam.conf 1.14 99/09/16 SMI"
#
# Copyright (c) 1996-1999, Sun Microsystems, Inc.
# All Rights Reserved.
#
# PAM configuration
#
# Authentication management
#
login   auth required   /usr/lib/security/pam_winbind.so
login auth required  /usr/lib/security/$ISA/pam_UNIX.so.1 try_first_pass 
login auth required  /usr/lib/security/$ISA/pam_dial_auth.so.1 try_first_pass 
#
rlogin  auth sufficient /usr/lib/security/pam_winbind.so
rlogin  auth sufficient /usr/lib/security/$ISA/pam_rhosts_auth.so.1
rlogin auth required  /usr/lib/security/$ISA/pam_UNIX.so.1 try_first_pass
#
dtlogin auth sufficient /usr/lib/security/pam_winbind.so
dtlogin auth required  /usr/lib/security/$ISA/pam_UNIX.so.1 try_first_pass
#
rsh auth required /usr/lib/security/$ISA/pam_rhosts_auth.so.1
other   auth sufficient /usr/lib/security/pam_winbind.so
other auth required /usr/lib/security/$ISA/pam_UNIX.so.1 try_first_pass
#
# Account management
#
login   account sufficient      /usr/lib/security/pam_winbind.so
login account requisite /usr/lib/security/$ISA/pam_roles.so.1 
login account required /usr/lib/security/$ISA/pam_UNIX.so.1 
#
dtlogin account sufficient      /usr/lib/security/pam_winbind.so
dtlogin account requisite /usr/lib/security/$ISA/pam_roles.so.1 
dtlogin account required /usr/lib/security/$ISA/pam_UNIX.so.1 
#
other   account sufficient      /usr/lib/security/pam_winbind.so
other account requisite /usr/lib/security/$ISA/pam_roles.so.1 
other account required /usr/lib/security/$ISA/pam_UNIX.so.1 
#
# Session management
#
other session required /usr/lib/security/$ISA/pam_UNIX.so.1 
#
# Password management
#
#other   password sufficient     /usr/lib/security/pam_winbind.so
other password required /usr/lib/security/$ISA/pam_UNIX.so.1 
dtsession auth required /usr/lib/security/$ISA/pam_UNIX.so.1
#
# Support for Kerberos V5 authentication (uncomment to use Kerberos)
#
#rlogin auth optional /usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass
#login auth optional /usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass
#dtlogin auth optional /usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass
#other auth optional /usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass
#dtlogin account optional /usr/lib/security/$ISA/pam_krb5.so.1
#other account optional /usr/lib/security/$ISA/pam_krb5.so.1
#other session optional /usr/lib/security/$ISA/pam_krb5.so.1
#other password optional /usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass

Ich habe auch hier eine Zeile try_first_pass nach der Zeile mit winbind.so eingefügt, um die Doppel-Aufforderungen nach den Passwörtern loszuwerden.

Jetzt starten Sie Samba neu und versuchen, sich über die jeweilige Anwendung zu verbinden, die Sie in pam.conf konfiguriert haben.

Zusammenfassung

Das Winbind-System erlaubt unter Verwendung des Name Service Switch, der Pluggable-Authentication-Module und entsprechender Microsoft RPC-Aufrufe die nahtlose Integration von Microsoft Windows NT-Domänen-Benutzern in ein UNIX-System. Das Ergebnis ist eine große Verringerung des administrativen Aufwands, der zum Betrieb eines gemischten UNIX- und NT-Netzwerks erforderlich ist.

Gängige Fehler

Winbind hat eine Anzahl von Einschränkungen in der derzeit veröffentlichten Version. Wir hoffen, diese in zukünftigen Versionen beseitigen zu können:

  • Winbind ist derzeit nur für die Betriebssysteme Linux, Solaris, AIX und IRIX verfügbar, obwohl Portierungen auf andere Betriebssysteme sicherlich möglich sind. Um solche Portierungen zu ermöglichen, ist es erforderlich, dass die C-Library des jeweiligen Betriebssystems die Systeme Name Service Switch (NSS) und Pluggable Authentication Modules (PAM) unterstützt. Das wird immer gängiger, da NSS und PAM immer mehr Unterstützung von UNIX-Herstellern gewinnen.

  • Die Zuordnungen von Windows NT-RIDs zu UNIX-IDs wird nicht algorithmisch durchgeführt und hängt von der Reihenfolge ab, in der die nicht-zugeordneten Benutzer/Gruppen von Winbind gesehen werden. Es kann schwierig werden, die RID-zu-UNIX-ID-Zuordnungen wiederherzustellen, wenn die Datei, die diese Information enthält, beschädigt oder zerstört ist.

  • Derzeit berücksichtigt das Winbind-PAM-Modul die möglichen Zeitbeschränkungen nicht, die für Windows NT-Domänen-Benutzer gesetzt sein können (Workstation- und Login-Zeitbeschränkungen); diese muss der PDC erzwingen.

Warnung vor Problemen durch NSCD

Warnung

Führen Sie unter keinen Umständen nscd auf irgendeinem System aus, auf dem winbindd läuft.

Wenn nscd auf dem UNIX/Linux-System läuft, wird es selbst dann, wenn NSSWITCH korrekt konfiguriert ist, nicht möglich sein, die Namen von Domänen-Benutzern und -Gruppen aufzulösen.

Winbind löst keine Benutzer- und Gruppen-Namen auf

Meine Datei smb.conf ist ordnungsgemäß konfiguriert. Ich habe idmap uid = 12000 und idmap gid = 3000-3500 angegeben, und winbind läuft. Wenn ich Folgendes tue, funktioniert es prächtig:

root# wbinfo -u
MITTELERDE+maryo
MITTELERDE+jackb
MITTELERDE+ameds
...
MITTELERDE+root

root# wbinfo -g
MITTELERDE+Domain Users
MITTELERDE+Domain Admins
MITTELERDE+Domain Guests
...
MITTELERDE+Accounts

root# getent passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
...
maryo:x:15000:15003:Mary Orville:/home/MITTELERDE/maryo:/bin/false

Aber dieser Befehl schlägt fehl:

root# chown maryo a_file
chown: `maryo': invalid user
Das macht mich verrückt! Was kann da falsch sein?

Das ist dasselbe Problem wie oben. Ihr System führt höchstwahrscheinlich nscd aus. Stoppen Sie diesen Dienst, und starten Sie ihn nicht mehr! Ihr Problem wird gelöst sein.