Kapitel 11. Die Account-Datenbank

Jelmer R. Vernooij

Samba Team

John H. Terpstra

Samba Team

Gerald (Jerry) Carter

Samba Team

Jeremy Allison

Samba Team

Günther Deschner

LDAP updates

Olivier (lem) Lemaire

Rainer Dölker

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

Stefan G. Weichinger

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

Inhaltsverzeichnis

Eigenschaften und Vorzüge
Abwärtskompatible Backends
Neue Backends
Technische Information
Wichtige Bemerkungen zur Sicherheit
Die Zuordnung von Benutzer-Identifiern (UIDs) zwischen MS Windows und UNIX
Das Zuweisen gemeinsamer UIDs/GIDs auf verteilten Maschinen
Werkzeuge zur Verwaltung von Konten
Der Befehl smbpasswd
Der Befehl pdbedit
Passwort-Backends
Klartext
smbpasswd Datenbank für verschlüsselte Passwörter
tdbsam
ldapsam
MySQL
XML
Gängige Fehler
Benutzer können sich nicht anmelden
Benutzer werden zur falschen Backend-Datenbank hinzugefügt
Konfiguration der auth methods

Samba-3 besitzt die neue Fähigkeit, gleichzeitig mit mehreren Account-Backends zu arbeiten. Die möglichen neuen Kombinationen von Passwort-Backends ermöglichen Samba-3 eine Flexibilität und Skalierbarkeit, wie sie zuvor nur mit MS Windows Active Directory erreicht werden konnte. Dieses Kapitel beschreibt die neuen Funktionalitäten und zeigt, wie man das Beste aus ihnen herausholt.

Eigenschaften und Vorzüge

Samba-3 bietet folgende Funktionen an, um zu Samba-2.2.x abwärtskompatibel zu sein:

Abwärtskompatible Backends

Plain Text

Diese Option benutzt nichts weiter als das UNIX/Linux-/etc/passwd-Modell. Bei Betriebssystemen, die Pluggable Authentication Modules (PAM) bieten, werden alle PAM-Module unterstützt. Das Verhalten ist unverändert wie in Samba-2.2.x, und die Protokoll-Beschränkungen, die durch MS Windows-Clients bestehen, treffen gleichermaßen zu. Weitere Informationen über die Einschränkungen bei der Verwendung von Plain-Text-Passwörtern finden Sie im Abschnitt Technischen Informationen.

smbpasswd

Auch diese Option erlaubt weiterhin die Nutzung der Datei smbpasswd, die im simplen ASCII-(Text-)Stil gehalten ist und die verschlüsselten MS Windows-LanMan und NT-Passwörter sowie ein Feld für die Accountinformationen enthält. Diese Art der Passwort-Datenbank enthält keine MS Windows NT/200x-SAM-(Security Account Manager-)Informationen. Diese wären notwendig, um die erweiterten Funktionen für eine umfassendere Zusammenarbeit mit MS Windows NT4/200x-Servern zu bieten.

Diese Datenbank sollte nur benutzt werden, um eine Abwärtskompatibilität zu älteren Samba-Versionen zu gewährleisten. Sie wird möglicherweise von zukünftigen Versionen abgelehnt.

ldapsam_compat (Samba-2.2 LDAP Kompatibilität)

Es gibt eine Passwortdatenbank-Option, die weiterhin eine Zusammenarbeit mit einer existierenden OpenLDAP-Datenbank erlaubt, die noch Samba-2.2.x- LDAP-Schemata-Erweiterungen benutzt. Diese vorläufige Option ist als Migrationshilfe gedacht, auch wenn zum jetzigen Zeitpunkt kein zwingender Grund für eine Migration vorliegt. Diese Hilfe wird möglicherweise von zukünftigen Versionen abgelehnt.

Samba-3 führt einige neue Passwortdatenbank-Formen ein.

Neue Backends

tdbsam

Diese Datenbank ist eine umfangreiche Datenbank für lokale Server. Allerdings eignet sich diese Datenbankmethode nicht für das Aufsetzen von mehreren Domaincontrollern (z.B. ein PDC plus einem oder mehreren BDCs)

Die tdbsam-Passwort-Datenbank legt neben den alten smbpasswd-Informationen noch die erweiterten MS Windows NT/200x-SAM-Informationen in binärer Form in der TDB-(Trivial DataBase-)Datei ab. Das Einbeziehen der erweiterten Informationen macht es Samba-3 möglich, die gleichen Account- und System-Zugriffsrechte zu implementieren wie MS Windows NT4/200x-basierende Systeme.

Die Einbeziehung der Möglichkeiten von tdbsam ist eine direkte Reaktion auf Benutzernachfragen, die nach einer einfachen Betriebsart ohne den Aufwand von OpenLDAP verlangten. Es wird empfohlen, dieses Verfahren nur bei Standorten bis 250 Benutzern anzuwenden. Für größere Umgebungen wird eine OpenLDAP-basierende Installation wärmstens empfohlen.

ldapsam

Diese Datenbank ist eine umfangreiche Directory-Datenbank für Installationen mit verteilten Accounts.

Samba-3 hat eine neue, erweiterte Implementation von LDAP, die eine Konfiguration von OpenLDAP mit dem neuen Samba-Format-Schema voraussetzt. Dieses neue Format-Schema ist im Verzeichnis examples/LDAP der Samba-Distribution abgelegt.

Die neue LDAP-Implementation erweitert die Möglichkeiten zur Kontrolle signifikant, verglichen mit den Möglichkeiten älterer Samba-Versionen. Man kann nun unter anderem Profil-Einstellungen, Home-Verzeichnisse, Access Controls „per user“ vornehmen. Firmenkunden werden sehen, dass das Samba-Team auf die Bitten nach besserer Ressourcennutzung und mehr Skalierbarkeit reagiert hat.

mysqlsam (MySQL-basierende Datenbank)

Wir gehen davon aus, dass eine MySQL-basierende SAM in einigen Bereichen sehr beliebt sein wird. Es ist sicher eine Überlegung wert, dieses Datenbank-Backend für Standorte zu verwenden, die ihre existierende MySQL-Technologie erweitern möchten.

xmlsam (XML-basierende Datendatei)

erlaubt die Account- und Passwort-Informationen in einer XML-Datei abzulegen. Dieses Datenbank-Backend kann nicht für normalen Betrieb verwendet werden; es kann lediglich in Verbindung mit der Funktion pdbedit pdb2pdb genutzt werden. Die DTD, die benutzt wird, könnte in Zukunft geändert werden.

Die Option xmlsam kann für die Account-Migration zwischen verschiedenen Datenbanken oder für Backups nützlich sein. Überdies könnten die Daten bearbeitet werden, bevor sie in eine andere Datenbank übernommen werden.

Technische Information

Alte Windows-Clients senden Klartext-Passwörter über „den Draht“. Samba kann diese Passwörter prüfen, indem es sie verschlüsselt und mit dem Hash-Wert vergleicht, der in der UNIX-Benutzer-Datenbank gespeichert ist.

Neuere Windows-Clients senden verschlüsselte Passwörter (so genannte LanMan- und NT-Hashes) statt Klartext-Passwörtern. Die neuesten Clients senden nur verschlüsselte Passwörter und weigern sich, Klartext-Passwörter zu senden, außer ihre Registrierung wurde modifiziert.

Diese Passwörter können nicht in UNIX-artige verschlüsselte Passwörter konvertiert werden. Deshalb können Sie nicht die Standard-UNIX-Benutzerdatenbank verwenden und müssen die LanMan- und NT-Hashes an anderer Stelle speichern.

Zusätzlich zu verschieden verschlüsselten Passwörtern speichert Windows auch Daten für jeden Benutzer ab, die nicht in einer UNIX-Benutzerdatenbank abgespeichert werden. Zum Beispiel werden die Workstations gespeichert, von denen aus sich der Benutzer anmelden darf, wo sein Profil abgelegt wird und so weiter. Samba fragt diese Daten ab und speichert sie unter Verwendung eines passdb-Backends. Üblicherweise verfügbare Backends sind LDAP, Klartext-Dateien und MySQL. Mehr Informationen dazu finden Sie in der Manpage zu smb.conf im Abschnitt zum Parameter passdb backend.

