Samba-PDC mit LDAP-Anbindung für Samba Version 3.6.6

Folgendes Tutorial beschreibt die wichtigsten Schritte zur Anbindung eines Samba-PDCs ans LDAP unter Debian Wheezy. Dabei wird die moderne und native Samba-Methode ‚editposix‘ zur Koppelung verwendet.

Installation

Die wichtigsten Softwarepakete werden installiert mit:

apt-get install slapd ldap-utils samba winbind smbclient samba-doc

Das Paket ‚samba-doc‘ wird vor allem für das später einzubindende Samba-Schema benötigt.

LDAP-Basiskonfiguration

Unter Debian Squeeze wird nun nicht mehr die statische Konfigurationsdatei ‚slapd.conf‘ verwendet, die Einstellungen liegen ebenfalls mit in der LDAP-Datenbank. Desalb muss folgendes Kommando verwendet werden, um den Namensraum, das Passwort für den LDAP-Administartor ‚admin‘ und weitere Einstellungen zu ändern:

dpkg-reconfigure slapd

Einbinden des Samba-Schemas

Mit dem Kommando

ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config | grep dn

kann man sich davon überzeugen, dass das Samba-Schema noch fehlt. Es wird hinzugefügt mit:

zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema

rm /etc/ldap/slapd.d/cn\=config/cn\=schema/*

Nun brauchen wir eine Datei, die wir ‚ldap-schema.ldif‘ nennen wollen und geben ihr folgenden Inhalt:

vi /root/ldap-schema.ldif

include          /etc/ldap/schema/core.schema
include          /etc/ldap/schema/cosine.schema
include          /etc/ldap/schema/nis.schema
include          /etc/ldap/schema/inetorgperson.schema
include          /etc/ldap/schema/samba.schema

Mit den nächsten Zeilen erstellen wir ein Verzeichnis für die neuen Schema-Dateien, wandeln sie ins richtige Format um und installieren sie:

mkdir /root/ldap-schema.d

slaptest -f /root/ldap-schema.ldif -F /root/ldap-schema.d

cp /root/ldap-schema.d/cn\=config/cn\=schema/*  /etc/ldap/slapd.d/cn\=config/cn\=schema/

chown -R openldap: /etc/ldap/slapd.d/cn\=config/cn\=schema/

/etc/init.d/slapd restart

Wenn das obige ldapsearch-Kommando jetzt auch ‚dn: cn={4}samba,cn=schema,cn=config‘ ausgibt, hat alles geklappt.

Besonders wichtig ist dabei die Datei ‚/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}samba.ldif‘, die im oben genannten Verzeichnis liegen muss. Ansonsten gelingt später ‚net sam provision‘ nicht!

Importieren der initialen LDIF-Datei

Wir haben zwar unter 2.) eine erste Struktur erstellt, für ‚editposix‘ brauchen wir aber ein paar LDAP-Objekte mehr. Erstellen wir eine Datei namens ‚init.ldif‘ mit folgendem Inhalt:

vi /root/init.ldif

dn: ou=users,dc=kitdd,dc=intern
objectClass: top
objectClass: organizationalUnit
ou: users

dn: ou=groups,dc=kitdd,dc=intern
objectClass: top
objectClass: organizationalUnit
ou: groups

dn: ou=idmap,dc=kitdd,dc=intern
objectClass: top
objectClass: organizationalUnit
ou: idmap

dn: ou=computers,dc=kitdd,dc=intern
objectClass: top
objectClass: organizationalUnit
ou: computers

Sie muss nun mit

ldapadd -x -v -W -D "cn=admin,dc=kitdd,dc=intern" -f /root/init.ldif

integriert werden. Dann folgt eine erste Testabfrage unseres DIT:

ldapsearch -x -b dc=kitdd,dc=intern

Samba konfigurieren

Hier folgt die Samba-Konfigurationsdatei, mit der sich das Szenario umsetzen lässt. Die typischen Shares wie ‚profile‘ und ‚netlogon‘ sind bereits vordefiniert, die Pfade müssen dann aber natürlich auch mit den passenden Rechten existieren. Der zentrale Debian-Squeeze-Server hat die IP-Adresse 192.168.5.213, der NetBIOS-Domänenname lautet „KITDD“.

vi /etc/samba/smb.conf

[global]
   # PDC-Einstellungen
   workgroup = KITDD
   netbios name = srv01
   domain logons = yes
   domain master = yes
   local master = yes
   preferred master = yes
   os level = 65
   log level = 3
   log file = /var/log/samba/log.%m
   max log size = 1000
   logon path = \\%N\profile\%U\%a
   logon script = %U.bat

   # LDAP-Einstellungen
   ldap ssl = off
   passdb backend = ldapsam
   ldapsam:trusted = yes
   ldapsam:editposix = yes
   ldap admin dn = cn=admin,dc=kitdd,dc=intern
   ldap user suffix = ou=users
   ldap group suffix = ou=groups
   ldap machine suffix = ou=computers
   ldap passwd sync = Yes
   ldap suffix = dc=kitdd,dc=intern

   # Benutzer-ID-Mapping mit winbindd (Bei Samba 3.6 entfällt hier u.a. "idmap alloc")
   idmap config * : range = 55000-64000
   idmap config * : backend      = ldap
   idmap config * : ldap_user_dn = cn=admin,dc=kitdd,dc=intern
   idmap config * : ldap_url     = ldap://deb7.kitdd.intern/
   idmap config KITDD : backend = nss
   idmap config KITDD : range = 1000-54999

[profile]
   path = /srv/profile
   writeable = yes
   profile acls = yes

[netlogon]
   comment = Network Logon Service
   path = /var/lib/netlogon
   browsable = no

Nun müssen die Samba-Dienste gestoppt werden, um die richtige Abarbeitungsreihenfolge zu gewährleisten.

/etc/init.d/samba stop

/etc/init.d/winbind stop

Im folgenden wird als „ldapAdminPasswort“ dasjenige angegeben, welches wir anfänglich im LDAP-Verzeichis für den ‚admin‘ hinterlegt haben. Dadurch können die Dienste überhaupt erst miteinander kommunizieren:

smbpasswd -w ldapAdminPassword

Ganz ähnlich muss das Passwort für unsere Domäne gespeichert werden:

net idmap secret '*' ldapAdminPassword

An dieser Stelle dürfen wir schon mal den winbind-Daemon starten:

/etc/init.d/winbind  start

Im nächsten Schritt wird es spannend, es wird hierbei eine grundlegende Provisionierung durchgeführt, in der Domänen-Benutzer und -Gruppen angelegt werden.

net sam provision

Die erfolgreiche Ausgabe sieht dann so aus:

Checking for Domain Users group.
Adding the Domain Users group.
Checking for Domain Admins group.
Adding the Domain Admins group.
Check for Administrator account.
Adding the Administrator user.
Checking for Guest user.
Adding the Guest user.
Checking Guest's group.
Adding the Domain Guests group.

Um später Windows-Maschinen ins LDAP-Verzeichnis aufnehmen zu können, brauchen wir einen entsprechenden administrativen Benutzer im DIT. Wir nehmen am besten dazu ‚root‘:

smbpasswd -a root

Alternativ wäre der bei der Provisionierung angelegte ‚Administrator‘ verwendbar, wenn er mit einem Passwort versehen und weiteren Befehlszeilen (net rpc rights grant …) berechtigt wird.

Schließlich fehlt nur noch das Starten des Samba-Servers mit:

/etc/init.d/samba start

Schlägt dies mit der Fehlermeldung ‚Failed to initialize the registry: WERR_CAN_NOT_COMPLETE‘ fehl, muss nur die Datei /var/lib/samba/registry.tdb gelöscht werden, dann startet Samba wieder und legt die Datei dabei neu an.

An dieser Stelle kann man bereits Domänen-Benutzer mit pdbedit -a <USER> anlegen, die im LDAP-Tree landen. Es können auch schon Windows-Maschinen zur Domäne hinzugefügt werden; allerdings können sich die Benutzer dort erst dann anmelden, wenn die „NSS module for using LDAP as a naming service“ installiert und konfiguriert worden sind. Dies erledigen wir im nächsten Kapitel.

Domänenanschluss und weitere abschließende Arbeiten

Mit dem Samba-Benutzer ‚root‘ ist es nun möglich, Windows-Computer wie gewohnt in die Domäne aufzunehmen. Der Erstlogin an der Domäne findet am besten ebenfalls mit der Benutzerkennung root statt, dann ist es ohne weiteres möglich, alternativ unter Windows mit dem Tool ‚usrmgr.exe‘ aus dem Microsoft-Paket ‚srvtools.exe‘ weitere Benutzer dem LDAP hinzuzufügen. Außerdem stehen die Werkzeuge ‚swat‘ und ‚jxplorer‘ zur Verfügung. Mit letzerem kann man die LDAP-Einträge direkt bearbeiten.

Damit sich die mit dem Werkzeug ‚usrmgr.exe‘ angelegten neuen Benutzer tatsächlich einloggen können, benötigen sie aber nach wie vor als Basis einen Unix-Account. Da wir ja unser LDAP mit der vorhandenen „objectClass: posixAccount“ nutzen wollen, müssen auf dem Server noch die „NSS module for using LDAP as a naming service“ sowie die LDAP-Module für den PAM-Mechanismus, der sich ja um den Login kümmert, installiert und konfiguriert werden:

apt-get install libnss-ldap libpam-ldap

Die Einrichtung der beiden Pakete läuft hintereinander ab, zum Teil werden die gleichen Fragen gestellt, die dann einfach identisch beantwortet werden. Wichtige Punkte (meist richtig voreingestellt) sind:

  • URI des LDAP-Servers (FQDN oder IP-Adresse, hier ldapi://srv01.kitdd.intern)

  • Gewünschte LDAP-Version (empfohlen: 3)

  • Administrativer LDAP-Zugang (z.B. cn=admin,dc=kitdd,dc=intern mit zugehörigem Passwort)

  • Erlaubnis geben, dass der LDAP-Admin sich wie der lokale root verhalten darf (damit die verschiedenen Tools die lokalen Kennwörter ändern dürfen)

Bei Bedarf können die Einstellungen später mit folgender Zeile geändert werden:

dpkg-reconfigure libnss-ldap

Mit dieser Installation kommt auch automatisch der Caching-Dienst ‚nscd‘ mit, der nicht unbedingt benötigt wird. Er sollte, da er manchmal eher für Verwirrung sorgt als Nutzen bringt, gleich wieder deinstalliert werden:

apt-get remove nscd

Soeben während der Installation haben wir erfahren, dass wir die Datei ‚/etc/nsswitch.conf‘ von Hand anpassen müssen. Den betreffenden drei Zeilen wird die Zeichenkette ‚ldap‘ angefügt, so dass sie dann so aussehen:

passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap

Nach diesen Aktionen müssen die Samba-Daemonen neu gestartet werden:

/etc/init.d/samba restart

/etc/init.d/winbind restart

Nun hoffen wir, dass alles funktioniert, auch die Anmeldung am Linux-Server ist möglich, wenn den Usern z.B. mit dem Programm ‚jxplorer‘ eine Login-Shell zugewiesen wird. Ein Heimatverzeichnis kann man auch festlegen, im einfachsten Testfall ‚/tmp‘. Es kann aber auch der Standard-Pfad ‚/home/DOMÄNENNAME/USERNAME‘ unverändert stehen bleiben; wir kümmern uns später im Zusammenhang mit dem Automounter auf der SuSE-Workstation darum, das die Nutzer ein Heimatverzeichnis bekommen.

Mit der kleinen, nützlichen Kommandozeile

getent passwd

kann man sich die Gesamtheit aller vorhandenen Benutzer aus der ‚/etc/passwd‘ und dem LDAP-Verzeichnis ausgeben lassen.

Unter http://wiki.samba.gr.jp/mediawiki/index.php?title=How_to_build_Samba_PDC_(squeeze) sind weitere Informationen gerade auch zum Thema ‚libnss-ldap‘ zu finden.

OpenSuSE 11.4 als LDAP-User-Login-Client

Will man sich an einer Suse-Workstation mit einem der LDAP-Benutzer anmelden, lässt sich das relativ einfach über yast2 einrichten:

==> Sicherheit und Benutzer /
-> Benutzer- und Gruppenverwaltung /
-> Karte „Authentifizierungseinstellungen“ /
-> Nach kurzem abwarten Link „LDAP“ anklicken /
Einstellungen sind vorzunehmen bei:
  • LDAP verwenden

  • Adressen von LDAP-Servern: 192.168.5.200+PLATZ

  • LDAP-Basis-DN: dc=kitdd,dc=intern

Zusätzlich unter -> „Erweiterte Konfiguration“ /
  • Use System Security Services Daemon (SSSD): KREUZ ENTFERNEN!

Ins vorherige Menü zurückgekehrt, kann jetzt SSL deaktiviert werden: * Sichere Verbindung, LDAP TLS/SSL: KREUZ ENTFERNEN!

Es müssen keine Änderngen an /etc/nsswitch.conf und Firewall vorgenommen werden.

Servergespeichertes Profil auf Unix-Art

Um ähnlich wie für Windows-Freigaben die Nutzerdaten automatisch auf den Server abzulegen, könnte auch SMB Verwendung finden, besser dafür geeignet ist allerdings NFS.

Das bedeutet, wir müssen

1.) Einen NFS-Export für die Heimatverzeichnisse einrichten

2.) Einen Automounter (autofs) installieren, der diese Verzeichnisse beim Login automatisch mountet

Zu 1.) Unser zentraler Debian-Server ist mit der zu erstellenden Dateifreigabe dran:

apt-get install nfs-kernel-server

vi /etc/exports

Der Inhalt der Datei ist:

/srv/nfs4        *(rw,sync,fsid=0,crossmnt,no_subtree_check)
/srv/nfs4/homes  *(rw,sync,no_subtree_check)

Nun müssen das NFS-Freigabeverzeichnis sowie die Heimatverzeichnisse der einzelnen Nutzer angelegt und mit den richtigen Rechten ausgestattet werden:

mkdir -p /srv/nfs4/homes

mkdir /srv/nfs4/homes/otto

chown otto:domusers /srv/nfs4/homes/otto

mkdir /srv/nfs4/homes/fritz

chown fritz:domusers /srv/nfs4/homes/fritz

Schnell noch den NFS-Server neu starten und Freigabe kontrollieren. Die Prüfung erfolgt dabei mittels der eigenen IP-Adresse 192.168.5.213:

/etc/init.d/nfs-kernel-server restart

showmount -e 192.168.5.213

Zu 2.) Als Workstation dient SuSE, wir richten den Automounter ein:

zypper in autofs

insserv -v autofs

Leider ist die Map-Datei für ‚home‘ nicht vorkonfiguriert, deshalb editieren wir mit

vi /etc/auto.master

die Hauptkonfigurationsdatei und fügen VOR der Zeile ‚+auto.master‘ (sie muss als letzte stehen bleiben) folgendes ein:

/home/KITDD   /etc/auto.home

Dabei steht „KITDD“ für den NetBIOS-Domänennamen, der sich hier als Ordner-Bezeichnung wiederspiegelt. Dieser Ordner muss noch mit der folg. Zeile erzeugt werden:

mkdir /home/KITDD

Im Ergebnis dessen entsteht beim Login von z.B. Otto der HOME-Pfad ‚/home/KITDD/otto‘. Dies rührt von dem o.g. Windows-Tool ‚usrmgr.exe‘ her, mit dem Otto im LDAP erzeugt wurde.

Nun fehlt nur noch die Map-Datei, die wir neu anlegen müssen:

vi /etc/auto.home

Der Inhalt ist der folgende:

*    -fstype=nfs4,soft,intr,nosuid,tcp  192.168.5.213:/homes/&

Nach dem Neustart des Automounters mit

/etc/init.d/autofs restart

kann es ans Testen gehen, so müsste z.B. Ottos Heimatverzeichnis beim Login automatisch einghangen werden, so dass er ganz normal arbeiten kann.

Zum Thema autofs hier ein paar Links:

Überblick wichtiger Kommandos

Ausgabe aller Objekte unterhalb der anzugebenden Such-Basis:

ldapsearch -x  -b dc=kitdd,dc=intern

Hinzufügen eines Benutzers mittels Datei im LDIF-Format:

ldapadd -x -W -v -D "cn=admin,dc=kitdd,dc=intern" -f administrator.ldif

Entfernen des Benutzers ‚max‘:

ldapdelete -x -W -D cn=admin,dc=kitdd,dc=intern  cn=max,dc=kitdd,dc=intern

Komplette Ausgabe der LDAP-Datenbank (Der Dienst muss dabei nicht laufen):

slapcat -v

Ausgabe der config-Einstellungen:

ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config"

Ausgabe der geladenen Schemas:

ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config | grep dn

Typische Fehler

  • Das ‚samba.schema‘ ist nicht integriert

  • Die Verschlüsselung ist in der ‚smb.conf‘ nicht deaktiviert worden (mit ‚ldap ssl = off‘; bei Debian Squeeze ist dieser Schalter standardmäßig aktiviert)

  • Das ID-Mapping für ‚winbindd‘ wird mit alten Methoden durchgeführt (Nach Samba-Version 3.0.25 hat sich hier einiges geändert)