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)
Links
http://www.debuntu.org/ldap-server-and-linux-ldap-clients
http://wiki.samba.org/index.php/Ldapsam_Editposix
http://www.galileocomputing.de/artikel/gp/artikelID-360
—
Zu guterletzt bleibt mir noch zu wünschen übrig: „Have a lot of fun…………….!