Abbildung 11.1. IDMAP: Auflösung von SIDs auf UIDs

IDMAP: Auflösung von SIDs auf UIDs

Die Auflösung von SIDs auf UIDs ist für den korrekten Betrieb von Samba entscheidend. In beiden gezeigten Fällen, wenn winbindd nicht läuft oder nicht erreicht werden kann, ist nur eine lokale SID/UID-Auflösung möglich. Sehen Sie sich die Diagramme Auflösung von SIDs auf UIDs und Auflösung von UIDs auf SIDs an.

Abbildung 11.2. IDMAP: Auflösung von UIDs auf SIDs

IDMAP: Auflösung von UIDs auf SIDs

Wichtige Bemerkungen zur Sicherheit

Die UNIX- und SMB-Passwort-Verschlüsselungstechniken scheinen auf den ersten Blick ähnlich zu sein. Diese Ähnlichkeit ist jedoch nur sehr oberflächlich. Das UNIX-Schema sendet beim Anmelden Klartext-Passwörter über das Netz. Das ist schlecht. Das SMB-Verschlüsselungsschema sendet niemals das Klartext-Passwort über das Netzwerk, sondern speichert die 16-Byte-Hash-Werte auf der Platte. Das ist auch schlecht. Warum? Weil diese 16-Byte-Hash-Werte ein „Passwort-Äquivalent“ sind. Sie können das Passwort des Benutzers nicht daraus ableiten, aber diese Werte könnten möglicherweise in einem modifizierten Client dazu eingesetzt werden, Zugriff auf einen Server zu erlangen. Dies würde einiges technisches Wissen auf Seiten des Angreifers voraussetzen, ist jedoch definitiv möglich. Sie sollten daher die gespeicherten Daten, egal welche Datenbank Sie benutzen (smbpasswd, LDAP, MYSQL), so behandeln, als ob diese Daten die Klartext-Passwörter all Ihrer Benutzer enthielten. Diese Inhalte müssen geheim gehalten werden, und die Datei sollte dementsprechend geschützt werden.

Idealerweise würden wir ein Passwort-Schema bevorzugen, das Klartext-Passwörter weder im Netz noch auf der Festplatte verwendet. Dies ist unglücklicherweise nicht verfügbar, da Samba darauf beschränkt ist, kompatibel mit anderen SMB-Systemen (Windows NT, Windows for Workgroups, Windows 9x/Me) sein zu müssen.

Windows NT 4.0 Service Pack 3 hat die Standard-Einstellung geändert, so dass Klartext-Passwörter nicht mehr über das Netzwerk gesendet werden. Dies macht die Verwendung verschlüsselter Passwörter notwendig bzw. das Editieren der Windows NT-Registrierung, um Klartext-Passwörter wieder zu aktivieren.

Die folgenden Versionen von MS Windows unterstützen NICHT die vollständigen Domänen-Sicherheitsprotokolle, obwohl sie sich an einer Domäne anmelden können:

  • MS DOS Network Client 3.0 mit installiertem „basic network redirector
  • Windows 95 mit installiertem „network redirector update
  • Windows 98 [Second Edition]
  • Windows Me

Anmerkung

MS Windows XP Home hat keine Einrichtungen, um Domänen-Mitglied zu werden, und kann nicht an Domänen-Anmeldungen teilnehmen.

Die folgenden Versionen von MS Windows unterstützen die vollständigen Domänen-Sicherheitsprotokolle.

  • Windows NT 3.5x
  • Windows NT 4.0
  • Windows 2000 Professional
  • Windows 200x Server/Advanced Server
  • Windows XP Professional

Alle aktuellen Microsoft SMB/CIFS-Clients unterstützen die Authentifikation über den hier beschriebenen SMB-Challenge/Response-Mechanismus. Das Aktivieren der Klartext-Authentifikation deaktiviert die Fähigkeit des Clients nicht, an verschlüsselter Authentifikation teilzunehmen. Stattdessen erlaubt dies dem Client, entweder Klartext- oder verschlüsselte Passwörter zu verwenden.

MS Windows-Clients puffern nur das verschlüsselte Passwort. Wo Klartext-Passwörter durch den entsprechenden Registrierungseintrag aktiviert wurden, wird das Klartext-Passwort nie gepuffert. Das bedeutet, dass im Fall einer getrennten Netzwerk-Verbindung nur das gepufferte (verschlüsselte) Passwort an den Server gesendet wird, um einen automatischen Wiederaufbau der Verbindung zu erzielen. Wenn der Server keine verschlüsselten Passwörter unterstützt, wird dies scheitern. Die Verwendung verschlüsselter Passwörter wird dringend empfohlen.

Vorteile verschlüsselter Passwörter

  • Es werden keine Klartext-Passwörter über das Netzwerk versandt. Jemand, der einen Netzwerk-Sniffer verwendet, kann keine an den SMB-Server gesandten Passwörter abhören und aufzeichnen.

  • Es werden keine Klartext-Passwörter auf Festplatten oder im RAM abgelegt.

  • Windows NT mag es nicht, mit einem Server zu kommunizieren, der keine verschlüsselten Passwörter unterstützt. Es wird sich weigern, den Server zu durchsuchen (browsing), wenn der Server auch noch im User-Level-Sicherheitsmodus läuft. NT wird darauf bestehen, den Benutzer bei jeder Verbindung nach einem Passwort zu fragen, was sehr lästig ist. Das Einzige, was man dagegegen tun kann, ist die Verwendung der SMB-Verschlüsselung.

  • Die Unterstützung verschlüsselter Passwörter erlaubt das automatische Wiederverbinden von Freigaben (Ressourcen).

  • Verschlüsselte Passwörter sind unbedingt notwendig für den PDC/BDC-Betrieb.

Vorteile nichtverschlüsselter Passwörter

  • Es werden keine Klartext-Passwörter auf Festplatten oder im RAM abgelegt.

  • Es wird dieselbe Passwort-Datei wie für andere Unix-Dienste, z.B. FTP oder Login, verwendet.

  • Es werden andere Dienste (wie Telnet und FTP) verwendet, die Klartext-Passwörter über das Netz senden, daher ist deren Versand für SMB keine so wichtige Angelegenheit mehr.

Die Zuordnung von Benutzer-Identifiern (UIDs) zwischen MS Windows und UNIX

Jede Operation in UNIX/Linux erfordert einen Benutzer-Identifier (UID), genauso wie sie unter MS Windows NT4/200x einen Sicherheits-Identifier (SID) erfordert. Samba stellt zwei Verfahren zur Verfügung, um einen Windows-Benutzer einem UNIX/Linux-UID zuzuweisen.

Als Erstes brauchen alle Samba-SAM-Konten (Security-Account-Manager-Datenbank) eine UNIX/Linux-UID, der das jeweilige Konto zugewiesen wird. Da Benutzer der Konten-Datenbank hinzugefügt werden, ruft Samba das add user script-Interface auf, um das Konto dem Betriebssystem, unter dem Samba läuft, hinzuzufügen. Grundsätzlich brauchen alle Konten in der lokalen SAM ein lokales Benutzerkonto.

Die zweite Möglichkeit, die Zuweisung von Windows-SIDs an UNIX-UIDs zu erzielen, nutzt die Parameter idmap uid und idmap gid in smb.conf. Bitte lesen Sie die Manpage für Informationen zu diesen Parametern. Sie sind von grundlegender Bedeutung, wenn man Benutzer von einem enfernten SAM-Server mappen muss.

Das Zuweisen gemeinsamer UIDs/GIDs auf verteilten Maschinen

