Netzhai
R.I.P. :-(
Linux-PDC mit Samba und OpenLDAP
Zentrale Anmeldung
Volker Lendecke
In der Vergangenheit gab es in den Entwicklerversionen verschiedene Ansätze, Samba an LDAP anzubinden. Seit der Release 2.2.3a existiert eine solche erstmals in der Produktionsversion. Damit lassen sich jetzt Single-Sign-On-Server unter Linux aufsetzen.
Immer mehr Programme und Dienste können für die unterschiedlichsten Zwecke das Protokoll LDAP einsetzen - mit der Anfang Februar freigegebenen Version 2.2.3a zählt auch Samba dazu. Damit gehört die Samba-LDAP-Anbindung erstmals zum Lieferumfang der Produktionsversion, was den Funktionsumfang des freien Pakets in Richtung PDC (Primary Domain Controller) für Windows-Domänen erweitert. Da die Inbetriebnahme einige Stolperfallen birgt, beschreibt dieser Artikel eine Neuinstallation der LDAP-Anbindung von Samba. Die dafür verwendeten Dateien stehen zum Download bereit.
LDAP ist eine Datenbank zum Ablegen von strukturierten Objekten. Jedes kann mit einer Menge von Attributen ausgestattet sein. Die für ein Objekt notwendigen und die darüber hinaus erlaubten Attribute legt eine Objektklasse fest. Ein Objekt kann mehreren Klassen angehören, um unterschiedliche Eigenschaften auszudrücken.
Bei jeder Anbindung von Programmen an LDAP steht am Anfang die Frage, welche Daten zur Disposition stehen. Samba legt dort die NT-Benutzerdaten ab, das heißt den Inhalt der Datei smbpasswd mit den verschlüsselten Benutzerpasswörtern. Darüber hinaus hat Samba mit der LDAP-Anbindung einen weiteren Schritt in Richtung NT-Domänencontroller getan. Ohne SAM (Security Account Manager), die Benutzerkontendatenbank von NT 4.0, im LDAP ist Samba nicht in der Lage, für jeden Benutzer individuell das Logon-Script oder den Pfad des Profils festzulegen. Man kann zwar mit Makroersetzungen, etwa über
individuelle Login-Scripts zuordnen, aber diese Einstellung gilt global für alle Domänenbenutzer und lässt sich nicht individuell ändern.
Die gesamte Konfiguration in diesem Artikel geht davon aus, dass der LDAP-Server und die -Clients auf einer einzigen Maschine laufen. Passwörter, insbesondere die in dieser Hinsicht kritischen SMB-Passwörter, gehen zwischen dem LDAP-Server und Samba im Klartext über die Verbindung. Das ist nicht akzeptabel, wenn ein echtes Netz dazwischen liegt. Sowohl OpenLDAP als auch Samba können LDAP-Abfragen in TLS (Transport Layer Security) einpacken, so dass niemand die Verbindung belauschen kann. Für diese Konfiguration liefert das LDAPv3-HOWTO von www.bayour.com eine hervorragende Referenz.
Programmierung und Tests erfolgten bei den Samba-Entwicklern mit OpenLDAP 2 und den entsprechenden Client-Bibliotheken. Dieser Artikel beschreibt die Installation auf einer SuSE 7.3, die OpenLDAP in der (ausreichenden) Version 2.0.12 beinhaltet, aktuell ist zum Zeitpunkt dieses Artikels Release 2.0.23. Voraussetzung für das weitere Vorgehen sind die Pakete nss_ldap, openldap2, openldap2-client, openldap2-devel und pam_ldap aus der Serie n. Via rpm -q <Paketname> lässt sich prüfen, ob sie schon vorhanden sind, fehlende muss man via Yast oder rpm aufspielen.
In /etc/openldap/slapd.conf erfolgt die Konfiguration des OpenLDAP-Servers, Listing 1 zeigt, wie sie für das Beispiel des LDAP-Baums ‘dc=samba,dc=org’ aussieht. Das verschlüsselte Passwort in der Option rootpw erzeugt das Kommando slappasswd, es gewährt vollen Zugriff auf das gesamte LDAP-Verzeichnis für den Benutzer unter rootdn. Das Passwort liegt zwar als Hashwert vor, die Datei slapd.conf sollte aber noch besser geschützt werden als die Datei /etc/shadow, die ebenso verschlüsselte Passwörter enthält. Insbesondere wenn Samba die Benutzerpasswörter im LDAP ablegen soll, ist Vorsicht geboten, da diese Passwörter mit Klartextpasswörtern gleichwertig sind. Dies liegt daran, dass man mit einem modifizierten smbclient den Hashwert direkt zur Authentifizierung benutzen kann - ohne crack einsetzen zu müssen.
Vor dem OpenLDAP-Start via rcldap start ist die Datei samba.schema aus dem Verzeichnis examples/LDAP der Samba-Quellen nach /etc/openldap/schema zu kopieren.
Nach dem ersten Hochfahren von OpenLDAP ist das LDAP-Verzeichnis leer. Die Option ‘suffix’ teilt dem slapd mit, für welchen Teil des Verzeichnisbaums er verantwortlich ist. Objekte unterhalb dieses Teilbaums muss man manuell anlegen, insbesondere den Container, der die Wurzel des Teilbaums aufnimmt, im Beispiel für dc=samba,dc=org. Für diesen bietet sich die Objektklasse organization an, einziges zwingendes Attribut ist der Name der Organisation ‘o’. Folgende samba.ldif-Datei beschreibt die Wurzelorganisation:
Der Aufruf
fügt samba.ldif in das Verzeichnis ein. Die Option ‘-D’ gibt den Namen an, mit dem man sich gegenüber dem LDAP-Server authentifizieren möchte. Jetzt lassen sich neue Benutzer anlegen. Damit ein Benutzer im LDAP auch Unix benutzen kann, muss er der Objektklasse ‘posixAccount’ angehören. Das dazugehörige Objekt benötigt einige Attribute:
ldapadd fügt das Objekt dem Verzeichnis hinzu. Anwender können die so im LDAP abgelegten Objekte via ldapsearch abfragen. Um vernünftig mit dem Kommando arbeiten zu können, sollte man in /etc/openldap/ldap.conf folgende Werte vorgeben:
Danach liefert ldapsearch -x die eingefügten Objekte aus dem Verzeichnis.
Um Samba als PDC mit LDAP-Anbindung betreiben zu können, muss Linux seine Benutzerinformationen ebenfalls aus dem LDAP-Baum beziehen. Dazu dient der nsswitch-Mechanismus der Glibc, der sämtliche Anfragen auf den Dateien /etc/passwd und /etc/group an dynamische Bibliotheken weiterleitet. Zum Paket nss_ldap gehört eine solche Bibliothek, die die Anfragen an einen LDAP-Server weiterleitet. Mit den in der /etc/openldap/ldap.conf konfigurierten Standardwerten ist auch nss_ldap fast fertig konfiguriert. Es fehlen in /etc/nsswitch.conf lediglich die Zeilen
Damit sind die in LDAP angelegten posixAccount-Objekte unter Unix als Benutzer sichtbar, wovon man sich mit dem Aufruf getent passwd überzeugen kann. Erscheinen die Benutzer aus dem LDAP nicht in der Liste, könnte die Ursache im allseits beliebten Name Service Caching Daemon nscd liegen. Mit killall nscd wird man ihn los; stellt man zusätzlich noch in /etc/rc.config die Variable START_NSCD auf ‘no’, bereitet er nie wieder Schwierigkeiten.
>> Next
Zentrale Anmeldung
Volker Lendecke
In der Vergangenheit gab es in den Entwicklerversionen verschiedene Ansätze, Samba an LDAP anzubinden. Seit der Release 2.2.3a existiert eine solche erstmals in der Produktionsversion. Damit lassen sich jetzt Single-Sign-On-Server unter Linux aufsetzen.
Immer mehr Programme und Dienste können für die unterschiedlichsten Zwecke das Protokoll LDAP einsetzen - mit der Anfang Februar freigegebenen Version 2.2.3a zählt auch Samba dazu. Damit gehört die Samba-LDAP-Anbindung erstmals zum Lieferumfang der Produktionsversion, was den Funktionsumfang des freien Pakets in Richtung PDC (Primary Domain Controller) für Windows-Domänen erweitert. Da die Inbetriebnahme einige Stolperfallen birgt, beschreibt dieser Artikel eine Neuinstallation der LDAP-Anbindung von Samba. Die dafür verwendeten Dateien stehen zum Download bereit.
LDAP ist eine Datenbank zum Ablegen von strukturierten Objekten. Jedes kann mit einer Menge von Attributen ausgestattet sein. Die für ein Objekt notwendigen und die darüber hinaus erlaubten Attribute legt eine Objektklasse fest. Ein Objekt kann mehreren Klassen angehören, um unterschiedliche Eigenschaften auszudrücken.
Bei jeder Anbindung von Programmen an LDAP steht am Anfang die Frage, welche Daten zur Disposition stehen. Samba legt dort die NT-Benutzerdaten ab, das heißt den Inhalt der Datei smbpasswd mit den verschlüsselten Benutzerpasswörtern. Darüber hinaus hat Samba mit der LDAP-Anbindung einen weiteren Schritt in Richtung NT-Domänencontroller getan. Ohne SAM (Security Account Manager), die Benutzerkontendatenbank von NT 4.0, im LDAP ist Samba nicht in der Lage, für jeden Benutzer individuell das Logon-Script oder den Pfad des Profils festzulegen. Man kann zwar mit Makroersetzungen, etwa über
Code:
logon script = %U.bat
individuelle Login-Scripts zuordnen, aber diese Einstellung gilt global für alle Domänenbenutzer und lässt sich nicht individuell ändern.
Die gesamte Konfiguration in diesem Artikel geht davon aus, dass der LDAP-Server und die -Clients auf einer einzigen Maschine laufen. Passwörter, insbesondere die in dieser Hinsicht kritischen SMB-Passwörter, gehen zwischen dem LDAP-Server und Samba im Klartext über die Verbindung. Das ist nicht akzeptabel, wenn ein echtes Netz dazwischen liegt. Sowohl OpenLDAP als auch Samba können LDAP-Abfragen in TLS (Transport Layer Security) einpacken, so dass niemand die Verbindung belauschen kann. Für diese Konfiguration liefert das LDAPv3-HOWTO von www.bayour.com eine hervorragende Referenz.
Programmierung und Tests erfolgten bei den Samba-Entwicklern mit OpenLDAP 2 und den entsprechenden Client-Bibliotheken. Dieser Artikel beschreibt die Installation auf einer SuSE 7.3, die OpenLDAP in der (ausreichenden) Version 2.0.12 beinhaltet, aktuell ist zum Zeitpunkt dieses Artikels Release 2.0.23. Voraussetzung für das weitere Vorgehen sind die Pakete nss_ldap, openldap2, openldap2-client, openldap2-devel und pam_ldap aus der Serie n. Via rpm -q <Paketname> lässt sich prüfen, ob sie schon vorhanden sind, fehlende muss man via Yast oder rpm aufspielen.
In /etc/openldap/slapd.conf erfolgt die Konfiguration des OpenLDAP-Servers, Listing 1 zeigt, wie sie für das Beispiel des LDAP-Baums ‘dc=samba,dc=org’ aussieht. Das verschlüsselte Passwort in der Option rootpw erzeugt das Kommando slappasswd, es gewährt vollen Zugriff auf das gesamte LDAP-Verzeichnis für den Benutzer unter rootdn. Das Passwort liegt zwar als Hashwert vor, die Datei slapd.conf sollte aber noch besser geschützt werden als die Datei /etc/shadow, die ebenso verschlüsselte Passwörter enthält. Insbesondere wenn Samba die Benutzerpasswörter im LDAP ablegen soll, ist Vorsicht geboten, da diese Passwörter mit Klartextpasswörtern gleichwertig sind. Dies liegt daran, dass man mit einem modifizierten smbclient den Hashwert direkt zur Authentifizierung benutzen kann - ohne crack einsetzen zu müssen.
Vor dem OpenLDAP-Start via rcldap start ist die Datei samba.schema aus dem Verzeichnis examples/LDAP der Samba-Quellen nach /etc/openldap/schema zu kopieren.
Nach dem ersten Hochfahren von OpenLDAP ist das LDAP-Verzeichnis leer. Die Option ‘suffix’ teilt dem slapd mit, für welchen Teil des Verzeichnisbaums er verantwortlich ist. Objekte unterhalb dieses Teilbaums muss man manuell anlegen, insbesondere den Container, der die Wurzel des Teilbaums aufnimmt, im Beispiel für dc=samba,dc=org. Für diesen bietet sich die Objektklasse organization an, einziges zwingendes Attribut ist der Name der Organisation ‘o’. Folgende samba.ldif-Datei beschreibt die Wurzelorganisation:
Code:
dn: dc=samba,dc=org
objectclass: organization
o: samba
Der Aufruf
Code:
ldapadd -D cn=admin,dc=samba,dc=org -x -W -f\ samba.ldif
fügt samba.ldif in das Verzeichnis ein. Die Option ‘-D’ gibt den Namen an, mit dem man sich gegenüber dem LDAP-Server authentifizieren möchte. Jetzt lassen sich neue Benutzer anlegen. Damit ein Benutzer im LDAP auch Unix benutzen kann, muss er der Objektklasse ‘posixAccount’ angehören. Das dazugehörige Objekt benötigt einige Attribute:
Code:
dn: cn=admin,dc=samba,dc=org
objectclass: posixAccount
cn: admin
uid: admin
uidNumber: 1000
gidNumber: 100
homeDirectory: /home/admin
loginShell: /bin/bash
ldapadd fügt das Objekt dem Verzeichnis hinzu. Anwender können die so im LDAP abgelegten Objekte via ldapsearch abfragen. Um vernünftig mit dem Kommando arbeiten zu können, sollte man in /etc/openldap/ldap.conf folgende Werte vorgeben:
Code:
URI ldap://localhost:389/
BASE dc=samba,dc=org
Danach liefert ldapsearch -x die eingefügten Objekte aus dem Verzeichnis.
Um Samba als PDC mit LDAP-Anbindung betreiben zu können, muss Linux seine Benutzerinformationen ebenfalls aus dem LDAP-Baum beziehen. Dazu dient der nsswitch-Mechanismus der Glibc, der sämtliche Anfragen auf den Dateien /etc/passwd und /etc/group an dynamische Bibliotheken weiterleitet. Zum Paket nss_ldap gehört eine solche Bibliothek, die die Anfragen an einen LDAP-Server weiterleitet. Mit den in der /etc/openldap/ldap.conf konfigurierten Standardwerten ist auch nss_ldap fast fertig konfiguriert. Es fehlen in /etc/nsswitch.conf lediglich die Zeilen
Code:
passwd: files ldap
group: files ldap
Damit sind die in LDAP angelegten posixAccount-Objekte unter Unix als Benutzer sichtbar, wovon man sich mit dem Aufruf getent passwd überzeugen kann. Erscheinen die Benutzer aus dem LDAP nicht in der Liste, könnte die Ursache im allseits beliebten Name Service Caching Daemon nscd liegen. Mit killall nscd wird man ihn los; stellt man zusätzlich noch in /etc/rc.config die Variable START_NSCD auf ‘no’, bereitet er nie wieder Schwierigkeiten.
>> Next