.. toctree:: 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 `` 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. | Zum Deaktivieren des 'sssd' siehe auch: | http://www.susethailand.com/suseforum/how-tofaq-%28beginner-skill%29-43/disable-tlsssl-for-ldap-on-opensuse-12-2/ 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: | https://help.ubuntu.com/community/Autofs | http://chschneider.eu/linux/server/nfs.shtml | http://funix.dyndns.org/simulated-hpc-cluster/nfs-and-autofs Ü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................!**