Samba-3 hat eine spezielle Einrichtung, die es ermöglicht, identische UIDs und GIDs auf allen Servern eines verteilten Netzwerks aufrechtzuerhalten. Ein verteiltes Netzwerk ist ein Netzwerk, in dem ein PDC, ein oder mehrere BDCs und/oder ein oder mehrere Domänen-Mitgliedsserver existieren. Warum ist dies wichtig? Es ist wichtig, wenn Dateien über mehr als nur ein Protokoll (z.B. NFS) im Netz bereitgestellt werden und wenn Benutzer Dateien mit Werkzeugen wie rsync zwischen UNIX/Linux-Systemen kopieren.

Die spezielle Einrichtung wird mit einem Parameter namens idmap backend aktiviert. Die Standard-Einstellung für diesen Parameter ist ein leerer String. Technisch ist es möglich, ein LDAP-Backend für UIDs und GIDs zu verwenden. Dies macht dann am meisten Sinn, wenn es in Netzwerk-Konfigurationen verwendet wird, die auch LDAP für das SAM-Backend verwenden. Sehen Sie sich dazu dieses Beispiel an.

Beispiel 11.1. Beispielkonfiguration mit dem LDAP-idmap-Backend

[global]
idmap backend = ldap:ldap://ldap-server.quenya.org:636
idmap backend = ldap:ldaps://ldap-server.quenya.org

Ein Netzwerk-Administrator, der ernsthaft LDAP-Backends verwenden will, wird früher oder später auf die exzellente Arbeit von PADL Software stoßen. PADL http://www.padl.com hat eine Reihe von Werkzeugen produziert und als OpenSource veröffentlicht, die von Interesse sein könnten. Diese Werkzeuge enthalten:

  • nss_ldap: Ein LDAP-Name-Service-Switch-Modul, um native Namensdienst-Unterstützung für AIX, Linux, Solaris und andere Betriebssysteme anzubieten. Dieses Werkzeug kann zum zentralen Speichern und Beziehen von UIDs/GIDs verwendet werden.

  • pam_ldap: Ein PAM-Modul, das LDAP-Integration für die UNIX/Linux-System-Authentifikation bietet.

  • idmap_ad: Ein IDMAP-Backend, das das Schema „Microsoft Services for UNIX RFC 2307“ unterstützt, das unter http://www.padl.com/download/xad_oss_plugins.tar.gz zu finden ist.

Werkzeuge zur Verwaltung von Konten

Samba enthält zwei Werkzeuge zur Verwaltung von Benutzer- und Maschinen-Konten. Diese Werkzeuge sind smbpasswd und pdbedit.

Der Befehl smbpasswd

Das Hilfsprogramm smbpasswd ähnelt den Programmen passwd oder yppasswd. Es wartet die beiden 32 Byte großen Passwort-Felder im passdb-Backend.

smbpasswd arbeitet in einem Client-Server-Modus, wo es den lokalen smbd kontaktiert, um das Passwort des Benutzers selbst zu ändern. Dies hat enorme Vorteile.

smbpasswd hat die Fähigkeit, Passwörter auf Windows NT-Servern zu ändern (dies funktioniert nur, wenn die Anfrage an den NT-PDC gesendet wird, wenn man das Passwort eines Domänen-Benutzers ändert).

smbpasswd kann für Folgendes verwendet werden:

  • Hinzufügen von Benutzer- oder Maschinen-Konten
  • Löschen von Benutzer- oder Maschinen-Konten
  • Aktivieren von Benutzer- oder Maschinen-Konten
  • Deaktivieren von Benutzer- oder Maschinen-Konten
  • Auf-NULL-Setzen von Benutzer-Passwörtern
  • Verwalten von Domänen-Vertrauenskonten

Um smbpasswd als normaler Benutzer auszuführen, tippen Sie einfach:

$ smbpasswd
Old SMB password: secret

Anstatt secret, geben Sie hier den alten Wert an oder drücken einfach Enter, falls es kein altes Passwort gibt.

New SMB Password: new secret
Repeat New SMB Password: new secret

Wenn der alte Wert nicht mit dem aktuell für den Benutzer gespeicherten Wert übereinstimmt oder die beiden neuen Werte nicht zusammenpassen, wird das Passwort nicht geändert.

Von einem normalen Benutzer aufgerufen, erlaubt der Befehl dem Benutzer nur, das eigene Passwort zu ändern.

Wird der Befehl von root ausgeführt, akzeptiert smbpasswd ein optionales Argument, das den Benutzer angibt, dessen Passwort Sie verändern wollen. Mit root-Rechten ausgeführt, fragt smbpasswd nicht nach dem alten Passwort (bzw. prüft es auch nicht) und erlaubt daher dem Benutzer root, Passwörter für Benutzer zu setzen, die ihr Passwort vergessen haben.

smbpasswd wurde so entworfen, dass seine Arbeitsweise derjenigen ähnelt, die Benutzern der Befehle passwd oder yppasswd vertraut ist. Obwohl es für die administrative Anwendung entworfen worden ist, bietet dieses Werkzeug die wichtige Fähigkeit, auf Benutzer-Ebene Passwörter zu ändern.

Lesen Sie die Manpage (die definitive Referenz) für mehr Details zur Verwendung von smbpasswd.

Der Befehl pdbedit

pdbedit ist ein Werkzeug, das nur von root verwendet werden kann. Es wird zur Verwaltung des passdb-Backends verwendet. pdbedit kann für Folgendes verwendet werden:

  • Hinzufügen, Löschen oder Ändern von Benutzerkonten
  • Auflisten von Benutzerkonten
  • Migrieren von Benutzerkonten

Das Werkzeug pdbedit ist das einzige Werkzeug, das die Sicherheits- und Richtlinien-Einstellungen der Konten verwalten kann. Es kann sowohl alle Operationen durchführen, die smbpasswd beherrscht, als auch ein Super-Set davon.

Ein besonders wichtiger Zweck von pdbedit ist es, die Migration von Konten-Informationen von einem passdb-Backend in ein anderes zu erlauben. Lesen Sie dazu auch den Abschnitt zum XML-Backend in diesem Kapitel.

Das Folgende ist ein Beispiel für die Benutzer-Konten-Information, die in einem tdbsam-passdb-Backend gespeichert ist. Diese Liste wurde so erzeugt:

$ pdbedit -Lv met
UNIX username:        met
NT username:
Account Flags:        [UX         ]
User SID:             S-1-5-21-1449123459-1407424037-3116680435-2004
Primary Group SID:    S-1-5-21-1449123459-1407424037-3116680435-1201
Full Name:            Melissa E Terpstra
Home Directory:       \\frodo\met\Win9Profile
HomeDir Drive:        H:
Logon Script:         scripts\logon.bat
Profile Path:         \\frodo\Profiles\met
Domain:               MITTELERDE
Account desc:
Workstations:         melbelle
Munged dial:
Logon time:           0
Logoff time:          Mon, 18 Jan 2038 20:14:07 GMT
Kickoff time:         Mon, 18 Jan 2038 20:14:07 GMT
Password last set:    Sat, 14 Dec 2002 14:37:03 GMT
Password can change:  Sat, 14 Dec 2002 14:37:03 GMT
Password must change: Mon, 18 Jan 2038 20:14:07 GMT

pdbedit erlaubt die Migration von Authentifikationsdatenbanken (entspricht Konten-Datenbanken) von einem Backend in ein anderes. Um zum Beispiel Konten von einem alten smbpasswd-Backend in ein tdbsam-Backend zu migrieren, tun Sie Folgendes:

  1. Setzen Sie den Parameter passdb backend = tdbsam, smbpasswd.

  2. Führen Sie dies aus:

    root# pdbedit -i smbpasswd -e tdbsam
    

  3. Jetzt entfernen Sie den Wert smbpasswd aus dem Parameter passdb backend in smb.conf.

Passwort-Backends

Von allen heute verfügbaren SMB/CIFS-Server-Technologien bietet Samba die größte Flexibilität im Design der Konten-Datenbank-Backends. Die Flexibilität wird unmittelbar sichtbar, sobald man beginnt, diese Fähigkeiten zu erforschen.

Es ist nicht nur möglich, mehrere verschiedene Passwort-Backends zu spezifizieren, sondern auch mehrere Backends desselben Typs. Ein Beispiel für die Verwendung zwei verschiedener tdbsam-Datenbanken sähe so aus:

passdb backend = tdbsam:/etc/samba/passdb.tdb \
tdbsam:/etc/samba/old-passdb.tdb

Klartext

Ältere Samba-Versionen bezogen die Benutzer-Informationen aus der UNIX-Benutzer-Datenbank und eventuell ein paar weiteren Feldern aus der Datei /etc/samba/smbpasswd oder /etc/smbpasswd. Wenn die Passwort-Verschlüsselung deaktiviert ist, werden überhaupt keine SMB-spezifischen Daten gespeichert. Stattdessen werden alle Operationen auf die Art durchgeführt, in der das Wirtsbetriebssystem auf seine Datenbank /etc/passwd zugreift. Auf Linux-Systemen geschieht dies beispielsweise via PAM.

smbpasswd Datenbank für verschlüsselte Passwörter

Traditionellerweise wurden Benutzer-Konten-Informationen wie Benutzername, LM/NT-Passwort-Hashes, Passwort-Änderungszeiten und Konten-Flags in der Datei smbpasswd(5) gespeichert. Es gibt einige Nachteile bei diesem Ansatz, besonders für Installationen mit einer großen Anzahl von Benutzern (wir sprechen hier von Tausenden...).

  • Das erste Problem ist, dass alle Suchen („Lookups“) sequenziell ausgeführt werden müssen. Dadurch, dass durchschnittlich zwei Lookups pro Domänen-Anmeldung ausgeführt werden (einer für die normale Verbindung wie beim Verbinden eines Netzwerk-Laufwerks oder -Druckers) ist dies performance-mäßig ein Flaschenhals für große Installationen. Was hier gebraucht wird, ist ein Ansatz mit Indizes, wie er in Datenbanken verwendet wird.

  • Das zweite Problem ist, dass Administratoren, die eine smbpasswd-Datei auf mehr als einen Samba-Server replizieren wollen, externe Werkzeuge wie rsync(1) und ssh(1) verwenden mussten, und eigene, haus-interne Skripts geschrieben haben.

  • Zuletzt lässt die Menge an Informationen, die in einem smbpasswd-Eintrag gespeichert wird, keinen Platz für weitere Attribute, wie z.B. ein Home-Verzeichnis, das Ablaufdatum des Passworts oder auch nur für einen Relative Identifier (RID).

Als Schlussfolgerung aus diesen Mängeln wurde ein robusteres Hilfsmittel entwickelt, mit dem smbd Benutzer-Attribute speichern kann. Die API, die den Zugriff auf Benutzer-Konten definiert, wird üblicherweise als das samdb-Interface bezeichnet (davor wurde sie als die passdb-API bezeichnet, und im Samba-CVS-Tree wird sie das immer noch).

Samba bietet eine erweiterte Auswahl an passdb-Backends, die die Mängel der smbpasswd-Klartext-Datenbank beseitigen. Diese sind tdbsam, ldapsam und xmlsam. Aus diesen dreien wird ldapsam dasjenige sein, das für große Firmen- oder Unternehmensinstallationen von größtem Interesse ist.

tdbsam

Samba kann Daten von Benutzer- und Maschinen-Konten in einer „TDB“ (Trivial Database) abspeichern. Die Verwendung dieses Backends erfordert keine weitere Konfiguration. Dieses Backend wird für neue Installationen empfohlen, die kein LDAP benötigen.

Als generelle Richtlinie empfiehlt das Samba-Team, das tbd-Backend nicht in Installationen einzusetzen, die 250 oder mehr Benutzer haben. Außerdem unterstützt tdbsam kein Replikationsprotokoll für Samba-PDC- und -BDC-Installationen. In solchen Fällen ist die Verwendung von ldapsam ratsam.

Die Empfehlung eines Limits von 250 Benutzern basiert einfach darauf, dass dies üblicherweise eine Installation mit gerouteten Netzwerken ist, die sich eventuell auch über mehrere physische Standorte erstreckt. Das Samba-Team hat bis dato noch nicht die Skalierbarkeitslimits der tdbsam-Architektur in Bezug auf Performance festgelegt.

ldapsam

Es gibt ein paar Punkte zu erwähnen, die ldapsam nicht anbietet. Die LDAP-Unterstützung, auf die sich diese Dokumentation bezieht, enthält nicht:

  • Eine Einrichtung, um Benutzer-Konten-Informationen von einem Windows 200x Active Directory Server zu beziehen

  • Eine Einrichtung, um /etc/passwd zu ersetzen

Der zweite Punkt kann durch die Verwendung von LDAP-NSS- und PAM-Modulen abgedeckt werden. GPL-Versionen dieser Bibliotheken können von PADL Software bezogen werden. Mehr Informationen zur Konfiguration dieser Pakete finden Sie in dem Buch LDAP, System Administration; von Gerald Carter, das im O'Reilly Verlag erschienen ist. Lesen Sie dort Kapitel 6: Replacing NIS.

Dieses Dokument beschreibt, wie man ein LDAP-Verzeichnis dazu verwendet, Samba-Benutzerkonten-Informationen abzuspeichern, die traditionell in der Datei smbpasswd(5) abgelegt wurden. Es wird angenommen, dass Sie die LDAP-Konzepte vom Grundsatz her verstehen und bereits einen funktionierenden Verzeichnis-Server installiert haben. Für mehr Informationen zu LDAP-Architektur und -Verzeichnissen besuchen Sie bitte folgende Seiten:

Zwei weitere Samba-Ressourcen, die vielleicht hilfreich sein können, sind:

  • Das Samba-PDC-LDAP-HOWTO, verwaltet von Ignacio Coupeau

  • Die NT-Migrations-Skripten von IDEALX, die dafür ausgelegt sind, Benutzer und Gruppen in einer solchen Samba-LDAP-Domänencontroller-Konfiguration zu verwalten.

Unterstützte LDAP-Server

Der LDAP ldapsam-Code wurde unter Verwendung der OpenLDAP 2.0 und 2.1 Server- und Client-Libraries entwickelt und getestet. Derselbe Code sollte mit Netscapes Directory Server und Client SDK arbeiten. Jedoch gibt es Compile-Fehler und Bugs. Diese sollten nicht schwierig zu beheben sein. Bitte senden Sie uns Fixes mit dem in Reporting Bugs beschriebenen Vorgehen.

Schema und Verhältnis zum RFC 2307-posixAccount

Samba-3.0 enthält die notwendige Schema-Datei für OpenLDAP 2.0 in examples/LDAP/samba.schema. Die sambaSamAccount-Objekt-Klasse sehen Sie hier:

objectclass (1.3.6.1.4.1.7165.2.2.6 NAME 'sambaSamAccount' SUP top AUXILIARY
    DESC 'Samba-3.0 Auxiliary SAM Account'
    MUST ( uid $ sambaSID )
    MAY  ( cn $ sambaLMPassword $ sambaNTPassword $ sambaPwdLastSet $
          sambaLogonTime $ sambaLogoffTime $ sambaKickoffTime $
          sambaPwdCanChange $ sambaPwdMustChange $ sambaAcctFlags $
          displayName $ sambaHomePath $ sambaHomeDrive $ sambaLogonScript $
          sambaProfilePath $ description $ sambaUserWorkstations $
          sambaPrimaryGroupSID $ sambaDomainName ))

Die Datei samba.schema wurde für OpenLDAP 2.0/2.1 formatiert. Das Samba-Team besitzt den OID-Space, der vom obigen Schema benutzt wird, und empfiehlt dessen Verwendung. Wenn Sie das Schema für die Verwendung mit Netscape-DS übersetzen, senden Sie die modifzierte Schema-Datei bitte als Patch an jerry@samba.org.

Genauso wie die Datei smbpasswd zum Speichern von Informationen gedacht ist, die über die in der Datei /etc/passwd gespeicherten Informationen hinausgehen, ist das Objekt sambaSamAccount zur Ergänzung der UNIX-Benutzerkonten-Information gedacht. Ein sambaSamAccount ist eine AUXILIARY-Objektklasse, so dass sie zur Erweiterung existierender Benutzer-Konten-Information im LDAP-Verzeichnis verwendet werden kann. Es gibt jedoch einige Felder (z.B. uid), die mit der posixAccount-Objektklasse überlappen, die in RFC2307 beschrieben wird. Dies ist vom Design her so vorgesehen.

Um die gesamte Benutzer-Konten-Information (UNIX und Samba) in dem Verzeichnis speichern zu können, ist es notwendig, die beiden Objektklassen sambaSamAccount und posixAccount in Kombination zu verwenden. Jedoch wird smbd die Benutzer-Konten-Information nach wie vor über die Standard-C-Bibliotheksaufrufe beziehen (z.B. getpwnam() und andere). Das bedeutet, dass der Samba-Server auch die LDAP-NSS-Bibliothek installiert haben muss und diese korrekt funktionieren muss. Diese Trennung von Informationen macht es möglich, alle Samba-Informationen in LDAP zu speichern, aber weiterhin die UNIX-Konten-Informationen in NIS zu verwalten, während das Netzwerk in eine vollständige LDAP-Infrastruktur überführt wird.

OpenLDAP-Konfiguration

Um Unterstützung für das Objekt sambaSamAccount in einem OpenLDAP-Verzeichnis zu einzubinden, kopieren Sie als Erstes die Datei samba.schema in das Konfigurationsverzeichnis von slapd. Die Datei samba.schema kann im Verzeichnis examples/LDAP in der Samba-Quelldistribution gefunden werden.

root# cp samba.schema /etc/openldap/schema/

Als Nächstes binden Sie die Datei samba.schema in slapd.conf ein. Das Objekt sambaSamAccount enthält zwei Attribute, die auf anderen Schema-Dateien basieren. Das Attribut uid wird in cosine.schema definiert und das Attribut displayName in der Datei inetorgperson.schema. Beide müssen vor der Datei samba.schema eingebunden werden.

## /etc/openldap/slapd.conf

## schema files (core.schema is required by default)
include	           /etc/openldap/schema/core.schema

## needed for sambaSamAccount
include            /etc/openldap/schema/cosine.schema
include            /etc/openldap/schema/inetorgperson.schema
include            /etc/openldap/schema/nis.schema
include            /etc/openldap/schema/samba.schema
....

Es wird empfohlen, dass Sie einige Indizes von den wichtigsten Attributen pflegen, um Suchen nach sambaSamAccount-Objektklassen zu beschleunigen (und eventuell auch posixAccount und posixGroup). Zum Beispiel:

## Zu pflegende Indizes 
## von LDAP benötigt
index objectclass             eq

index cn                      pres,sub,eq
index sn                      pres,sub,eq
## zur Unterstützung von pdb_getsampwnam
index uid                     pres,sub,eq
## zur Unterstützung von pdb_getsambapwrid()
index displayName             pres,sub,eq

## entfernen Sie hier die Kommentarzeichen, 
## wenn Sie auch posixAccount- und
## posixGroup-Einträge im Verzeichnis verwalten
##index uidNumber               eq
##index gidNumber               eq
##index memberUid               eq

index   sambaSID              eq
index   sambaPrimaryGroupSID  eq
index   sambaDomainName       eq
index   default               sub

Legen Sie den neuen Index an, indem Sie dies ausführen:

root# ./sbin/slapindex -f slapd.conf

Vergessen Sie nicht, slapd nach diesen Änderungen neu zu starten:

root# /etc/init.d/slapd restart

Das Initialisieren der LDAP-Datenbank

Bevor Sie Konten der LDAP-Datenbank hinzufügen können, müssen Sie die Konten-Container anlegen, in denen diese gespeichert werden sollen. Die folgende LDIF-Datei sollte so editiert werden, dass sie Ihrem Bedarf entspricht (DNS-Einträge usw.):

# Organisation fuer Samba-Basis
dn: dc=quenya,dc=org
objectclass: dcObject
objectclass: organization
dc: quenya
o: Quenya Org Netzwerk
description: Das Samba-3 Netzwerk LDAP Beispiel 

# Organisatorische Rolle fuer Verzeichnisverwaltung
dn: cn=Manager,dc=quenya,dc=org
objectclass: organizationalRole
cn: Manager
description: Verzeichnis Manager

# Einrichten des Benutzer-Containers
dn: ou=People,dc=quenya,dc=org
objectclass: top
objectclass: organizationalUnit
ou: People

# Einrichten des Administrators fuer die People-OU
dn: cn=admin,ou=People,dc=quenya,dc=org
cn: admin
objectclass: top
objectclass: organizationalRole
objectclass: simpleSecurityObject
userPassword: {SSHA}c3ZM9tBaBo9autm1dL3waDS21+JSfQVz

# Einrichten des Gruppen-Containers
dn: ou=Groups,dc=quenya,dc=org
objectclass: top
objectclass: organizationalUnit
ou: Groups

# Einrichten des Administrators fuer die Gruppen-OU
dn: cn=admin,ou=Groups,dc=quenya,dc=org
cn: admin
objectclass: top
objectclass: organizationalRole
objectclass: simpleSecurityObject
userPassword: {SSHA}c3ZM9tBaBo9autm1dL3waDS21+JSfQVz

# Einrichten des Computer-Containers
dn: ou=Computers,dc=quenya,dc=org
objectclass: top
objectclass: organizationalUnit
ou: Computers

# Einrichten des Administrators fuer die Computer-OU
dn: cn=admin,ou=Computers,dc=quenya,dc=org
cn: admin
objectclass: top
objectclass: organizationalRole
objectclass: simpleSecurityObject
userPassword: {SSHA}c3ZM9tBaBo9autm1dL3waDS21+JSfQVz

Das oben gezeigte userPassword sollte mittels slappasswd generiert werden.

Der folgende Befehl lädt dann den Inhalt der LDIF-Datei in die LDAP-Datenbank:

$ slapadd -v -l initldap.dif

Vergessen Sie nicht, Ihren LDAP-Server sowohl mit einer adäquaten ACL zu versehen als auch mit einem Administrator-Passwort.

Anmerkung

Bevor Samba auf den LDAP-Server zugreifen kann, müssen Sie das LDAP-Administrator-Passwort in die Samba-3-Datenbank secrets.tdb speichern:

root# smbpasswd -w secret

Die Konfiguration von Samba

Folgende Parameter sind nur dann in smb.conf verfügbar, wenn Ihre Version von Samba mit LDAP-Unterstützung kompiliert worden ist. Samba wird automatisch so konfiguriert, wenn die LDAP-Bibliotheken vorgefunden werden.

LDAP-bezogene smb.conf-Optionen sind: passdb backend = ldapsam:url, ldap admin dn, ldap delete dn, ldap filter, ldap group suffix, ldap idmap suffix, ldap machine suffix, ldap passwd sync, ldap ssl, ldap suffix und ldap user suffix.

Diese Parameter werden in der Manpage zu smb.conf beschrieben, dies wird hier nicht wiederholt. Wir zeigen jedoch eine Beispieldatei smb.conf für die Verwendung mit einem LDAP-Verzeichnis.

Beispiel 11.2. Konfiguration mit LDAP

[global]
security = user
encrypt passwords = yes
netbios name = MORIA
workgroup = NOLDOR
# ldap-bezogene Parameter
# Definieren der DN, mit der die Verbindung zu den Verzeichnis-Servern hergestellt wird
# Das Passwort für diese DN wird nicht in smb.conf gespeichert. Es muss mit
# 'smbpasswd -w secretpw'
# in der Datei secrets.tdb gespeichert werden. Wenn sich der Wert „ldap admin dn“ ändert,
# muss dieses Passwort zurückgesetzt werden.
ldap admin dn = "cn=Manager,dc=quenya,dc=org"
# Definieren der SSL-Option beim Verbinden zum Verzeichnis
# ('off', 'start tls', oder 'on' (default))
ldap ssl = start tls
# syntax: passdb backend = ldapsam:ldap://server-name[:port]
passdb backend = ldapsam:ldap://frodo.quenya.org
# smbpasswd -x löscht den ganzen dn-Eintrag
ldap delete dn = no
# Maschinen- und Benutzer-Suffix, die an das Basis-Suffix angehängt werden.
# Schreibweise OHNE Anführungszeichen. NULL-Suffixe als Standard
ldap user suffix = ou=People
ldap group suffix = ou=Groups
ldap machine suffix = ou=Computers
# UNIX-Vertrauenskonten-Informationen in LDAP
# (lesen Sie die smb.conf-Manpage fuer mehr Details)
# Angabe der Base-DN, die beim Durchsuchen des Verzeichnisses verwendet wird
ldap suffix = dc=quenya,dc=org
# Im Allgemeinen ist der Standard-LDAP-Suchfilter OK
ldap filter = (&(uid=%u)(objectclass=sambaSamAccount))

Das Management von Benutzern und Gruppen

Da Benutzerkonten mit der sambaSamAccount-Objektklasse verwaltet werden, sollten Sie Ihre bereits existierenden Administrationswerkzeuge so modifizieren, dass sie mit sambaSamAccount-Attributen umgehen können.

Maschinenkonten werden mit der sambaSamAccount-Objektklasse verwaltet, genauso wie Benutzerkonten. Es ist jedoch Ihnen überlassen, diese Konten in einem anderen Zweig Ihres LDAP-Namensraums zu speichern. Sie sollten „ou=Groups,dc=quenya,dc=org“ zum Speichern von Gruppen und „ou=People,dc=quenya,dc=org“ zum Speichern von Benutzern verwenden. Konfigurieren Sie nur Ihr NSS und PAM dementsprechend (üblicherweise in der Datei /etc/openldap/sldap.conf).

In Samba-3 basiert die Gruppenverwaltung auf den POSIX-Gruppen. Das bedeutet, dass Samba die posixGroup-Objektklasse verwendet. Derzeit gibt es keine NT-artige Gruppenverwaltung (globale und lokale Gruppen). Samba-3 kennt nur Domänen-Gruppen, und unterstützt, im Unterschied zu MS Windows 2000 und Active Directory, keine verschachtelten Gruppen.

Sicherheit und sambaSamAccount

Es gibt zwei wichtige Punkte, an die man sich erinnern sollte, wenn man die Sicherheit von sambaSamAccount-Einträgen im Verzeichnis diskutiert:

  • Beziehen Sie niemals den Wert von lmPassword- oder ntPassword-Attributen über eine unverschlüsselte LDAP-Sitzung.

  • Erlauben Sie niemals Nicht-Administrator-Benutzern, die Attributwerte von lmPassword oder ntPassword zu sehen.

Diese Passwort-Hashes sind Klartext-Äquivalente und können dazu verwendet werden, den Benutzer zu verkörpern, ohne die originalen Klartext-Strings zu beziehen. Lesen Sie den Abschnitt Die Account-Datenbank, um mehr Informationen und Details zu LM/NT Passwort-Hashes zu erhalten.

Um die erste Angelegenheit zu bereinigen, ist der voreingestellte Wert für den smb.conf-Parameter ldap ssl so, dass eine verschlüsselte Sitzung erforderlich ist (ldap ssl = on), die den Standard-Port 636 verwendet, wenn man den Verzeichnis-Server kontaktiert. Bei Verwendung eines OpenLDAP-Servers ist es möglich, die erweiterte LDAP-Operation StartTLS anstelle von LDAPS zu verwenden. Seien Sie auf jeden Fall davor gewarnt, diese Sicherheitsoption auszuschalten (ldap ssl = off).

Beachten Sie, dass das LDAPS-Protokoll veraltet ist, es wurde durch die erweiterte LDAPv3-Operation StartTLS ersetzt. Die OpenLDAP-Bibliothek bietet jedoch nach wie vor Unterstützung für die ältere Methode zur Absicherung der Client-Server-Kommunikation.

Die zweite Sicherheitsmaßnahme besteht darin, Benutzer ohne Administrator-Rechte davon abzuhalten, Passwort-Hashes aus dem Verzeichnis abzufragen. Dies kann durch folgende ACL in slapd.conf erfolgen:

## erlaube der "ldap admin dn" Zugriff, aber lehne alle anderen Zugriffe ab
access to attrs=sambaLMPassword,sambaNTPassword
     by dn="cn=Samba Admin,ou=People,dc=quenya,dc=org" write
     by * none

Spezielle LDAP-Attribute für sambaSamAccounts

Die Objektklasse sambaSamAccount besteht aus den Komponenten, die in den folgenden Tabellen gezeigt werden: Teil A und Teil B.

Tabelle 11.1. Attribute in der sambaSamAccount-Objektklasse (LDAP) Teil A

sambaLMPasswordDer LANMAN-Passwort-16-Byte-Hash, gespeichert als char-Darstellung eines Hexadezimal-Strings
sambaNTPasswordDer NT-Passwort-16-Byte-Hash, gespeichert als char-Darstellung eines Hexadezimal-Strings
sambaPwdLastSetDie integer-Zeit (angegeben in Sekunden seit 1970), die vergangen ist, seitdem die Attribute sambaLMPassword und sambaNTPassword zuletzt gesetzt wurden.
sambaAcctFlagsString mit 11 Zeichen Länge, eingeschlossen von eckigen Klammern []. Er stellt Konto-Flags dar, wie U (user), W (workstation), X (kein Ablauf von Passwörtern), I (Domänen-Vertrauenskonto), H (Heimatverzeichnis erforderlich), S (Server-Vertrauenskonto) und D (disabled).
sambaLogonTimeInteger-Wert, derzeit unbenutzt
sambaLogoffTimeInteger-Wert, derzeit unbenutzt
sambaKickoffTimeAngabe der Zeit (UNIX-Zeitformat), nach der der Benutzer gesperrt wird und sich nicht mehr anmelden kann. Wenn dieses Attribut nicht angegeben wird, läuft das Konto nie ab. Wenn Sie dieses Attribut gemeinsam mit dem Attribut 'shadowExpire' der Objektklasse 'shadowAccount' verwenden, wird dies ermöglichen, Konten zu einem definierten Zeitpunkt komplett ablaufen zu lassen.
sambaPwdCanChangeAngabe der Zeit (UNIX-Zeitformat), nach der dem Benutzer erlaubt wird, sein Passwort zu ändern. Wenn dieses Attribut nicht angegeben wird, steht es dem Benutzer frei, sein Passwort zu ändern, wann immer er möchte.
sambaPwdMustChangeAngabe der Zeit (UNIX-Zeitformat), ab der der Benutzer gezwungen wird, sein Passwort zu ändern. Wenn dieses Attribut auf '0' gesetzt wird, muss der Benutzer sein Passwort bei der ersten Anmeldung ändern. Wenn dieses Attribut nicht gesetzt wird, läuft das Passwort nie ab.
sambaHomeDriveAngabe des Laufwerksbuchstabens, der auf den UNC-Pfad zeigt, der in sambaHomePath angegeben wurde. Der Laufwerksbuchstabe muss in der Form „X:“ angegeben werden, wobei X der Buchstabe des zugewiesenen Laufwerks ist. Sehen Sie sich den Abschnitt zum Parameter logon drive in der Manpage zu smb.conf für mehr Informationen dazu an.
sambaLogonScriptDer Wert von sambaLogonScript gibt den Pfad des Anmeldeskripts des Benutzers an, in einer .CMD-, .EXE- oder .BAT-Datei. Dieser String kann auch null sein. Der Pfad ist relativ zur netlogon-Freigabe. Sehen Sie sich den Abschnitt zum Parameter logon script in der Manpage zu smb.conf an, um mehr Details dazu zu erfahren.
sambaProfilePathAngabe des Pfads zum Profil des Benutzers. Dieser Wert kann auch ein Leerstring sein, ein lokaler absoluter Pfad oder ein UNC-Pfad. Sehen Sie sich den Abschnitt zum Parameter logon path in der Manpage zu smb.conf an, um mehr Details dazu zu erfahren.
sambaHomePathDer Wert von sambaHomePath gibt den Pfad des Heimatverzeichnisses des Benutzers an. Dieser Wert kann auch ein Leerstring sein. Wenn sambaHomeDrive gesetzt ist und einen Laufwerksbuchstaben angibt, sollte sambaHomePath ein UNC-Pfad sein. Der Pfad muss ein Netzwerk-UNC-Pfad in der Form \\server\freigabe\verzeichnis sein. Sehen Sie sich den Abschnitt zum Parameter logon home in der Manpage zu smb.conf an, um mehr Details dazu zu erfahren.

Tabelle 11.2. Attribute in der sambaSamAccount-Objektklasse (LDAP) Teil B

sambaUserWorkstationsHier können Sie eine komma-getrennte Liste von Maschinen angeben, an denen sich der Benutzer anmelden darf. Es könnten Probleme auftreten, wenn Sie sich an einem Samba-Domänen-Mitglied anzumelden versuchen. Weil Domänen-Mitglieder nicht in dieser Liste sind, werden die Domänencontroller sie zurückweisen. Wo dieses Attribut weggelassen wird, setzt die Standard-Einstellung keinerlei Einschränkungen.
sambaSIDDer Security Identifier (SID) des Benutzers. Die Windows-Entsprechung zu UNIX-UIDs.
sambaPrimaryGroupSIDDer Security Identifier (SID) der primären Gruppe des Benutzers.
sambaDomainNameDie Domäne, der der Benutzer angehört.

Der Großteil dieser Parameter wird nur benötigt, wenn Samba als PDC einer Domäne arbeitet (sehen Sie dazu Domänen-Verwaltung). Die folgenden vier Attribute werden nur mit dem sambaSamAccount-Eintrag verspeichert, wenn ihre Werte nicht gleich den Standard-Werten sind:

  • sambaHomePath
  • sambaLogonScript
  • sambaProfilePath
  • sambaHomeDrive

Nehmen wir zum Beispiel an, dass MORIA als PDC konfiguriert wurde und dass logon home = \\%L\%u in dessen Datei smb.conf definiert wurde. Wenn ein Benutzer namens „becky“ sich an der Domäne anmeldet, wird der String logon home auf \\MORIA\becky erweitert. Wenn das Attribut smbHome im Eintrag „uid=becky,ou=People,dc=samba,dc=org“ existiert, wird dessen Wert verwendet. Existiert dieses Attribut nicht, wird stattdessen der Wert des Parameters logon home verwendet. Samba schreibt den Attributwert nur dann in den Verzeichniseintrag, wenn der Wert vom Standardwert abweicht (z.B. \\MOBY\becky).

Beispiel für LDIF-Einträge eines sambaSamAccount

Das folgende Beispiel ist ein funktionierendes LDIF, das die Verwendung der SambaSamAccount-Objektklasse zeigt:

	dn: uid=guest2, ou=People,dc=quenya,dc=org
	sambaLMPassword: 878D8014606CDA29677A44EFA1353FC7
	sambaPwdMustChange: 2147483647
	sambaPrimaryGroupSID: S-1-5-21-2447931902-1787058256-3961074038-513
	sambaNTPassword: 552902031BEDE9EFAAD3B435B51404EE
	sambaPwdLastSet: 1010179124
	sambaLogonTime: 0
	objectClass: sambaSamAccount
	uid: guest2
	sambaKickoffTime: 2147483647
	sambaAcctFlags: [UX         ]
	sambaLogoffTime: 2147483647
	sambaSID: S-1-5-21-2447931902-1787058256-3961074038-5006
	sambaPwdCanChange: 0
	

Hier sehen Sie einen LDIF-Eintrag zur gemeinsamen Verwendung der Objektklassen sambaSamAccount und posixAccount:

	dn: uid=gcarter, ou=People,dc=quenya,dc=org
	sambaLogonTime: 0
	displayName: Gerald Carter
	sambaLMPassword: 552902031BEDE9EFAAD3B435B51404EE
	sambaPrimaryGroupSID: S-1-5-21-2447931902-1787058256-3961074038-1201
	objectClass: posixAccount
	objectClass: sambaSamAccount
	sambaAcctFlags: [UX         ]
	userPassword: {crypt}BpM2ej8Rkzogo
	uid: gcarter
	uidNumber: 9000
	cn: Gerald Carter
	loginShell: /bin/bash
	logoffTime: 2147483647
	gidNumber: 100
	sambaKickoffTime: 2147483647
	sambaPwdLastSet: 1010179230
	sambaSID: S-1-5-21-2447931902-1787058256-3961074038-5004
	homeDirectory: /home/moria/gcarter
	sambaPwdCanChange: 0
	sambaPwdMustChange: 2147483647
	sambaNTPassword: 878D8014606CDA29677A44EFA1353FC7

Die Synchronisation von Passwörtern

Samba-3 und spätere Versionen können das Nicht-Samba-(LDAP-)Passwort ändern, das für ein Konto gespeichert wurde. Bei der Verwendung von pam_ldap erlaubt dies das gleichzeitige Ändern von UNIX- und Windows-Passwörtern.

Die Option ldap passwd sync kann die in der nächsten Tabelle gezeigten Werte annehmen.

Tabelle 11.3. Mögliche Werte für ldap passwd sync

WertBeschreibung
yes

Wenn der Benutzer sein Passwort ändert, werden die Felder ntPassword, lmPassword und password aktualisiert.

no

Nur ntPassword und lmPassword werden aktualisiert.

only

Aktualisiere nur das LDAP-Passwort, und überlasse die anderen Felder dem LDAP-Server. Diese Option ist nur mit manchen LDAP-Servern verfügbar, und zwar nur dann, wenn der LDAP-Server LDAP_EXOP_X_MODIFY_PASSWD unterstützt.

Mehr Informationen dazu finden Sie in der Manpage zu smb.conf.

MySQL

Immer wieder kommt jemand mit einer großartigen neuen Idee daher. Das Speichern von Benutzerkonten in einem SQL-Backend ist eine solche. Jene, die dies tun wollen, werden wohl am besten beurteilen können, welche spezifischen Vorteile dies für sie hat. Dies klingt wohl nach Rückzug, aber tatsächlich können wir hier nicht versuchen, jedes kleine Detail zu dokumentieren und zu zeigen, warum bestimmte Dinge, die von marginalem Nutzen für das Gros der Samba-Benutzer sind, für den Rest sehr wohl Sinn machen können. In jedem Fall sollten die folgenden Anweisungen dem willigen SQL-Anwender dabei helfen, ein funktionierendes System zu implementieren.

Das Anlegen der Datenbank

Sie können Ihre eigene Tabelle anlegen und deren Feldnamen für pdb_mysql angeben (sehen Sie weiter unten nach den Spaltennamen) oder die Standard-Tabelle verwenden. Die Datei examples/pdb/mysql/mysql.dump enthält die korrekten Abfragen, um die erforderlichen Tabellen anzulegen. Verwenden Sie den Befehl:

$ mysql -uusername -hhostname -ppassword \
	databasename < /path/to/samba/examples/pdb/mysql/mysql.dump

Konfigurieren

Diesem Plugin fehlt eine gute Dokumentation, aber hier ist etwas Kurz-Information. Fügen Sie Folgendes der Variable passdb backend in Ihrer smb.conf hinzu:

passdb backend = [andere-plugins] mysql:identifier [andere-plugins]

Der Identifier kann jeder beliebige String sein, solange er nicht mit den Identifiern anderer Plugins oder denen anderer pdb_mysql-Instanzen kollidiert. Wenn Sie mehrere pdb_mysql.so Einträge in passdb backend angeben, müssen Sie auch verschiedene Identifier angeben.

Zusätzliche Optionen können im Abschnitt [global] der Datei smb.conf angegeben werden. Sehen Sie sich die folgende Tabelle an.

Tabelle 11.4. Grundlegende smb.conf-Optionen für das MySQL-passdb-Backend

FeldInhalt
mysql hostHostname, Standardwert 'localhost'
mysql password 
mysql userStandardwert 'samba'
mysql databaseStandardwert 'samba'
mysql portStandardwert 3306
tableTabelle, die die Benutzer enthält

Warnung

Da das Passwort des MySQL-Benutzers in der Datei smb.conf abgelegt wird, sollten Sie diese Datei nur für den Benutzer lesbar machen, der Samba ausführt. Dies wird als Sicherheitslücke betrachtet und wird bald bereinigt werden.

Die Spaltenbezeichnungen werden in der nächsten Tabelle angegeben. Die Standard-Spaltenbezeichnungen können dem Beispieltabellen-Dump entnommen werden.

Tabelle 11.5. MySQL-Feldnamen für das MySQL-passdb-Backend

FeldTypInhalt
logon time columnint(9)UNIX-Zeitstempel der letzten Anmeldung des Benutzers
logoff time columnint(9)UNIX-Zeitstempel der letzten Abmeldung des Benutzers
kickoff time columnint(9)UNIX-Zeitstempel des Zeitpunkts, zu dem der Benutzer von der Workstation „hinausgeworfen“ werden soll (nicht erzwungen)
pass last set time columnint(9)UNIX-Zeitstempel des Zeitpunkts, zu dem das Passwort zuletzt gesetzt wurde
pass can change time columnint(9)UNIX-Zeitstempel des Zeitpunkts, ab dem das Passwort geändert werden kann
pass must change time columnint(9)UNIX-Zeitstempel des Zeitpunkts, ab dem das Passwort geändert werden muss
username columnvarchar(255)UNIX-Benutzername
domain columnvarchar(255)NT-Domäne, der der Benutzer angehört
nt username columnvarchar(255)NT-Benutzername
fullname columnvarchar(255)Vollständiger Name des Benutzers
home dir columnvarchar(255)Pfad des UNIX-Heimatverzeichnisses (äquivalent zum Parameter logon home).
dir drive columnvarchar(2)Laufwerksbuchstabe des Verzeichnisses (z.B. „H:“)
logon script columnvarchar(255)Batch-Datei, die bei der Anmeldung ausgeführt werden soll
profile path columnvarchar(255)Pfad zum Profil
acct desc columnvarchar(255)Einige ASCII-NT-Benutzerdaten
workstations columnvarchar(255)Workstations, an denen sich der Benutzer anmelden darf (oder NULL für alle)
unknown string columnvarchar(255)Unbekannter String
munged dial columnvarchar(255)Unbekannt
user sid columnvarchar(255)NT-Benutzer-SID
group sid columnvarchar(255)NT-Gruppen-SID
lanman pass columnvarchar(255)Verschlüsseltes Lanman-Passwort
nt pass columnvarchar(255)Verschlüsseltes NT-Passwort
plain pass columnvarchar(255)Klartext-Passwort
acct ctrl columnint(9)NT-Benutzerdaten
unknown 3 columnint(9)Unbekannt
logon divs columnint(9)Unbekannt
hours len columnint(9)Unbekannt
bad password count columnint(5)Anzahl von erlaubten Fehleingaben des Passworts, bevor das Konto deaktiviert wird
logon count columnint(5)Anzahl von Anmeldeversuchen
unknown 6 columnint(9)Unbekannt

Sie können einen Doppelpunkt (:) nach dem Namen jeder Spalte angeben, der ein Update der Spalte beim Update der Tabelle auslöst. Sie können auch nichts nach dem Spaltennamen angeben; dann werden die Felddaten nicht aktualisiert. Das Setzen eines Spaltennamens auf NULL bedeutet, dass dieses Feld nicht verwendet werden soll.

Eine Beispielkonfiguration sieht so aus:

Beispiel 11.3. Beispielkonfiguration für das MySQL-passdb-Backend

[global]
passdb backend = mysql:foo
foo:mysql user = samba
foo:mysql password = abmas
foo:mysql database = samba
# Der Domänen-Name ist statisch und kann nicht geändert werden
foo:domain column = 'MYWORKGROUP':
# Der vollständige Name besteht aus den Werten einiger anderer Spalten
foo:fullname column = CONCAT(firstname,' ',surname):
# Samba sollte niemals in die Passwort-Spalten schreiben
foo:lanman pass column = lm_pass:
foo:nt pass column = nt_pass:
# Die Spalte „unknown 3 column“ wird nicht gespeichert
foo:unknown 3 column = NULL

Klartext-Passwörter oder verschlüsselte Passwörter

Ich rate entschieden von der Verwendung von Klartext-Passwörtern ab; Sie können diese jedoch verwenden.

Wenn Sie Klartext-Passwörter verwenden wollen, setzen Sie `identifier:lanman pass column' und `identifier:nt pass column' auf `NULL' (ohne die Hochkommas) und `identifier:plain pass column' auf den Namen der Spalte, die die Klartext-Passwörter enthält.

Wenn Sie verschlüsselte Passwörter verwenden, setzen Sie 'identifier:plain pass column' auf `NULL' (ohne die Hochkommas). Dies ist die Voreinstellung.

Das Beziehen von Nicht-Spalten-Daten aus der Tabelle

Es ist möglich, durch Verwendung einer 'Konstanten' nicht alle Daten in der Datenbank zu halten.

Zum Beispiel können Sie 'identifier:fullname column' auf etwas wie CONCAT(Firstname,' ',Surname) setzen.

Oder `identifier:workstations column' auf: NULL

Lesen Sie die MySQL-Dokumentation für mehr Informationen zu den Sprachkonstrukten.

XML

Dieses Modul setzt voraus, dass libxml2 installiert ist.

Die Verwendung von pdb_xml ist ziemlich einfach. Um Daten zu exportieren, verwenden Sie:

$ pdbedit -e xml:dateiname

(wobei dateiname der Name der Ausgabedatei ist)

Um Daten zu importieren, verwenden Sie: $ pdbedit -i xml:dateiname

Gängige Fehler

Benutzer können sich nicht anmelden

Ich habe Samba installiert, aber jetzt kann ich mich mit meinem UNIX-Konto nicht anmelden!

Stellen Sie sicher, dass Ihr Benutzer zum aktuellen Samba-passdb-Backend hinzugefügt wurde. Lesen Sie dazu den Abschnitt Werkzeuge zur Verwaltung von Konten.

Benutzer werden zur falschen Backend-Datenbank hinzugefügt

Wir haben ein paar Beschwerden von Benutzern erhalten, die gerade zu Samba-3 gewechselt waren. Die folgenden Einträge in smb.conf verursachten Probleme: Neue Konten wurden zur alten smbpasswd-Datei hinzugefügt, nicht zur tdbsam-Datei passdb.tdb:

[global]
...
passdb backend = smbpasswd, tdbsam
...

Samba fügt neue Konten zum ersten Eintrag im Parameter passdb backend hinzu. Wenn Sie Updates gegen die tdbsam haben wollen, ändern Sie den Eintrag auf:

passdb backend = tdbsam, smbpasswd

Konfiguration der auth methods

Beim expliziten Setzen des Parameters auth methods, muss guest als der erste Eintrag auf dieser Zeile angegeben werden, z.B. auth methods = guest sam.

Dies ist das exakte Gegenteil zur Anforderung der Option passdb backend, wo guest der LETZTE Parameter der Zeile sein muss.