Unterschiede zwischen den Revisionen 9 und 10
Revision 9 vom 2008-10-22 12:33:41
Größe: 83278
Autor: moenoel
Kommentar:
Revision 10 vom 2008-10-30 14:32:26
Größe: 83059
Autor: cyu
Kommentar:
Gelöschter Text ist auf diese Art markiert. Hinzugefügter Text ist auf diese Art markiert.
Zeile 3: Zeile 3:
'''LDAP-Clientverwaltung'''
<<TableOfContents(3)>>
'''LDAP-Clientverwaltung''' <<TableOfContents(3)>>
Zeile 8: Zeile 6:

Diese Dokumentation gibt eine allgemeine Einfuehrung in das Thema LDAP.
Ausserdem wird der clientseitige Umgang mit Open-LDAP am Fachbereich 3 der
Universitaet Bremen beschrieben.

Viele der OpenLDAP-spezifischen Punkte werden nur grundlegend erkleart.
Eine ausfuehrliche Dokumentation ist unter http://www.openldap.org/ zu
finden.


Diese Dokumentation gibt eine allgemeine Einfuehrung in das Thema LDAP. Ausserdem wird der clientseitige Umgang mit Open-LDAP am Fachbereich 3 der Universitaet Bremen beschrieben.

Viele der OpenLDAP-spezifischen Punkte werden nur grundlegend erkleart. Eine ausfuehrliche Dokumentation ist unter http://www.openldap.org/ zu finden.
Zeile 21: Zeile 11:

LDAP steht fuer 'Lightweight Directory Access Protocol' und ist ein
Protokoll, welches die Kommunikation zwischen Clients und einem
Verzeichnisdienst beschreibt. Ein solcher Verzeichnisdienst ist eine im
Netzwerk verfuegbare, hierarchische Datenbank, die Daten objektorientiert
in einer Baumstruktur ablegt.

Angesprochen werden solche Objekte ueber den sogenannten Distinguished Name
(DN), der aus seinem relativen Namen (Relative Distinguished Name, kurz
RDN) und den RDNs der uebergeordneten Objekte bis zur Verzeichnisbasis
zusammengesetzt ist.

Ein RDN ist dabei immer ein Attritbut des jeweiligen Objektes, in
Verbindung mit seinem Wert. Hat ein Objekt z.B. ein Attribut 'cn' (common
name), dessen wert 'egon' ist, kann der RDN des Objektes 'cn=egon' sein.

Welches Attribut fuer den RDN verwendet wird, ist letztendlich dem Ersteller
des Objektes ueberlassen. Der Einfachheit und Datenkonsistenz wegen sollte
es aber eine Einigung auf ein Bestimmtes RDN-Attribut fuer die jeweilig
verwendeten Objekttypen geben. (Bei UNIX-Accounts ist es z.B. 'uid')

Angenommen dem Objekt mit dem RDN 'cn=egon' ist nur noch ein Objekt
'ou=People' (ou = organizationalUnit) uebergeordnet, welches wiederum der
Basis 'dc=informatik,dc=uni-bremen,dc=de' untergeordnet ist, lautet der DN
des Objektes 'cn=egon,ou=People,dc=informatik,dc=uni-bremen,dc=de'.

In der Regel koennen jedem Objekt in der Verzeichnisstruktur weitere
Objekte untergeordnet werden. Ausnahme stellen dabei z.B. die
uebergeordneten RDNs der Verzeichnisbasis dar. Ist z.B. Serverseitig der DN
'dc=informatik,dc=uni-bremen,dc=de' als Datenbasis festgelegt worden,
koennen Daten nur untergeordnet zu diesem DN abgelegt werden.
Uebergeordnete DNs, wie z.B. 'dc=uni-bremen,dc=de' muessten auf dem Server
als eigenstaendige Datenbasis definiert werden, damit dort Daten abgelegt
werden koennen.

Ein Objekt in einem Verzeichnis ist eine Sammlung von Attributen, die
jeweils einen Typ haben und einen oder mehrere Werte enthalten. Die Syntax
der Werte ist dabei abhaengig vom Attributtyp, genauso, wie die Anzahl von
Werten, die ein Attribut aufnehmen kann.

Um eingrenzen zu koennen, welche Attribute ein bestimmtes Objekt aufnehmen
kann, gibt es das besondere Attribut 'objectClass', welches schematische
Regeln fuer ein Objekt festlegt, an die es sich halten muss. Dabei kann
ein Objekt auch mehrere Objektklassen enthalten.

In einer Objektklasse wird z.B. festgelegt, welche Attribute ein Objekt
enthalten muss und welche optional zur Verfuegung stehen. Ein Objekt kann
keine Attribute aufnehmen, die nicht in mindestens einer seiner
Objektklassen definiert sind und muss mindestens die Pflichtattribute aller
seiner Objektklassen enthalten.

Attribute und Objektklassen werden in sogenannten Schemas definiert, die
serverseitig eingebunden werden.

Um ungewollte Zugriffe auf Baeume, Objekte oder Attribute zu verhindern,
stellt LDAP verschiedene Mechanismen zur Authentifikation von Benutzern
und dem Einrichten von Zugriffsberechtigungen fuer diese zur Verfuegung.


LDAP steht fuer 'Lightweight Directory Access Protocol' und ist ein Protokoll, welches die Kommunikation zwischen Clients und einem Verzeichnisdienst beschreibt. Ein solcher Verzeichnisdienst ist eine im Netzwerk verfuegbare, hierarchische Datenbank, die Daten objektorientiert in einer Baumstruktur ablegt.

Angesprochen werden solche Objekte ueber den sogenannten Distinguished Name (DN), der aus seinem relativen Namen (Relative Distinguished Name, kurz RDN) und den RDNs der uebergeordneten Objekte bis zur Verzeichnisbasis zusammengesetzt ist.

Ein RDN ist dabei immer ein Attritbut des jeweiligen Objektes, in Verbindung mit seinem Wert. Hat ein Objekt z.B. ein Attribut 'cn' (common name), dessen wert 'egon' ist, kann der RDN des Objektes 'cn=egon' sein.

Welches Attribut fuer den RDN verwendet wird, ist letztendlich dem Ersteller des Objektes ueberlassen. Der Einfachheit und Datenkonsistenz wegen sollte es aber eine Einigung auf ein Bestimmtes RDN-Attribut fuer die jeweilig verwendeten Objekttypen geben. (Bei UNIX-Accounts ist es z.B. 'uid')

Angenommen dem Objekt mit dem RDN 'cn=egon' ist nur noch ein Objekt 'ou=People' (ou = organizationalUnit) uebergeordnet, welches wiederum der Basis 'dc=informatik,dc=uni-bremen,dc=de' untergeordnet ist, lautet der DN des Objektes 'cn=egon,ou=People,dc=informatik,dc=uni-bremen,dc=de'.

In der Regel koennen jedem Objekt in der Verzeichnisstruktur weitere Objekte untergeordnet werden. Ausnahme stellen dabei z.B. die uebergeordneten RDNs der Verzeichnisbasis dar. Ist z.B. Serverseitig der DN 'dc=informatik,dc=uni-bremen,dc=de' als Datenbasis festgelegt worden, koennen Daten nur untergeordnet zu diesem DN abgelegt werden. Uebergeordnete DNs, wie z.B. 'dc=uni-bremen,dc=de' muessten auf dem Server als eigenstaendige Datenbasis definiert werden, damit dort Daten abgelegt werden koennen.

Ein Objekt in einem Verzeichnis ist eine Sammlung von Attributen, die jeweils einen Typ haben und einen oder mehrere Werte enthalten. Die Syntax der Werte ist dabei abhaengig vom Attributtyp, genauso, wie die Anzahl von Werten, die ein Attribut aufnehmen kann.

Um eingrenzen zu koennen, welche Attribute ein bestimmtes Objekt aufnehmen kann, gibt es das besondere Attribut 'objectClass', welches schematische Regeln fuer ein Objekt festlegt, an die es sich halten muss. Dabei kann ein Objekt auch mehrere Objektklassen enthalten.

In einer Objektklasse wird z.B. festgelegt, welche Attribute ein Objekt enthalten muss und welche optional zur Verfuegung stehen. Ein Objekt kann keine Attribute aufnehmen, die nicht in mindestens einer seiner Objektklassen definiert sind und muss mindestens die Pflichtattribute aller seiner Objektklassen enthalten.

Attribute und Objektklassen werden in sogenannten Schemas definiert, die serverseitig eingebunden werden.

Um ungewollte Zugriffe auf Baeume, Objekte oder Attribute zu verhindern, stellt LDAP verschiedene Mechanismen zur Authentifikation von Benutzern und dem Einrichten von Zugriffsberechtigungen fuer diese zur Verfuegung.
Zeile 83: Zeile 34:

In diesem Abschnitt werden einige Werkzeuge erklaert, mit deren Hilfe man
auf ein LDAP-Verzeichnis zugreifen kann.

Die beiden Standardports, die von LDAP verwendet werden, sind einmal der
Port 389 (ldap://) fuer unverschluesselte Verbindungen und 636 (ldaps://)
auf dem die Daten per TLS/SSL gesichert sind.

Da ldaps:// aber nicht offiziell dokumentiert ist, solle man die empfohlene
Methode 'start_tls' ueber Port 389 (dazu spaeter mehr) vorziehen.

Fuer die Authentifikation am Server gibt es verschiedene Moeglichkeiten.
Einmal die sogenannte 'simple bind' Methode, bei der die
Authentifizierungsdaten einfach in Klartext an den Server uebermittelt
werden. Diese Methode sollte aus Sicherheitsgruenden nur in Verbindung mit
einer gesicherten TLS/SSL-Verbindung verwendet werden.

Die zweite Methode ist 'Simple Authentication and Security Layer' (SASL),
welche wiederum verschiedene Mechanismen zur gesicherten Authentifizierung
bereit stellt.

Welche Methode man bevorzugt, ist einem selbst ueberlassen. In diesem
Dokument wird jedoch nur auf das 'simple bind' in Verbindung mit einer
TLS/SSL-Verbindung eingegengen. Aus den offiziellen Dokumentationen der
jeweiligen Tools kann man jedoch alles entnehmen, was fuer eine SASL-
gestuetzte Authentifikation erforderlich ist.

SASL wird von den momentan laufenden LDAP-Servern nicht unterstuetzt. Daher
wird ausdruecklich empfohlen, beider allen (!) Anfrage an den Server, die
nicht als anonymer Benutzer getaetigt werden, TLS/SSL zu verwenden.
In diesem Abschnitt werden einige Werkzeuge erklaert, mit deren Hilfe man auf ein LDAP-Verzeichnis zugreifen kann.

Die beiden Standardports, die von LDAP verwendet werden, sind einmal der Port 389 (ldap://) fuer unverschluesselte Verbindungen und 636 (ldaps://) auf dem die Daten per TLS/SSL gesichert sind.

Da ldaps:// aber nicht offiziell dokumentiert ist, solle man die empfohlene Methode 'start_tls' ueber Port 389 (dazu spaeter mehr) vorziehen.

Fuer die Authentifikation am Server gibt es verschiedene Moeglichkeiten. Einmal die sogenannte 'simple bind' Methode, bei der die Authentifizierungsdaten einfach in Klartext an den Server uebermittelt werden. Diese Methode sollte aus Sicherheitsgruenden nur in Verbindung mit einer gesicherten TLS/SSL-Verbindung verwendet werden.

Die zweite Methode ist 'Simple Authentication and Security Layer' (SASL), welche wiederum verschiedene Mechanismen zur gesicherten Authentifizierung bereit stellt.

Welche Methode man bevorzugt, ist einem selbst ueberlassen. In diesem Dokument wird jedoch nur auf das 'simple bind' in Verbindung mit einer TLS/SSL-Verbindung eingegengen. Aus den offiziellen Dokumentationen der jeweiligen Tools kann man jedoch alles entnehmen, was fuer eine SASL- gestuetzte Authentifikation erforderlich ist.

SASL wird von den momentan laufenden LDAP-Servern nicht unterstuetzt. Daher wird ausdruecklich empfohlen, beider allen (!) Anfrage an den Server, die nicht als anonymer Benutzer getaetigt werden, TLS/SSL zu verwenden.
Zeile 116: Zeile 49:

LDAP ermoeglicht die Verwendung komplexer ACLs, mit dessen Hilfe der
Zugriff auf die Daten im Verzeichnis von ganzen Baeumen bis auf einzelne
Attribute beschraenkt werden koennen. Als Zugriffskriterien lassen sich
dabei Gruppenmitgliedschaften, allgemein LDAP-Filter, IP-Adressbereiche,
eine mindestanforderung an die Verschluesselung und mehr angeben.

Die meisten dieser Kriterien sind auf Accounts im LDAP-Verzeichnis bezogen.
Prinzipiell wird jedes Objekt in der Datenbank, welches das Attribut
'userPassword' enthaelt als Account behandelt und laesst somit eine
Authentifizierung zu.


Es koennen unter anderem die folgenden Zugriffsarten gegeben werden:
(eine hoehere Stufe schliesst die darunterliegenden ein. So darf 'read'
z.B. auch 'compare' und 'auth')
LDAP ermoeglicht die Verwendung komplexer ACLs, mit dessen Hilfe der Zugriff auf die Daten im Verzeichnis von ganzen Baeumen bis auf einzelne Attribute beschraenkt werden koennen. Als Zugriffskriterien lassen sich dabei Gruppenmitgliedschaften, allgemein LDAP-Filter, IP-Adressbereiche, eine mindestanforderung an die Verschluesselung und mehr angeben.

Die meisten dieser Kriterien sind auf Accounts im LDAP-Verzeichnis bezogen. Prinzipiell wird jedes Objekt in der Datenbank, welches das Attribut 'userPassword' enthaelt als Account behandelt und laesst somit eine Authentifizierung zu.

Es koennen unter anderem die folgenden Zugriffsarten gegeben werden: (eine hoehere Stufe schliesst die darunterliegenden ein. So darf 'read' z.B. auch 'compare' und 'auth')
Zeile 138: Zeile 60:
  quittiert mit einem Fehler.          quittiert mit einem Fehler.
Zeile 142: Zeile 64:
  oder false.          oder false.
Zeile 148: Zeile 70:

Dadurch lassen sich Dummyuser anlegen, die nur fuer die Verteilung von
Zugriffsrechten verwendet werden koennen. Auf den aktiven LDAP-Servern sind
solche Dummyuser unter dem DN 'ou=admin,dc=informatik,dc=uni-bremen,dc=de'
abgelegt und werden z.B. verwendet, um bestimmten Skripten Zugriff auf nur
die Daten zu gewaehren, die auch wirklich notwenidig sind.

Die Zugriffe auf die Daten im LDAP-Verzeichnis des FB3 sind nach den
folgenden Kriterien beschraenkt:
(Ausszug)
Dadurch lassen sich Dummyuser anlegen, die nur fuer die Verteilung von Zugriffsrechten verwendet werden koennen. Auf den aktiven LDAP-Servern sind solche Dummyuser unter dem DN 'ou=admin,dc=informatik,dc=uni-bremen,dc=de' abgelegt und werden z.B. verwendet, um bestimmten Skripten Zugriff auf nur die Daten zu gewaehren, die auch wirklich notwenidig sind.

Die Zugriffe auf die Daten im LDAP-Verzeichnis des FB3 sind nach den folgenden Kriterien beschraenkt: (Ausszug)
Zeile 161: Zeile 75:
{{{
Mitglieder der Gruppe fb3-t      write
Dummyuser uid=nsswitch,ou=System,dc=informatik,dc=uni-bremen,dc=de  read
Dummyuser uid=syncrepl,ou=System,dc=informatik,dc=uni-bremen,dc=de read
Dummyuser uid=openid,ou=System,dc=informatik,dc=uni-bremen,dc=de read
Dummyuser uid=adduser,ou=System,dc=informatik,dc=uni-bremen,dc=de write
Alle authentifizierten Benutzer, bezogen auf ihre eigenen Daten  read
}}}

{{{
Mitglieder der Gruppe fb3-t                                             write
Dummyuser uid=nsswitch,ou=System,dc=informatik,dc=uni-bremen,dc=de      read
Dummyuser uid=syncrepl,ou=System,dc=informatik,dc=uni-bremen,dc=de      read
Dummyuser uid=openid,ou=System,dc=informatik,dc=uni-bremen,dc=de        read
Dummyuser uid=adduser,ou=System,dc=informatik,dc=uni-bremen,dc=de       write
Alle authentifizierten Benutzer, bezogen auf ihre eigenen Daten         read
}}}
Zeile 171: Zeile 85:
{{{
Mitglieder der Gruppe fb3-t      write
Dummyuser uid=syncrepl,ou=System,dc=informatik,dc=uni-bremen,dc=de read
Dummyuser uid=adduser,ou=System,dc=informatik,dc=uni-bremen,dc=de write
Alle authentifizierten Benutzer, bezogen auf ihr eigenes Passwort write
Anonyme Benutzer       auth
}}}

{{{
Mitglieder der Gruppe fb3-t                                             write
Dummyuser uid=syncrepl,ou=System,dc=informatik,dc=uni-bremen,dc=de      read
Dummyuser uid=adduser,ou=System,dc=informatik,dc=uni-bremen,dc=de       write
Alle authentifizierten Benutzer, bezogen auf ihr eigenes Passwort       write
Anonyme Benutzer                                                        auth
}}}
Zeile 180: Zeile 94:
{{{
Mitglieder der Gruppe fb3-t      write
Dummyuser uid=nsswitch,ou=System,dc=informatik,dc=uni-bremen,dc=de read
Dummyuser uid=group,ou=System,dc=informatik,dc=uni-bremen,dc=de  write
Dummyuser uid=openid,ou=System,dc=informatik,dc=uni-bremen,dc=de read
Dummyuser uid=syncrepl,ou=System,dc=informatik,dc=uni-bremen,dc=de read
}}}

{{{
Mitglieder der Gruppe fb3-t                                             write
Dummyuser uid=nsswitch,ou=System,dc=informatik,dc=uni-bremen,dc=de      read
Dummyuser uid=group,ou=System,dc=informatik,dc=uni-bremen,dc=de         write
Dummyuser uid=openid,ou=System,dc=informatik,dc=uni-bremen,dc=de        read
Dummyuser uid=syncrepl,ou=System,dc=informatik,dc=uni-bremen,dc=de      read
}}}
Zeile 189: Zeile 103:
{{{
Dummyuser uid=nsswitch,ou=System,dc=informatik,dc=uni-bremen,dc=de read
Dummyuser uid=netgroup,ou=System,dc=informatik,dc=uni-bremen,dc=de write
Dummyuser uid=syncrepl,ou=System,dc=informatik,dc=uni-bremen,dc=de read
}}}

{{{
Dummyuser uid=nsswitch,ou=System,dc=informatik,dc=uni-bremen,dc=de      read
Dummyuser uid=netgroup,ou=System,dc=informatik,dc=uni-bremen,dc=de      write
Dummyuser uid=syncrepl,ou=System,dc=informatik,dc=uni-bremen,dc=de      read
}}}
Zeile 196: Zeile 110:
{{{
Dummyuser uid=autofs,ou=System,dc=informatik,dc=uni-bremen,dc=de write
Alle         read
}}}

{{{
Dummyuser uid=autofs,ou=System,dc=informatik,dc=uni-bremen,dc=de        write
Alle                                                                    read
}}}
Zeile 202: Zeile 116:
{{{
Anonyme Benutzer       auth
Dummyuser uid=syncrepl,ou=System,dc=informatik,dc=uni-bremen,dc=de read
}}}

Die Dummyuser mit den Schreibrechten sind fuer die Synchronisationsskripte
erstellt worden. Der Dummyuser 'nsswitch' ist auf allen Clienthosts
eingetragen, damit das System Zugriff auf die entsprechenden Daten hat.
Der Dummyuser 'syncrepl' wird fuer die Synchronisation der Replicaserver
benoetigt und hate Leserechte auf das gesamte Verzeichnis.

{{{
Anonyme Benutzer                                                        auth
Dummyuser uid=syncrepl,ou=System,dc=informatik,dc=uni-bremen,dc=de      read
}}}
Die Dummyuser mit den Schreibrechten sind fuer die Synchronisationsskripte erstellt worden. Der Dummyuser 'nsswitch' ist auf allen Clienthosts eingetragen, damit das System Zugriff auf die entsprechenden Daten hat. Der Dummyuser 'syncrepl' wird fuer die Synchronisation der Replicaserver benoetigt und hate Leserechte auf das gesamte Verzeichnis.
Zeile 215: Zeile 124:

LDIF ist die Abkuerzung fuer 'LDAP Data Interchange Format' und beschreibt
ein textbasiertes Datenformat zur Darstellung von Informationen in einem
LDAP-Verzeichnis.

Da LDAP lediglich ein Kommunikationsprotokoll fuer Verzeichnisdienste
definiert, deren interne Datendarstellung herstellerspezifisch sein kann,
wurde LDIF entwickelt, um einen einfachen Austausch von Daten auch zwischen
heterogenen Systemen zu ermoeglichen.

Die erste Zeile eines Datensatzes enthaelt dabei immer den DN, gefolgt von
von den Objektklassen, den Attributen und deren Werten. Der Abschluss
einer Objektdefinition ist eine Leerzeile. Wie bereits weiter oben erwaehnt,
kann ein Attribut, je nach Typ, auch mehrere Werte aufnehmen. In LDIF wird
dies einfach durch das wiederholte auffuehren eines Attributes mit einem
jeweils anderen Wert dargestellt.
LDIF ist die Abkuerzung fuer 'LDAP Data Interchange Format' und beschreibt ein textbasiertes Datenformat zur Darstellung von Informationen in einem LDAP-Verzeichnis.

Da LDAP lediglich ein Kommunikationsprotokoll fuer Verzeichnisdienste definiert, deren interne Datendarstellung herstellerspezifisch sein kann, wurde LDIF entwickelt, um einen einfachen Austausch von Daten auch zwischen heterogenen Systemen zu ermoeglichen.

Die erste Zeile eines Datensatzes enthaelt dabei immer den DN, gefolgt von von den Objektklassen, den Attributen und deren Werten. Der Abschluss einer Objektdefinition ist eine Leerzeile. Wie bereits weiter oben erwaehnt, kann ein Attribut, je nach Typ, auch mehrere Werte aufnehmen. In LDIF wird dies einfach durch das wiederholte auffuehren eines Attributes mit einem jeweils anderen Wert dargestellt.
Zeile 234: Zeile 132:
Laesst sich ein Attributwert nicht als Text darstellen, so wird er in
base64-Kodierung nach einem doppelten Doppelpunkt (::) nach dem
Attributnamen dargestellt.
Laesst sich ein Attributwert nicht als Text darstellen, so wird er in base64-Kodierung nach einem doppelten Doppelpunkt (::) nach dem Attributnamen dargestellt.
Zeile 241: Zeile 137:

Dies wird z.B. fuer das Abbilden von Grafiken benoetigt. Eine JPEG-Grafik
koennte z.B. wie folgt in LDIF abgebildet werden:
Dies wird z.B. fuer das Abbilden von Grafiken benoetigt. Eine JPEG-Grafik koennte z.B. wie folgt in LDIF abgebildet werden:
Zeile 251: Zeile 145:

Bei mehrzeiligen Wertzuweisungen ist zu beachten, dass nach einem
Zeilenumbruch ein einzelnes Leerzeichen anzeigt, dass die Zeile eine
Fortsetzung der vorangegangenen Zeile ist.
Bei mehrzeiligen Wertzuweisungen ist zu beachten, dass nach einem Zeilenumbruch ein einzelnes Leerzeichen anzeigt, dass die Zeile eine Fortsetzung der vorangegangenen Zeile ist.
Zeile 257: Zeile 148:
Zeile 268: Zeile 160:

LDIF kann jedoch nicht nur vollstaendige Datensaetze abbilden, sondern
auch Aenderungen an bestehenden Objekten beschreiben. In diesem Fall wird
nach dem DN in der ersten Zeile des Datensatzes der Modus der
Modifikationen angegeben, gefolgt von einer oder mehreren
Aenderungsanweisungen, die jeweils durch eine Zeile die nur ein '-'
enthaelt, voneinander getrennt werden.

Moechte man z.B. einem Objekt ein Attribut hinzufuegen und den Wert eines
anderen Attributes veraendern, koennte ein LDIF-Datensatz wie folgt
aussehen:
LDIF kann jedoch nicht nur vollstaendige Datensaetze abbilden, sondern auch Aenderungen an bestehenden Objekten beschreiben. In diesem Fall wird nach dem DN in der ersten Zeile des Datensatzes der Modus der Modifikationen angegeben, gefolgt von einer oder mehreren Aenderungsanweisungen, die jeweils durch eine Zeile die nur ein '-' enthaelt, voneinander getrennt werden.

Moechte man z.B. einem Objekt ein Attribut hinzufuegen und den Wert eines anderen Attributes veraendern, koennte ein LDIF-Datensatz wie folgt aussehen:
Zeile 289: Zeile 173:
Zeile 291: Zeile 174:
Zeile 298: Zeile 182:

Weitere Beispiele und Beschreibungen sind in den Manpages unter ldif(5)
zu finden.

Die technischen Spezifikationen von LDIF sind auf
http://tools.ietf.org/html/rfc2849 einsehbar.
Weitere Beispiele und Beschreibungen sind in den Manpages unter ldif(5) zu finden.

Die technischen Spezifikationen von LDIF sind auf http://tools.ietf.org/html/rfc2849 einsehbar.
Zeile 307: Zeile 187:

Die OpenLDAP-Software bietet neben einem Serverprogramm auch diverse
Client-Tools fuer die Kommunikation mit einem LDAP-Server an. Diese Tools
arbeiten mit dem unter 2.1 beschriebenen LDIF.

Die drei wichtigsten Tools sind hier ldapsearch, ldapmodify und ldapdelete.
Diese Tools verwenden eine gemeinsame, allgemeine Konfigurationsdatei
ldap.conf. Genauso wie ldappasswd, mit dessen Hilfe man Passwoerter im
LDAP-Verzeichnis aendern kann.

ACHTUNG: Die LDAP-Tools unter Solaris sind genauso benannt, wie die Open-
LDAP-Tools, unterscheiden sich jedoch in der Benutzung! Die Unterscheide
werden unter Punkt 2.4 genauer beschrieben.
Die OpenLDAP-Software bietet neben einem Serverprogramm auch diverse Client-Tools fuer die Kommunikation mit einem LDAP-Server an. Diese Tools arbeiten mit dem unter 2.1 beschriebenen LDIF.

Die drei wichtigsten Tools sind hier ldapsearch, ldapmodify und ldapdelete. Diese Tools verwenden eine gemeinsame, allgemeine Konfigurationsdatei ldap.conf. Genauso wie ldappasswd, mit dessen Hilfe man Passwoerter im LDAP-Verzeichnis aendern kann.

ACHTUNG: Die LDAP-Tools unter Solaris sind genauso benannt, wie die Open- LDAP-Tools, unterscheiden sich jedoch in der Benutzung! Die Unterscheide werden unter Punkt 2.4 genauer beschrieben.
Zeile 322: Zeile 194:

ldapsearch durchsucht den angegebenen LDAP-Server nach einem definierbaren
Suchfilter und gibt die gefundenen Daten in LDIF zurueck.

Die allgemeinen Verbindungsdaten, wie Serveradresse, eventuelle
Verschluesselung, Basis-DN fuer Suchanfragen usw. entnimmt das Programm
der allgemeinen Konfigurationsdatei ldap.conf. Ist diese Datei nicht
vorhanden oder noch nicht korrekt konfiguriert bzw. wenn man eigene
Verbindungsdaten verwenden moechte, kann man diese auch als Option dem
Programm uebergeben.

Beim folgenden Beispiel wird angenommen, dass keine ldap.conf vorhanden
ist und alle Daten anonym lesbar und unter dem Basis-DN
'dc=informatik,dc=uni-bremen,dc=de' abgelegt sind:
ldapsearch durchsucht den angegebenen LDAP-Server nach einem definierbaren Suchfilter und gibt die gefundenen Daten in LDIF zurueck.

Die allgemeinen Verbindungsdaten, wie Serveradresse, eventuelle Verschluesselung, Basis-DN fuer Suchanfragen usw. entnimmt das Programm der allgemeinen Konfigurationsdatei ldap.conf. Ist diese Datei nicht vorhanden oder noch nicht korrekt konfiguriert bzw. wenn man eigene Verbindungsdaten verwenden moechte, kann man diese auch als Option dem Programm uebergeben.

Beim folgenden Beispiel wird angenommen, dass keine ldap.conf vorhanden ist und alle Daten anonym lesbar und unter dem Basis-DN 'dc=informatik,dc=uni-bremen,dc=de' abgelegt sind:
Zeile 341: Zeile 204:

-x gibt an, dass das 'simple bind' Verfahren zur Authentifizierung am
Server verwendet werden soll. Gibt man diese Option nicht an, wird per
default SASL verwendet. Durch das Weglassen von Authentifizierungsdaten
wird man automatisch als anonymer Benutzer authentifiziert.

Mit der Option -H kann man einen oder mehrere, durch Leerzeichen
getrennte, Server-URIs angeben. Eine weitere Option zum Definieren eines
anzusprechenden Servers ist die Option -h, welche einen Hostnamen oder
eine IP-Adresse erwartet. -H ist den Manpages nach die bevorzugte Methode
Serveradressen anzugeben.

-b (base) definiert den Basis-DN, von dem die Suchanfrage ausgeht,
waehrend -s (scope) angibt, wie tief die Suche in die untergeordneten
Objekte vordringen soll. Die moeglichen Werte fuer -s sind 'base', was
bedeutet, dass nur das Basis-DN-Objekt durchsucht wird, 'one', das alle
direkt dem Basis-DN untergeordneten Objekte einschliesst und 'sub', was
saemtliche Unterverzweigungen in die Suche einschliesst.
Der Defaultwert fuer -s ist in der Regel 'sub'. Der Default fuer -b ist auf
den LDAP-Servern des FB3 'dc=informatik,dc=uni-bremen,dc=de'.

Das Beispielkommando wuerde also saemtliche (anonym lesbaren) Daten, die
im LDAP-Verzeichnis unter der Basis "dc=informatik,dc=uni-bremen,dc=de"
abgelegt sind, ausgeben.

Durch die 'ldaps://'-Schreibweise der Server-URI, wird die Verbindung zum
Server automatisch ueber Port 636 abgwickelt und dabei TLS/SSL
verschluesselt.

Es ist ausserdem moeglich auch die Kommunikation auf Port 389 (ldap://) zu
verschluesseln, indem man sich der 'start_tls'-Funktion bedient. Diese kann
durch die Option -Z (TLS versuchen) bzw. -ZZ (TSL erzwingen) gestartet
werden. Dabei ist zu beachten, dass sich 'ldaps://' und 'start_tls' nicht
kombinieren lassen.
-x gibt an, dass das 'simple bind' Verfahren zur Authentifizierung am Server verwendet werden soll. Gibt man diese Option nicht an, wird per default SASL verwendet. Durch das Weglassen von Authentifizierungsdaten wird man automatisch als anonymer Benutzer authentifiziert.

Mit der Option -H kann man einen oder mehrere, durch Leerzeichen getrennte, Server-URIs angeben. Eine weitere Option zum Definieren eines anzusprechenden Servers ist die Option -h, welche einen Hostnamen oder eine IP-Adresse erwartet. -H ist den Manpages nach die bevorzugte Methode Serveradressen anzugeben.

-b (base) definiert den Basis-DN, von dem die Suchanfrage ausgeht, waehrend -s (scope) angibt, wie tief die Suche in die untergeordneten Objekte vordringen soll. Die moeglichen Werte fuer -s sind 'base', was bedeutet, dass nur das Basis-DN-Objekt durchsucht wird, 'one', das alle direkt dem Basis-DN untergeordneten Objekte einschliesst und 'sub', was saemtliche Unterverzweigungen in die Suche einschliesst. Der Defaultwert fuer -s ist in der Regel 'sub'. Der Default fuer -b ist auf den LDAP-Servern des FB3 'dc=informatik,dc=uni-bremen,dc=de'.

Das Beispielkommando wuerde also saemtliche (anonym lesbaren) Daten, die im LDAP-Verzeichnis unter der Basis "dc=informatik,dc=uni-bremen,dc=de" abgelegt sind, ausgeben.

Durch die 'ldaps://'-Schreibweise der Server-URI, wird die Verbindung zum Server automatisch ueber Port 636 abgwickelt und dabei TLS/SSL verschluesselt.

Es ist ausserdem moeglich auch die Kommunikation auf Port 389 (ldap://) zu verschluesseln, indem man sich der 'start_tls'-Funktion bedient. Diese kann durch die Option -Z (TLS versuchen) bzw. -ZZ (TSL erzwingen) gestartet werden. Dabei ist zu beachten, dass sich 'ldaps://' und 'start_tls' nicht kombinieren lassen.
Zeile 380: Zeile 220:


Bis auf -x und -Z[Z], koennen alle diese Optionen in der allgemeinen
ldap.conf definiert werden. Die Authentifikation per SASL ist bei den
OpenLDAP-Utilities ein unveraenderbarer default. Da die Server kein SASL
unterstuetzen, muss immer (!) ein -x angegeben werden.

Ausserdem ist die Kombination ldap:// und -ZZ ldaps:// vorzuziehen, da
ldaps:// nicht offiziell dokumentiert oder spezifiziert ist. Daher sollte
immer (!) mit ldap:// und -ZZ gearbeitet werden.

Fuer die weiteren Beispiele wird angenommen, dass eine korrekt
konfigurierte ldap.conf vorhanden ist und alle Verbindungsbedingten Daten
automatisch von ldapsearch bezogen werden.

Um das Suchergebnis einzugrenzen, kann man einen Filter angeben, der
mehrere, logisch miteinander verknuepfbare, Bedingungen zulaesst. LDAP-
Suchfilter sind nach RFC 4515 definiert.
(http://www.rfc-editor.org/rfc/rfc4515.txt)

Wird kein Filter angegeben, wird der default-Filter '(objectClass=*)'
angewendet.
Bis auf -x und -Z[Z], koennen alle diese Optionen in der allgemeinen ldap.conf definiert werden. Die Authentifikation per SASL ist bei den OpenLDAP-Utilities ein unveraenderbarer default. Da die Server kein SASL unterstuetzen, muss immer (!) ein -x angegeben werden.

Ausserdem ist die Kombination ldap:// und -ZZ ldaps:// vorzuziehen, da ldaps:// nicht offiziell dokumentiert oder spezifiziert ist. Daher sollte immer (!) mit ldap:// und -ZZ gearbeitet werden.

Fuer die weiteren Beispiele wird angenommen, dass eine korrekt konfigurierte ldap.conf vorhanden ist und alle Verbindungsbedingten Daten automatisch von ldapsearch bezogen werden.

Um das Suchergebnis einzugrenzen, kann man einen Filter angeben, der mehrere, logisch miteinander verknuepfbare, Bedingungen zulaesst. LDAP- Suchfilter sind nach RFC 4515 definiert. (http://www.rfc-editor.org/rfc/rfc4515.txt)

Wird kein Filter angegeben, wird der default-Filter '(objectClass=*)' angewendet.
Zeile 404: Zeile 231:
||(objectClass=posixAccount)||Es werden nur Objekte zurueckgegeben, die die Objektklasse 'posixAccount' enthalten.||
||(!(objectClass=posixAccount))||Es werden nur Objekte zurueckgegeben, die nicht die Objektklasse 'posixAccount' enthalten.||
||(&(objectClass=posixAccount)(!(uid=benutzer)))||Es werden nur Objekte zuruckgegeben, die die Objektklasse 'posixAccount' enthalten und die ein Attribut 'uid' haben, dessen Wert nicht 'benutzer' ist.||
||(|(uid=benutzer)(uid=t*))||Es werden nur Objekte zurueckgegeben, die ein Attribut 'uid' haben, welches den Wert 'benutzer' enthaelt oder mit dem Zeichen 't' beginnt.||
||(&(objectClass=posixAccount)(|(uid=benutzer)(uid=test)))||Es werden nur Objekte zurueckgegeben, die die Objektklasse 'posixAccount' enthalten und ein Attribut 'uid' haben, welches den Wert 'benutzer' oder 'test' enthaelt.||

Filterbedingungen werden nur auf Attribute angewendet, die auch in einem
Objekt vorhanden sind. Enthaelt ein Objekt im Suchbereich ein im Filter
angegebenes Attribut nicht, so wird die ensprechende Bediungung bei diesem
Objekt immer als nicht zutreffend behandelt.

Beispiel: Es sollen alle Objekte mit der Objektklasse 'posixAccount' mit
dem Attribut 'uid=test' ausgegeben werden:
||(objectClass=posixAccount) ||Es werden nur Objekte zurueckgegeben, die die Objektklasse 'posixAccount' enthalten. ||
||(!(objectClass=posixAccount)) ||Es werden nur Objekte zurueckgegeben, die nicht die Objektklasse 'posixAccount' enthalten. ||
||(&(objectClass=posixAccount)(!(uid=benutzer))) ||Es werden nur Objekte zuruckgegeben, die die Objektklasse 'posixAccount' enthalten und die ein Attribut 'uid' haben, dessen Wert nicht 'benutzer' ist. ||
||(|(uid=benutzer)(uid=t*)) ||Es werden nur Objekte zurueckgegeben, die ein Attribut 'uid' haben, welches den Wert 'benutzer' enthaelt oder mit dem Zeichen 't' beginnt. ||
||(&(objectClass=posixAccount)(|(uid=benutzer)(uid=test))) ||Es werden nur Objekte zurueckgegeben, die die Objektklasse 'posixAccount' enthalten und ein Attribut 'uid' haben, welches den Wert 'benutzer' oder 'test' enthaelt. ||




Filterbedingungen werden nur auf Attribute angewendet, die auch in einem Objekt vorhanden sind. Enthaelt ein Objekt im Suchbereich ein im Filter angegebenes Attribut nicht, so wird die ensprechende Bediungung bei diesem Objekt immer als nicht zutreffend behandelt.

Beispiel: Es sollen alle Objekte mit der Objektklasse 'posixAccount' mit dem Attribut 'uid=test' ausgegeben werden:
Zeile 421: Zeile 247:

Sucht man auf diese Weise im LDAP-Verzeichnis, werden jeweils alle
lesbaren Attribute der gefundenen Objekte angezeigt. Moechte man sich nur
bestimmte Attribute anzeigen lassen, kann man diese einfach, nacheinander
und mit Leerzeichen getrennt, hinter dem Filter angeben. Der DN wird aber
in jedem Fall angezeigt und laesst sich nicht ausblenden.

Das folgende Kommado zeigt z.B. von allen gefundenen Objekten jeweils nur
die Attribute 'uid' und 'objectClass' an, sofern diese im jeweiligen Objekt
vorhanden sind.
Sucht man auf diese Weise im LDAP-Verzeichnis, werden jeweils alle lesbaren Attribute der gefundenen Objekte angezeigt. Moechte man sich nur bestimmte Attribute anzeigen lassen, kann man diese einfach, nacheinander und mit Leerzeichen getrennt, hinter dem Filter angeben. Der DN wird aber in jedem Fall angezeigt und laesst sich nicht ausblenden.

Das folgende Kommado zeigt z.B. von allen gefundenen Objekten jeweils nur die Attribute 'uid' und 'objectClass' an, sofern diese im jeweiligen Objekt vorhanden sind.
Zeile 435: Zeile 254:

Zu beachten waere noch, dass jedes Objekt im LDAP-Verzeichnis Attribute
enthaelt, die in der Regel unsichtbar sind und automatisch vom slapd
erzeugt werden, die sogenannten 'operativen Attribute'. Diese operativen
Attribute enthalten unter anderem eine interne, im Verzeichnis einzigartige
ID, den 'Universally Unique Identifier' (UUID), den Zeitpunkt an dem das
Objekt erstellt wurde, den DN des Benutzers, der das Objekt erstellt hat
und einiges mehr.

Die operativen Attribute eines Objektes kann man sich durch ein '+' in der
Attributliste anzeigen lassen.
Zu beachten waere noch, dass jedes Objekt im LDAP-Verzeichnis Attribute enthaelt, die in der Regel unsichtbar sind und automatisch vom slapd erzeugt werden, die sogenannten 'operativen Attribute'. Diese operativen Attribute enthalten unter anderem eine interne, im Verzeichnis einzigartige ID, den 'Universally Unique Identifier' (UUID), den Zeitpunkt an dem das Objekt erstellt wurde, den DN des Benutzers, der das Objekt erstellt hat und einiges mehr.

Die operativen Attribute eines Objektes kann man sich durch ein '+' in der Attributliste anzeigen lassen.
Zeile 450: Zeile 261:

Weitere Beispiele und eine Dokumentation aller verfuegbaren Optionen sind
in der Manpage zu ldapsearch (ldapsearch(1)) zu finden.
Weitere Beispiele und eine Dokumentation aller verfuegbaren Optionen sind in der Manpage zu ldapsearch (ldapsearch(1)) zu finden.
Zeile 456: Zeile 264:

ldapmodify ermoeglicht es, Daten in LDIF in ein LDAP-Verzeichnis
einzugeben. Das Tool verwendet dabei dieselben Verbindungsoptionen wie
ldapsearch bzw. dieselbe Konfigurationsdatei ldap.conf.

Mit der Option -f kann man den Pfad zu einer Datei uebergeben, die LDIF-
Daten enthaelt. Ansonsten erwartet ldapmodify eine Eingabe von Daten ueber
die Standardeingabe.

Hat man mehrere Datensaetze hintereinander in einer Datei abgelegt, kann
die Option -c sehr nuetzlich sein. Sie bewirkt, dass fehlerhafte
Datensaetze uebersprungen werden und beim naechsten weitergemacht wird.
Gibt man diese Option nicht an, bricht das Programm die laufende Operation
ab, wenn die LDIF-Daten fehlerhaft sind, oder der Server einen Fehler
zurueckgibt, z.B. weil ein Datensatz bereits vorhanden ist.

Standardmaessig erwartet ldapmodify Modifikationsanweisungen in LDIF. Mit
der Option -a kann man jedoch auch vollstaendige Datensaetze in das LDAP-
Verzeichnis einlesen.


Moechte man z.B. folgenden Datensatz in das Verzeichnis einfuegen, legt man
diesen am besten in einer Datei ab und fuehrt das darauf folgende Kommando
aus:
ldapmodify ermoeglicht es, Daten in LDIF in ein LDAP-Verzeichnis einzugeben. Das Tool verwendet dabei dieselben Verbindungsoptionen wie ldapsearch bzw. dieselbe Konfigurationsdatei ldap.conf.

Mit der Option -f kann man den Pfad zu einer Datei uebergeben, die LDIF- Daten enthaelt. Ansonsten erwartet ldapmodify eine Eingabe von Daten ueber die Standardeingabe.

Hat man mehrere Datensaetze hintereinander in einer Datei abgelegt, kann die Option -c sehr nuetzlich sein. Sie bewirkt, dass fehlerhafte Datensaetze uebersprungen werden und beim naechsten weitergemacht wird. Gibt man diese Option nicht an, bricht das Programm die laufende Operation ab, wenn die LDIF-Daten fehlerhaft sind, oder der Server einen Fehler zurueckgibt, z.B. weil ein Datensatz bereits vorhanden ist.

Standardmaessig erwartet ldapmodify Modifikationsanweisungen in LDIF. Mit der Option -a kann man jedoch auch vollstaendige Datensaetze in das LDAP- Verzeichnis einlesen.

Moechte man z.B. folgenden Datensatz in das Verzeichnis einfuegen, legt man diesen am besten in einer Datei ab und fuehrt das darauf folgende Kommando aus:
Zeile 482: Zeile 275:
Zeile 489: Zeile 283:
Zeile 493: Zeile 286:
Zeile 497: Zeile 289:
Zeile 503: Zeile 296:
Zeile 507: Zeile 299:

Da anonyme Benutzer normalerweise keine Schreibrechte im LDAP-Verzeichnis
haben, muesste der Server diese Schreibvorgaenge jedoch mit einer
Fehlermedung quittieren. Um sich am Server zu authentifizieren, kann man
die Optionen -D und -W/-w verwenden.

Mit -D wird ldapmodify der DN eines Accountobjektes uebergeben, welches
idealerweise die entsprechenden Berechtigungen hat, die gewuenschten
Schreiboperationen durchfuehren zu koennen. -w erwartet, dass das Passwort
des Accountobjektes in Klartext in der Kommandozeile uebergeben wird. Dies
ist z.B. fuer skriptgesteuerte Aenderungen am LDAP-Verzeichnis nuetzlich.
Durch die Benutzung von -W kann man das Passwort aber auch in einen Prompt
eingeben.

-D und -W/-w verwenden die Methode 'simple auth' und sollten daher in
Verbindung mit TLS/SSL angewendet werden.
Da anonyme Benutzer normalerweise keine Schreibrechte im LDAP-Verzeichnis haben, muesste der Server diese Schreibvorgaenge jedoch mit einer Fehlermedung quittieren. Um sich am Server zu authentifizieren, kann man die Optionen -D und -W/-w verwenden.

Mit -D wird ldapmodify der DN eines Accountobjektes uebergeben, welches idealerweise die entsprechenden Berechtigungen hat, die gewuenschten Schreiboperationen durchfuehren zu koennen. -w erwartet, dass das Passwort des Accountobjektes in Klartext in der Kommandozeile uebergeben wird. Dies ist z.B. fuer skriptgesteuerte Aenderungen am LDAP-Verzeichnis nuetzlich. Durch die Benutzung von -W kann man das Passwort aber auch in einen Prompt eingeben.

-D und -W/-w verwenden die Methode 'simple auth' und sollten daher in Verbindung mit TLS/SSL angewendet werden.
Zeile 527: Zeile 308:
Zeile 533: Zeile 313:

Weitere Beispiele und eine Dokumentation aller verfuegbaren Optionen sind
in der Manpage zu ldapmodify (ldapmodify(1)) einsehbar.
Weitere Beispiele und eine Dokumentation aller verfuegbaren Optionen sind in der Manpage zu ldapmodify (ldapmodify(1)) einsehbar.
Zeile 539: Zeile 316:

Im Gegensatz zu ldapsearch und ldapmodify arbeitet ldapdelete nicht mit
LDIF, sondern mit einfachen DNs. Es gelten dieselben Optionen fuer
Verbindungen zum Server wie bei ldapsearch und ldapmodify.

Wie ldapmodify verfuegt ldapdelete ueber eine Option -c, die bewirkt, dass
Fehler zwar gemeldet werden, das Programm aber bis zum Ende weiterlaeuft.

Als Eingabe wird ein DN oder eine durch Zeilenumbrueche getrennte Liste
von DNs erwartet, die aus dem LDAP-Verzeichnis entfernt werden sollen.

Als Quelle dient entweder die Kommandozeile, die Standardeingabe, oder eine
Datei (-f).

Auch hier ist zu beachten, dass anonyme Benutzer in der Regel nicht die
Berechtigung haben, Daten im LDAP-Verzeichnis zu veraendern. Darum ist es,
wie bei ldapmodify, noetig sich am Server zu authentifizieren.


Will man z.B. den im ldapmodify-Beispiel erstellten Datensatz wieder aus
dem Verzeichnis entfernen, kann man folgendes Kommando anwenden:
Im Gegensatz zu ldapsearch und ldapmodify arbeitet ldapdelete nicht mit LDIF, sondern mit einfachen DNs. Es gelten dieselben Optionen fuer Verbindungen zum Server wie bei ldapsearch und ldapmodify.

Wie ldapmodify verfuegt ldapdelete ueber eine Option -c, die bewirkt, dass Fehler zwar gemeldet werden, das Programm aber bis zum Ende weiterlaeuft.

Als Eingabe wird ein DN oder eine durch Zeilenumbrueche getrennte Liste von DNs erwartet, die aus dem LDAP-Verzeichnis entfernt werden sollen.

Als Quelle dient entweder die Kommandozeile, die Standardeingabe, oder eine Datei (-f).

Auch hier ist zu beachten, dass anonyme Benutzer in der Regel nicht die Berechtigung haben, Daten im LDAP-Verzeichnis zu veraendern. Darum ist es, wie bei ldapmodify, noetig sich am Server zu authentifizieren.

Will man z.B. den im ldapmodify-Beispiel erstellten Datensatz wieder aus dem Verzeichnis entfernen, kann man folgendes Kommando anwenden:
Zeile 564: Zeile 331:

Weitere Beispiele und eine Dokumentation aller verfuegbaren Optionen sind
in der Manpage zu ldapdelete (ldapdelete(1)) einsehbar.
Weitere Beispiele und eine Dokumentation aller verfuegbaren Optionen sind in der Manpage zu ldapdelete (ldapdelete(1)) einsehbar.
Zeile 570: Zeile 334:

ldappasswd nutzt dieselben Verbindungsoptionen wie alle anderen OpenLDAP-
Utilities. Um Passwoerter zu aendern, muss man dem Tool
Authentifizierungsdaten fuer einen LDAP-Benutzer mit entsprechenden
Schreibrechten uebergeben, sowie den Accountnamen, dessen Passwoer
geaendert werden soll.


Um z.B. als Benutzer 'testuser' sein eigenes Passwort zu aendern, kann
man folgendes Kommando verwenden:
ldappasswd nutzt dieselben Verbindungsoptionen wie alle anderen OpenLDAP- Utilities. Um Passwoerter zu aendern, muss man dem Tool Authentifizierungsdaten fuer einen LDAP-Benutzer mit entsprechenden Schreibrechten uebergeben, sowie den Accountnamen, dessen Passwoer geaendert werden soll.

Um z.B. als Benutzer 'testuser' sein eigenes Passwort zu aendern, kann man folgendes Kommando verwenden:
Zeile 584: Zeile 341:

Da keine weiteren Optionen uebergeben wurden, erstellt der LDAP-Server
automatisch ein zufaelliges Passwort und gibt dieses danach aus, sofern es
erfolgreich ins Verzeichnis geschrieben werden konnte.

Moechte man ein eigenes Passwort setzen, kann man dies mit den Optionen
-s bzw. -S angeben. -s erwartet das neue Passwort in der Kommandozeile,
waehrend -S einen Prompt zur Verfuegung stellt.
Da keine weiteren Optionen uebergeben wurden, erstellt der LDAP-Server automatisch ein zufaelliges Passwort und gibt dieses danach aus, sofern es erfolgreich ins Verzeichnis geschrieben werden konnte.

Moechte man ein eigenes Passwort setzen, kann man dies mit den Optionen -s bzw. -S angeben. -s erwartet das neue Passwort in der Kommandozeile, waehrend -S einen Prompt zur Verfuegung stellt.
Zeile 596: Zeile 348:
Zeile 602: Zeile 353:

Um das Passwort eines Benutzers zu aendern, der nicht dem entspricht, als
der man sich mit -D am Server authentifiziert, kann man einfach den
DN des jeweiligen Benutzers uebergeben.
Um das Passwort eines Benutzers zu aendern, der nicht dem entspricht, als der man sich mit -D am Server authentifiziert, kann man einfach den DN des jeweiligen Benutzers uebergeben.
Zeile 608: Zeile 356:
Zeile 611: Zeile 360:

Ob und wie per ldappasswd erstellte Passwoerter gehasht werden, wird auf
der Serverseite festgelegt.
Ob und wie per ldappasswd erstellte Passwoerter gehasht werden, wird auf der Serverseite festgelegt.
Zeile 617: Zeile 363:

Wie unter Punkt 2.3 beschrieben, haben die LDAP-Tools unter Solaris die
selben Namen, wie die OpenLDAP-Tools und sind daher leicht zu verwechseln.
Die grundlegende Bedienung ist zwar die selbe, wie bei den OpenLDAP-Tools,
jedoch nicht voellig identisch.

So erwarten die Sun-Tools z.B. immer einen Base-DN (-b) und einen
Suchfilter. Beispiel:
Wie unter Punkt 2.3 beschrieben, haben die LDAP-Tools unter Solaris die selben Namen, wie die OpenLDAP-Tools und sind daher leicht zu verwechseln. Die grundlegende Bedienung ist zwar die selbe, wie bei den OpenLDAP-Tools, jedoch nicht voellig identisch.

So erwarten die Sun-Tools z.B. immer einen Base-DN (-b) und einen Suchfilter. Beispiel:
Zeile 629: Zeile 370:

Ausserdem muss bei einer SSL/TLS-Verbindung anscheinend immer der Pfad zum
Zertifikat angegeben werden (-P).
Ausserdem muss bei einer SSL/TLS-Verbindung anscheinend immer der Pfad zum Zertifikat angegeben werden (-P).
Zeile 636: Zeile 375:
Zeile 638: Zeile 376:

Perl bietet mit der Bibliothek Net::LDAP eine komfortable Moeglichkeit
eine Verbindung zu einem LDAP-Server herzustellen und Datensaetze aus
ihm auszulesen und zu veraendern.

Dabei ist es sowohl moeglich Daten in LDIF zu importieren/exportieren,
als auch ueber entsprechende Methoden Daten in oder aus Variablen zu
lesen/schreiben.

Die benoetigten Dateien und eine ausfuehrliche Dokumentation sind unter
http://ldap.perl.org/ zu finden.

Die meisten Linux Distributionen sollten diese Lib in ihren Standard-
Repositories haben. (z.B. perl-LDAP unter Fedora 7 oder libnet-ldap-perl
unter Debian 4)

Da einige der ueberarbeiteten und neuen Verwaltungsskripte auf diese
Bibliothek zurueckgreifen (mehr unter Abschnitt 5.), sollte diese zumindest
auf allen Systemen, von denen aus administrative Aufgaben erfuellt werden,
installiert sein.
Perl bietet mit der Bibliothek Net::LDAP eine komfortable Moeglichkeit eine Verbindung zu einem LDAP-Server herzustellen und Datensaetze aus ihm auszulesen und zu veraendern.

Dabei ist es sowohl moeglich Daten in LDIF zu importieren/exportieren, als auch ueber entsprechende Methoden Daten in oder aus Variablen zu lesen/schreiben.

Die benoetigten Dateien und eine ausfuehrliche Dokumentation sind unter http://ldap.perl.org/ zu finden.

Die meisten Linux Distributionen sollten diese Lib in ihren Standard- Repositories haben. (z.B. perl-LDAP unter Fedora 7 oder libnet-ldap-perl unter Debian 4)

Da einige der ueberarbeiteten und neuen Verwaltungsskripte auf diese Bibliothek zurueckgreifen (mehr unter Abschnitt 5.), sollte diese zumindest auf allen Systemen, von denen aus administrative Aufgaben erfuellt werden, installiert sein.
Zeile 661: Zeile 387:

Mit Webservern, die LDAP unterstuetzen, kann auch .htaccess
Authentifizierungsdaten von einem LDAP-Server beziehen.

Wichtige Voraussetzung bei Apache 2.2 die Einbindung der Module
"mod_ldap" und "mod_authnz_ldap"in der httpd.conf:
Mit Webservern, die LDAP unterstuetzen, kann auch .htaccess Authentifizierungsdaten von einem LDAP-Server beziehen.

Wichtige Voraussetzung bei Apache 2.2 die Einbindung der Module "mod_ldap" und "mod_authnz_ldap"in der httpd.conf:
Zeile 672: Zeile 395:

und der folgende globale Eintrag n der httpd-ssl.conf: 
und der folgende globale Eintrag n der httpd-ssl.conf:
Zeile 678: Zeile 400:

Im nachfolgenden ".htaccess" Beispiel koennen sich nur Mitglieder der Gruppe
fb3t mit ihrem unix-Passwort anmelden:
Im nachfolgenden ".htaccess" Beispiel koennen sich nur Mitglieder der Gruppe fb3t mit ihrem unix-Passwort anmelden:
Zeile 695: Zeile 415:

Eine ausfuehrliche Dokumentation der Apache-Module 'mod_ldap' und
'mod_authnz_ldap' koennen der offiziellen Apache-Dokumentation entnommen
werden.

Eine ausfuehrliche Dokumentation der Apache-Module 'mod_ldap' und 'mod_authnz_ldap' koennen der offiziellen Apache-Dokumentation entnommen werden.
Zeile 703: Zeile 418:

Als Server wird der slapd (Standalone LDAP Deamon) von OpenLDAP, mit einem
Berkeley-DB-Backend, unter Solaris 10 verwendet.
Als Server wird der slapd (Standalone LDAP Deamon) von OpenLDAP, mit einem Berkeley-DB-Backend, unter Solaris 10 verwendet.
Zeile 709: Zeile 422:
ldap-master ist dabei der Masterserver von dem die Replicaserver ldap1,
ldap2 und ldap3 ihre Daten beziehen. Schreiboperationen sind nur auf dem
Masterserver erlaubt. Versucht man schreibend auf einen der Replicaserver
zuzugreifen, antwortet dieser mir einem Verweis (referral) auf ldap-master.

Die Synchronisation der Replicaserver erfolgt push-basiert, was bedeutet,
dass der Masterserver alle Schreiboperationen ohne Verzoegerung an die
Replicaserver weitergibt.

Replicaserver dienen dem Zweck der Daten- und Ausfallsicherheit, sowie der
Lastverteilung. So koennen z.B. in der ldap.conf mehrere LDAP-Server
angegeben werden, die der Reihe nach angesprochen werden, falls einer nicht
erreichbar ist. Alternativ kann man als Serveradresse ldapfarm verwenden,
von der aus alle LDAP-Anfragen gleichmaessig auf die Server verteil werden.
ldap-master ist dabei der Masterserver von dem die Replicaserver ldap1, ldap2 und ldap3 ihre Daten beziehen. Schreiboperationen sind nur auf dem Masterserver erlaubt. Versucht man schreibend auf einen der Replicaserver zuzugreifen, antwortet dieser mir einem Verweis (referral) auf ldap-master.

Die Synchronisation der Replicaserver erfolgt push-basiert, was bedeutet, dass der Masterserver alle Schreiboperationen ohne Verzoegerung an die Replicaserver weitergibt.

Replicaserver dienen dem Zweck der Daten- und Ausfallsicherheit, sowie der Lastverteilung. So koennen z.B. in der ldap.conf mehrere LDAP-Server angegeben werden, die der Reihe nach angesprochen werden, falls einer nicht erreichbar ist. Alternativ kann man als Serveradresse ldapfarm verwenden, von der aus alle LDAP-Anfragen gleichmaessig auf die Server verteil werden.
Zeile 726: Zeile 429:

Wie in Abschnitt 1. beschrieben, kann innerhalb eines Objektes mit dem
Attribut 'objectClass' festgelegt werden, welche Attribute das jeweilige
Objekt aufnehmen kann. Die verschiedenen Objektklassen und deren
Attribute wiederum werden serverseitig in sogenannten Schemas definiert.

In diesem Abschnitt wird nur grob angesprochen, welche Schemas auf den
Servern eingebunden sind und was diese enthalten.
Wie in Abschnitt 1. beschrieben, kann innerhalb eines Objektes mit dem Attribut 'objectClass' festgelegt werden, welche Attribute das jeweilige Objekt aufnehmen kann. Die verschiedenen Objektklassen und deren Attribute wiederum werden serverseitig in sogenannten Schemas definiert.

In diesem Abschnitt wird nur grob angesprochen, welche Schemas auf den Servern eingebunden sind und was diese enthalten.
Zeile 738: Zeile 435:
Die Kernschemas, die grundlegende Objektklassen und Attribute nach dem
X.500-Standard zur Verfuegung stellen.
Standardmaessig im OpenLDAP-Paket enthalten.
Die Kernschemas, die grundlegende Objektklassen und Attribute nach dem X.500-Standard zur Verfuegung stellen. Standardmaessig im OpenLDAP-Paket enthalten.
Zeile 744: Zeile 439:
Das NIS-Schema stellt Objektklassen und Attribute zur Abbildung von UNIX-
Accounts, Gruppen, Automount-Maps, usw. im Verzeichnisdienst zur Verfuegung.
Im OpenLDAP-Paket enthalten.
Das NIS-Schema stellt Objektklassen und Attribute zur Abbildung von UNIX- Accounts, Gruppen, Automount-Maps, usw. im Verzeichnisdienst zur Verfuegung. Im OpenLDAP-Paket enthalten.
Zeile 750: Zeile 443:
Das Samba-Schema ermoeglicht es, einen Samba-PDC an den LDAP-Service
anzubinden, und die zusaetzlichen Accountdaten in UNIX-Accountobjekten
einzubetten.
Von samba.org bezogen, bzw. im Samba-Paket enthalten.
Das Samba-Schema ermoeglicht es, einen Samba-PDC an den LDAP-Service anzubinden, und die zusaetzlichen Accountdaten in UNIX-Accountobjekten einzubetten. Von samba.org bezogen, bzw. im Samba-Paket enthalten.
Zeile 757: Zeile 447:
Ermoeglicht die Implementierung von einheitlichen Automount-Maps, die mit
nur geringem Aufwand plattformuebergreifend anwendbar sind.
Im OpenLDAP-Paket enthalten.
Ermoeglicht die Implementierung von einheitlichen Automount-Maps, die mit nur geringem Aufwand plattformuebergreifend anwendbar sind. Im OpenLDAP-Paket enthalten.
Zeile 763: Zeile 451:
Das userdb-Schema ist ein selbsterstelltes Schema, welches auf das NIS-
Schema aufbaut und Attribute aus der Userdatenbank /home/userdb/data/user
ergaenzt, die nicht im NIS-Schema enthalten sind.
Das userdb-Schema ist ein selbsterstelltes Schema, welches auf das NIS- Schema aufbaut und Attribute aus der Userdatenbank /home/userdb/data/user ergaenzt, die nicht im NIS-Schema enthalten sind.
Zeile 769: Zeile 455:
Stellt Objektklassen und Attribute zur Verwaltung der Druckerquota bereit.
http://www.pykota.com/
Stellt Objektklassen und Attribute zur Verwaltung der Druckerquota bereit. http://www.pykota.com/
Zeile 774: Zeile 458:

Wie in Abschnitt 1. erwaehnt, ist die Datenbank in einer hierarchischen
Baumstruktur organisiert. Die Wurzelebene dieser Struktur enthaelt ein
virtuelles Objekt mit der Klasse 'OpenLDAProotDSE', welches aus der
Konfiguration des Servers erstellt wird.

Ausserdem enthaelt das rootDSE-Objekt Informationen ueber den
Namenskontext der Datenbank, die verwendeten Schemas und die
unterstuetzten Zugriffs- und Kontollmethoden.

Der DN des rootDSE-Objektes ist "", also ein leerer String. Eine Liste
der eingebundenen Schemas ist unter dem DN "cn=subschemas" zu finden,
waehrend die Konfiguration des Servers unter "cn=config" angesprochen
werden kann.


Das OpenLDAProotDSE-Objekt eines LDAP-Servers kann wie folgt ausgelesen
werden:
Wie in Abschnitt 1. erwaehnt, ist die Datenbank in einer hierarchischen Baumstruktur organisiert. Die Wurzelebene dieser Struktur enthaelt ein virtuelles Objekt mit der Klasse 'OpenLDAProotDSE', welches aus der Konfiguration des Servers erstellt wird.

Ausserdem enthaelt das rootDSE-Objekt Informationen ueber den Namenskontext der Datenbank, die verwendeten Schemas und die unterstuetzten Zugriffs- und Kontollmethoden.

Der DN des rootDSE-Objektes ist "", also ein leerer String. Eine Liste der eingebundenen Schemas ist unter dem DN "cn=subschemas" zu finden, waehrend die Konfiguration des Servers unter "cn=config" angesprochen werden kann.

Das OpenLDAProotDSE-Objekt eines LDAP-Servers kann wie folgt ausgelesen werden:
Zeile 796: Zeile 469:

Da fast alle Inhalte des rootDSE-Objektes zu den operativen Attributen
gehoeren, muss man das '+' im Bereich der Attributliste angeben, um diese
sehen zu koennen.

Die Basis fuer die eigentlichen Nutzdaten des LDAP-Server kann man dem
Attribut 'namingContexts' entnehmen. Da ein LDAP-Server mehr als nur eine
Datenbasis zur Verfuegung stellen kann, kann dieses Attribut auch mehrere
Werte enthalten.

Die Daten unter dem DN "dc=informatik,dc=uni-bremen,dc=de" sind zwecks
Strukturierung und Administrierbarkeit unter anderem in die folgenden
Organisationseinheiten (ou = organizationalUnit) unterteilt:
Da fast alle Inhalte des rootDSE-Objektes zu den operativen Attributen gehoeren, muss man das '+' im Bereich der Attributliste angeben, um diese sehen zu koennen.

Die Basis fuer die eigentlichen Nutzdaten des LDAP-Server kann man dem Attribut 'namingContexts' entnehmen. Da ein LDAP-Server mehr als nur eine Datenbasis zur Verfuegung stellen kann, kann dieses Attribut auch mehrere Werte enthalten.

Die Daten unter dem DN "dc=informatik,dc=uni-bremen,dc=de" sind zwecks Strukturierung und Administrierbarkeit unter anderem in die folgenden Organisationseinheiten (ou = organizationalUnit) unterteilt:
Zeile 811: Zeile 476:

Die Objekte fuer Benutzeraccounts sind unter dem DN
"ou=People,dc=informatik,dc=uni-bremen,dc=de" zu finden und aufbauend auf
das NIS-Schema als UNIX-Account angelegt. Sie enthalten zusaetzlich noch
Samba-Attribute, welche es einem Samba-Server ermoeglichen sie als Samba-
Domainaccounts wahrzunehmen. Ausserdem sind Attribute zur Einbindung der
Benutzerdatenbank des FB3 enthalten.
Die Objekte fuer Benutzeraccounts sind unter dem DN "ou=People,dc=informatik,dc=uni-bremen,dc=de" zu finden und aufbauend auf das NIS-Schema als UNIX-Account angelegt. Sie enthalten zusaetzlich noch Samba-Attribute, welche es einem Samba-Server ermoeglichen sie als Samba- Domainaccounts wahrzunehmen. Ausserdem sind Attribute zur Einbindung der Benutzerdatenbank des FB3 enthalten.
Zeile 820: Zeile 479:
Zeile 888: Zeile 548:
Zeile 891: Zeile 550:
Zum NIS-Schema gehoeren auch die Objektklassen 'posixAccount' und
'shadowAccount', die jeweils einen Eintrag in der /etc/passwd und der
/etc/shadow repraesentieren.

Die Objektklasse 'UDBentry' wird im selbst erstellten userdb-Schema
definiert und ergaenzt das NIS-Schema um die fuer die Userdatenbank
des FB3 benoetigten Attribute.

sambaSamAccount gehoert zum Samba-Schema und ergaenzt Attribute, die ein
Samba-Server benoetigt, um ein solches Objekt als Samba-Account
mitverwenden zu koennen.
Zum NIS-Schema gehoeren auch die Objektklassen 'posixAccount' und 'shadowAccount', die jeweils einen Eintrag in der /etc/passwd und der /etc/shadow repraesentieren.

Die Objektklasse 'UDBentry' wird im selbst erstellten userdb-Schema definiert und ergaenzt das NIS-Schema um die fuer die Userdatenbank des FB3 benoetigten Attribute.

sambaSamAccount gehoert zum Samba-Schema und ergaenzt Attribute, die ein Samba-Server benoetigt, um ein solches Objekt als Samba-Account mitverwenden zu koennen.
Zeile 904: Zeile 557:

Gruppen sind unter der Organisationseinheit ou=Group untergebracht und wie
bei den Accounts nach dem NIS-Schema als UNIX-Gruppen deklariert. Auch sie
enthalten zusaetzlich Samba-Attribute, welche es einem Samba-Server
ermoeglicht sie sie als Domaingruppen zu mappen.
Gruppen sind unter der Organisationseinheit ou=Group untergebracht und wie bei den Accounts nach dem NIS-Schema als UNIX-Gruppen deklariert. Auch sie enthalten zusaetzlich Samba-Attribute, welche es einem Samba-Server ermoeglicht sie sie als Domaingruppen zu mappen.
Zeile 911: Zeile 560:
Zeile 935: Zeile 585:
Zeile 938: Zeile 587:
Die Objektklasse 'posixGroup' ist Teil des NIS-Schemas und repraesentiert
einen Eintrag in der /etc/group, waehrend 'sambaGroupMapping' aus dem
Samba-Schema es einem Samba-Server erlaubt, diese Gruppe als Samba-
Domaingruppe zu verwenden.
Die Objektklasse 'posixGroup' ist Teil des NIS-Schemas und repraesentiert einen Eintrag in der /etc/group, waehrend 'sambaGroupMapping' aus dem Samba-Schema es einem Samba-Server erlaubt, diese Gruppe als Samba- Domaingruppe zu verwenden.
Zeile 944: Zeile 590:

Automount-Maps, fuer den Einsatz mit autofs, sind unter dem Objekt mit dem
DN "ou=Mounts,dc=informatik,dc=uni-bremen,dc=de" abgelegt, waehrend die
Mastermap den DN "ou=auto.master,dc=informatik,dc=uni-bremen,dc=de" traegt.

Eine Mountmap, wie z.B. fuer die Homeverzeichnisse, ist wiederum eine
Organisationseinheit, die ou=Mounts untergeordnet ist. Die Mastermap
verweist, wie bei dem dateigestuetzten Aequivalent, auf die jeweiligen Maps
in ou=Mounts.

Die Verwendung einer LDAP-gestuetzten Mastermap ist optional. Die
Verwendung von Automount-Maps wird im Abschnitt fuer die Einrichtung von
Clients weiter erlaeutert.
Automount-Maps, fuer den Einsatz mit autofs, sind unter dem Objekt mit dem DN "ou=Mounts,dc=informatik,dc=uni-bremen,dc=de" abgelegt, waehrend die Mastermap den DN "ou=auto.master,dc=informatik,dc=uni-bremen,dc=de" traegt.

Eine Mountmap, wie z.B. fuer die Homeverzeichnisse, ist wiederum eine Organisationseinheit, die ou=Mounts untergeordnet ist. Die Mastermap verweist, wie bei dem dateigestuetzten Aequivalent, auf die jeweiligen Maps in ou=Mounts.

Die Verwendung einer LDAP-gestuetzten Mastermap ist optional. Die Verwendung von Automount-Maps wird im Abschnitt fuer die Einrichtung von Clients weiter erlaeutert.
Zeile 959: Zeile 597:
Zeile 965: Zeile 604:

Ein Eintrag in der Mastermap ist identisch mit einem solchen Mountpoint-
Eintrag. Im Attribut 'automountInformation' wird dabei auf die
entsprechende Automount-Map verwiesen. Dieser Verweis kann entweder eine
lokale Datei sein, die natuerlich auf jedem System, das diese Map
verwenden soll, vorhanden sein muss, oder das Schluesselwort 'ldap' gefolgt
von einem Doppelpunkt (:) und dem DN der gewuenschten Map im LDAP-
Verzeichnis.

Der Eintrag fuer die Homedirectories in der auto.master Map koennte z.B.
wie folgt aussehen:
Ein Eintrag in der Mastermap ist identisch mit einem solchen Mountpoint- Eintrag. Im Attribut 'automountInformation' wird dabei auf die entsprechende Automount-Map verwiesen. Dieser Verweis kann entweder eine lokale Datei sein, die natuerlich auf jedem System, das diese Map verwenden soll, vorhanden sein muss, oder das Schluesselwort 'ldap' gefolgt von einem Doppelpunkt (:) und dem DN der gewuenschten Map im LDAP- Verzeichnis.

Der Eintrag fuer die Homedirectories in der auto.master Map koennte z.B. wie folgt aussehen:
Zeile 984: Zeile 615:
Zeile 986: Zeile 616:

Die Netgroups, die unter anderem fuer den hostbasierten SSH-Zugriff
verwendet werden, sind in der Organisationseinheit Netgroup untergebracht,
und auch sie bauen auf dem NIS-Schema auf.

Da es bei LDAP, genausow wie bei NIS, zu Problemen kommen kann, wenn eine
Netgroup zu viele Mitglieder hat, gibt es auch hier die Moeglichkeit eine
Gruppe in mehrere Untergruppen aufzuspalten.
Die Netgroups, die unter anderem fuer den hostbasierten SSH-Zugriff verwendet werden, sind in der Organisationseinheit Netgroup untergebracht, und auch sie bauen auf dem NIS-Schema auf.

Da es bei LDAP, genausow wie bei NIS, zu Problemen kommen kann, wenn eine Netgroup zu viele Mitglieder hat, gibt es auch hier die Moeglichkeit eine Gruppe in mehrere Untergruppen aufzuspalten.
Zeile 997: Zeile 621:
Zeile 1018: Zeile 643:

Zeile 1021: Zeile 644:

Dieser Abschnitt beschreibt, wie man Clients verschiedener Plattformen so
einrichtet, dass Benutzer sich mit LDAP-Accounts an ihnen anmelden koennen.

Skripte, die die Konfiguration der wichtigsten Plattformen automatisch
abwickeln, liegen unter /home/ldap bereit.
Dieser Abschnitt beschreibt, wie man Clients verschiedener Plattformen so einrichtet, dass Benutzer sich mit LDAP-Accounts an ihnen anmelden koennen.

Skripte, die die Konfiguration der wichtigsten Plattformen automatisch abwickeln, liegen unter /home/ldap bereit.
Zeile 1029: Zeile 649:

Die meisten Linux-Distibutionen pflegen die OpenLDAP-Software in ihren
Standardrepositories, was das Einrichten von Linux-Clients fuer einen
OpenLDAP-Server sehr erleichtert.

Die Pfade zu den Konfigurationsdateien koennen sich dabei in den
verschiedenen Distributionen voneinander unterscheiden, doch der Aufbau ist
bei allen derselbe.

Zu beachten ist, dass es meistens mindestens zwei Konfigurationsdateien
fuer LDAP gibt. Einmal ist da die allgemein fuer die OpenLDAP-Tools
geltende und dann noch mindestens eine fuer nsswitch und PAM. Ausfuehrliche
Dokumentationen fuer diese Konfigurationsdateien koennen in den jeweiligen
Manpages eingesehen werden.

Auf die Konfiguration der Authentifizierung unter bestimmten Distributionen
wird in den folgenden Unterpunkten genauer eingegangen. Die allgemeine
Konfiguration sollte jedoch ueberall etwa so aussehen, um mit den laufenden
LDAP-Servern zu arbeiten:
Die meisten Linux-Distibutionen pflegen die OpenLDAP-Software in ihren Standardrepositories, was das Einrichten von Linux-Clients fuer einen OpenLDAP-Server sehr erleichtert.

Die Pfade zu den Konfigurationsdateien koennen sich dabei in den verschiedenen Distributionen voneinander unterscheiden, doch der Aufbau ist bei allen derselbe.

Zu beachten ist, dass es meistens mindestens zwei Konfigurationsdateien fuer LDAP gibt. Einmal ist da die allgemein fuer die OpenLDAP-Tools geltende und dann noch mindestens eine fuer nsswitch und PAM. Ausfuehrliche Dokumentationen fuer diese Konfigurationsdateien koennen in den jeweiligen Manpages eingesehen werden.

Auf die Konfiguration der Authentifizierung unter bestimmten Distributionen wird in den folgenden Unterpunkten genauer eingegangen. Die allgemeine Konfiguration sollte jedoch ueberall etwa so aussehen, um mit den laufenden LDAP-Servern zu arbeiten:
Zeile 1050: Zeile 658:
Zeile 1053: Zeile 662:
uri ldaps://ldapfarm.informatik.uni-bremen.de/ uri     ldaps://ldapfarm.informatik.uni-bremen.de/
Zeile 1056: Zeile 665:
base dc=informatik,dc=uni-bremen,dc=de base    dc=informatik,dc=uni-bremen,dc=de
Zeile 1063: Zeile 672:

Fuer eine sichere TLS/SSL-Verbindung muss das root-CA-Zertifikate der
Zertifizierngsstelle eingebunden werden. (www.ca.informatik.uni-bremen.de)
Dabei ist zu beachten, dass bei TLS/SSL gesicherten Verbindungen immer der
vollstaendige Domainname des jeweiligen Servers verwendet werden muss!

Moechte man die Serverzertifikate nicht verifizieren, kann man die Option
'tls_reqcert' auf 'never' setzen.
Fuer eine sichere TLS/SSL-Verbindung muss das root-CA-Zertifikate der Zertifizierngsstelle eingebunden werden. (www.ca.informatik.uni-bremen.de) Dabei ist zu beachten, dass bei TLS/SSL gesicherten Verbindungen immer der vollstaendige Domainname des jeweiligen Servers verwendet werden muss!

Moechte man die Serverzertifikate nicht verifizieren, kann man die Option 'tls_reqcert' auf 'never' setzen.
Zeile 1074: Zeile 677:

Folgende Packages werden unter Fedora 7 fuer die Einrichtung einer
Benutzerauthentifizierung per LDAP benoetigt:
Folgende Packages werden unter Fedora 7 fuer die Einrichtung einer Benutzerauthentifizierung per LDAP benoetigt:
Zeile 1085: Zeile 686:
Das Paket nss_ldap wird ueber die Datei /etc/ldap.conf konfiguriert,
waehrend die Konfigurationsdatei der openldap-client-Tools unter
/etc/openldap/ldap.conf zu finden ist.
Das Paket nss_ldap wird ueber die Datei /etc/ldap.conf konfiguriert, waehrend die Konfigurationsdatei der openldap-client-Tools unter /etc/openldap/ldap.conf zu finden ist.
Zeile 1091: Zeile 689:

Um eine Benutzerauthentifikation per LDAP zu ermoeglichen und die von den
nss-Services benoetigten Daten aus LDAP zu verwenden, sind die folgenden
Dateien relevant:
Um eine Benutzerauthentifikation per LDAP zu ermoeglichen und die von den nss-Services benoetigten Daten aus LDAP zu verwenden, sind die folgenden Dateien relevant:
Zeile 1103: Zeile 698:

Die Datei /etc/openldap/ldap.conf sollte hierbei wie im Beispiel unter
Abschnitt 4.1 gestaltet werden.
Die Datei /etc/openldap/ldap.conf sollte hierbei wie im Beispiel unter Abschnitt 4.1 gestaltet werden.
Zeile 1108: Zeile 701:
Zeile 1116: Zeile 710:
uri ldap://ldapfarm.informatik.uni-bremen.de/ uri     ldap://ldapfarm.informatik.uni-bremen.de/
Zeile 1119: Zeile 713:
base dc=informatik,dc=uni-bremen,dc=de base    dc=informatik,dc=uni-bremen,dc=de
Zeile 1158: Zeile 752:

Mit der Option 'pam_filter', ist es moeglich den Zugriff auf den Host auf
LDAP-Benutzer zu beschraenken, die auf einen LDAP-Suchfilter passen. Nur
Benutzer, die in das Suchmuster fallen, koennen sich einloggen. Der Rest
wird von den nsswitch-Services zwar erfasst, aber alle Loginversuche werden
abgelehnt.

Ausserdem ist es moeglich, die von den nsswitch-Services zu verwendeten
Objekte auf die selbe Weise zu beschraenken. Mit den 'nss_base_*' Optionen
kann man nicht nur die Suchbasis fuer den jeweiligen Service definieren,
sondern auch einen LDAP-Suchfilter uebergeben. Es werden jeweils nur
Objekte fuer diesen Service beruecksichtigt, die auf den Suchfilter passen.

Damit die nsswitch-Services, wie passwd, group usw. funktionieren, muessen
diese Lesezugriff auf die entsprechenden Daten haben. Zu diesem Zweck kann
man sogenannte 'Proxyuser' einrichten, dessen einziger Zweck es ist,
bestimmte Berechtigungen im LDAP-Verzeichnis zu erhalten und damit Zugriff
auf bestimmte Daten zu gewahren.

Es koennen zwei solcher Benutzer in der Konfigurationsdatei angegeben
werden. Einmal einer fuer die allgemein zugaenglichen nss-Services, der es
Benutzernamen, Gruppen usw. auslesen kann und einer fuer administrative
Aufgaben, wie das Auslesen der der Passworthashes fuer den shadow-Dienst,
oder das Aendern von Passwoertern.

Da die Benutzer aber Schreibrechte auf ihre eigene Passwoerter haben und
die Passworthashes durch die Verwendung von PAM nicht aktiv ausgelesen
werden muessen, muss nur der Proxyuser fuer die normalen nsswitch-Dienste
angegeben werden.

Gibt man dennoch den administrativen Proxyuser an, so muss dieser
Schreibrechte auf die Benutzerpasswoerter haben, damit diese sie aendern
koennen. (AUS SICHERHEITSGRUENDEN NICHT ZU EMPFEHLEN!)

Da zur Authentifizierung der Proxyuser die 'simple bind' Methode verwendet
wird, sollte auf jeden Fall darauf geachtet werden eine TLS/SSL-gesicherte
Verbindung zum Server herzustellen.

In diesem Fall wird das durch die Verwendung von 'ssl start_tls' erreicht.
Eine zweite Moeglichkeit besteht darin als URI ldaps:// zu verwenden. Dabei
ist aber zu beachten, dass 'ssl start_tls' und ldaps:// sich nicht
kombinieren lassen. 'ssl start_tls' ist ldaps:// vorzuziehen.

Aus Sicherheitsgruenden sollten Proxyuser nicht mehr Rechte im
LDAP-Verzeichnis haben, als unbedingt notwendig. Da die Passwoerter in
Klartext abgelegt sind und auf allen Clients vorhanden sein muessen, reicht
es bereits, wenn ein Angreifer in einen Client einbricht und diese Dateien
auszuliest, um Zugriff auf das LDAP-Verzeichnis zu erlangen.

Aus diesem Grund sollten nur die notwendigsten Leserechte und wenn moeglich
keinerlei Schreibrechte an diese Accounts vergeben werden. Besonders den
Proxyuser fuer die nss-Services betreffend, da sein Passwort fuer alle
Benutzer lesbar ist.

Die einzige Moeglichkeit, diese Methode zu umgehen, waere der Einsatz von
Kerberos, was aber einen bedeutenden Mehraufwand mit sich bringen wuerde.

Um nun die nss-Services passwd, group und netgroup zu veranlassen
das LDAP-Verzeichnis nach Daten zu durchsuchen, muessen folgende
Anpassungen in der Datei /etc/nsswitch.conf vorgenommen werden:
Mit der Option 'pam_filter', ist es moeglich den Zugriff auf den Host auf LDAP-Benutzer zu beschraenken, die auf einen LDAP-Suchfilter passen. Nur Benutzer, die in das Suchmuster fallen, koennen sich einloggen. Der Rest wird von den nsswitch-Services zwar erfasst, aber alle Loginversuche werden abgelehnt.

Ausserdem ist es moeglich, die von den nsswitch-Services zu verwendeten Objekte auf die selbe Weise zu beschraenken. Mit den 'nss_base_*' Optionen kann man nicht nur die Suchbasis fuer den jeweiligen Service definieren, sondern auch einen LDAP-Suchfilter uebergeben. Es werden jeweils nur Objekte fuer diesen Service beruecksichtigt, die auf den Suchfilter passen.

Damit die nsswitch-Services, wie passwd, group usw. funktionieren, muessen diese Lesezugriff auf die entsprechenden Daten haben. Zu diesem Zweck kann man sogenannte 'Proxyuser' einrichten, dessen einziger Zweck es ist, bestimmte Berechtigungen im LDAP-Verzeichnis zu erhalten und damit Zugriff auf bestimmte Daten zu gewahren.

Es koennen zwei solcher Benutzer in der Konfigurationsdatei angegeben werden. Einmal einer fuer die allgemein zugaenglichen nss-Services, der es Benutzernamen, Gruppen usw. auslesen kann und einer fuer administrative Aufgaben, wie das Auslesen der der Passworthashes fuer den shadow-Dienst, oder das Aendern von Passwoertern.

Da die Benutzer aber Schreibrechte auf ihre eigene Passwoerter haben und die Passworthashes durch die Verwendung von PAM nicht aktiv ausgelesen werden muessen, muss nur der Proxyuser fuer die normalen nsswitch-Dienste angegeben werden.

Gibt man dennoch den administrativen Proxyuser an, so muss dieser Schreibrechte auf die Benutzerpasswoerter haben, damit diese sie aendern koennen. (AUS SICHERHEITSGRUENDEN NICHT ZU EMPFEHLEN!)

Da zur Authentifizierung der Proxyuser die 'simple bind' Methode verwendet wird, sollte auf jeden Fall darauf geachtet werden eine TLS/SSL-gesicherte Verbindung zum Server herzustellen.

In diesem Fall wird das durch die Verwendung von 'ssl start_tls' erreicht. Eine zweite Moeglichkeit besteht darin als URI ldaps:// zu verwenden. Dabei ist aber zu beachten, dass 'ssl start_tls' und ldaps:// sich nicht kombinieren lassen. 'ssl start_tls' ist ldaps:// vorzuziehen.

Aus Sicherheitsgruenden sollten Proxyuser nicht mehr Rechte im LDAP-Verzeichnis haben, als unbedingt notwendig. Da die Passwoerter in Klartext abgelegt sind und auf allen Clients vorhanden sein muessen, reicht es bereits, wenn ein Angreifer in einen Client einbricht und diese Dateien auszuliest, um Zugriff auf das LDAP-Verzeichnis zu erlangen.

Aus diesem Grund sollten nur die notwendigsten Leserechte und wenn moeglich keinerlei Schreibrechte an diese Accounts vergeben werden. Besonders den Proxyuser fuer die nss-Services betreffend, da sein Passwort fuer alle Benutzer lesbar ist.

Die einzige Moeglichkeit, diese Methode zu umgehen, waere der Einsatz von Kerberos, was aber einen bedeutenden Mehraufwand mit sich bringen wuerde.

Um nun die nss-Services passwd, group und netgroup zu veranlassen das LDAP-Verzeichnis nach Daten zu durchsuchen, muessen folgende Anpassungen in der Datei /etc/nsswitch.conf vorgenommen werden:
Zeile 1220: Zeile 777:
{{{
passwd:  files ldap
shadow:  files
group:  files ldap
netgroup: files ldap
}}}

Derzeit sind nur passwd, shadow, group, netgroup und automount (dazu
spaeter mehr) im LDAP-Verzeichnis enthalten.

Es wird empfohlen die Passwoerter _nicht_ per shadow vom LDAP-Server zu
beziehen, sondern die Authentifikation der Benutzer ueber PAM abzuwickeln.
Fuer den shadow-Service ist es zwingend erforderlich, dass alle Passwoerter
als 'crypt'-Hash im LDAP-Verzeichnis vorhanden sind. Da es aber
grundsaetzlich meoglich ist, dass dies nicht der Fall ist und PAM
unabhaengig vom Format des Passwortes funktioniert, ist PAM shadow
vorzuziehen.

Ausserdem ermoeglicht PAM es, den Zugriff auf den Host, auf bestimme
Benutzer zu beschraenken. (siehe 'pam_filter' im Konfigurationsbeispiel
weiter oben)

Um PAM fuer LDAP zu konfigurieren, muss die Datei /etc/pam.d/system-auth
wie folgt angepasst werden:

{{{
passwd:         files ldap
shadow:         files
group:          files ldap
netgroup:       files ldap
}}}
Derzeit sind nur passwd, shadow, group, netgroup und automount (dazu spaeter mehr) im LDAP-Verzeichnis enthalten.

Es wird empfohlen die Passwoerter _nicht_ per shadow vom LDAP-Server zu beziehen, sondern die Authentifikation der Benutzer ueber PAM abzuwickeln. Fuer den shadow-Service ist es zwingend erforderlich, dass alle Passwoerter als 'crypt'-Hash im LDAP-Verzeichnis vorhanden sind. Da es aber grundsaetzlich meoglich ist, dass dies nicht der Fall ist und PAM unabhaengig vom Format des Passwortes funktioniert, ist PAM shadow vorzuziehen.

Ausserdem ermoeglicht PAM es, den Zugriff auf den Host, auf bestimme Benutzer zu beschraenken. (siehe 'pam_filter' im Konfigurationsbeispiel weiter oben)

Um PAM fuer LDAP zu konfigurieren, muss die Datei /etc/pam.d/system-auth wie folgt angepasst werden:
Zeile 1246: Zeile 793:
Zeile 1271: Zeile 819:

Die Aenderungen sollten sofort aktiv werden und koennen getestet werden,
indem man z.B. 'id' auf einen Benutzer im LDAP-Verzeichnis anzuwenden,oder
einfach versucht sich mit einem LDAP-Benutzer am System anzumelden.
Die Aenderungen sollten sofort aktiv werden und koennen getestet werden, indem man z.B. 'id' auf einen Benutzer im LDAP-Verzeichnis anzuwenden,oder einfach versucht sich mit einem LDAP-Benutzer am System anzumelden.
Zeile 1278: Zeile 822:

Da autofs die allgemeine Konfigurationsdatei /etc/openldap/ldap.conf und
nicht die fuer nsswitch und PAM verwendet, muessen die automount-Daten
anonym lesbar sein. Die einzige Alternative, waehre die Verwendung von SASL,
da autofs 'simple bind' nicht unterstuetzt.
Da autofs die allgemeine Konfigurationsdatei /etc/openldap/ldap.conf und nicht die fuer nsswitch und PAM verwendet, muessen die automount-Daten anonym lesbar sein. Die einzige Alternative, waehre die Verwendung von SASL, da autofs 'simple bind' nicht unterstuetzt.
Zeile 1292: Zeile 832:

Um den Automounter zu veranlassen, Mountinformation aus dem LDAP-
Verzeichnis zu beziehen, gibt es zwei Moeglichkeiten. Zum einen kann man
die lokale Mastermap /etc/auto.master so anpassen, dass einzelne Mountmaps
vom LDAP-Server gelesen werden, oder man passt die Datei /etc/nsswitch.conf
so an, dass die lokale Mastermap ignoriert und alle noetigen Daten vom
LDAP-Server gelesen werden, sofern diese dort vorhanden sind. 

Eine zentral gelegene Mastermap hat den Vorteil, dass bei Aenderungen nur
das jeweilige LDAP-Objekt veraendert werden muss und nicht die
/etc/auto.master-Dateien auf allen betroffenen Clients.

Verwendet man lieber die lokale Mastermap koennte ein Eintrag in ihr z.B.
so aussehen:
/home ldap:ou=auto_home,ou=Mounts,dc=informatik,dc=uni-bremen,dc=de

Stellt man die Option 'automount' in der Datei /etc/nsswitch.conf von
'files' auf 'ldap' bzw. 'ldap files' um, so wird versucht, die Mastermap
direkt vom LDAP-Server zu beziehen.

autofs unterstuetzt standardmaessig mehrere Automount-Schemas, die bei
der Suche nach einem Mountpoint der Reihe nach abgearbeitet werden.
Um dies zu verhindern, kann man in der Datei /etc/sysconfig/autofs ein
Schema statisch festlegen und dabei auch die Standards umgehen, um auch
nicht unterstuetzte Schemas verwenden zu koennen.

Fuer Automount-Schemas werden zwei Objektklassen (Klasse der Automount-Map
und Klasse eines Mapeintrages) und drei Attribute benoetigt (Name der Map,
Name des Mapeintrages, Wert des Mapeintrages), die sich in den Schemas
unterscheiden. In den Kommentaren in der Datei /etc/sysconfig/autofs sind
diverse Beispiele vorgegeben.
Um den Automounter zu veranlassen, Mountinformation aus dem LDAP- Verzeichnis zu beziehen, gibt es zwei Moeglichkeiten. Zum einen kann man die lokale Mastermap /etc/auto.master so anpassen, dass einzelne Mountmaps vom LDAP-Server gelesen werden, oder man passt die Datei /etc/nsswitch.conf so an, dass die lokale Mastermap ignoriert und alle noetigen Daten vom LDAP-Server gelesen werden, sofern diese dort vorhanden sind.

Eine zentral gelegene Mastermap hat den Vorteil, dass bei Aenderungen nur das jeweilige LDAP-Objekt veraendert werden muss und nicht die /etc/auto.master-Dateien auf allen betroffenen Clients.

Verwendet man lieber die lokale Mastermap koennte ein Eintrag in ihr z.B. so aussehen: /home   ldap:ou=auto_home,ou=Mounts,dc=informatik,dc=uni-bremen,dc=de

Stellt man die Option 'automount' in der Datei /etc/nsswitch.conf von 'files' auf 'ldap' bzw. 'ldap files' um, so wird versucht, die Mastermap direkt vom LDAP-Server zu beziehen.

autofs unterstuetzt standardmaessig mehrere Automount-Schemas, die bei der Suche nach einem Mountpoint der Reihe nach abgearbeitet werden. Um dies zu verhindern, kann man in der Datei /etc/sysconfig/autofs ein Schema statisch festlegen und dabei auch die Standards umgehen, um auch nicht unterstuetzte Schemas verwenden zu koennen.

Fuer Automount-Schemas werden zwei Objektklassen (Klasse der Automount-Map und Klasse eines Mapeintrages) und drei Attribute benoetigt (Name der Map, Name des Mapeintrages, Wert des Mapeintrages), die sich in den Schemas unterscheiden. In den Kommentaren in der Datei /etc/sysconfig/autofs sind diverse Beispiele vorgegeben.
Zeile 1326: Zeile 845:
Zeile 1333: Zeile 853:

In der Datei /etc/autofs_ldap_auth.conf kann man autofs dazu veranlassen
sich per SASL am Server zu authentifizieren, um die Mountdaten zu beziehen.
Eine Dokumentation hierzu ist in der Datei selbst enthalten. Da die LDAP-
Server momentan kein SASL unterstuetzen, kann diese Datei ignoriert werden.
In der Datei /etc/autofs_ldap_auth.conf kann man autofs dazu veranlassen sich per SASL am Server zu authentifizieren, um die Mountdaten zu beziehen. Eine Dokumentation hierzu ist in der Datei selbst enthalten. Da die LDAP- Server momentan kein SASL unterstuetzen, kann diese Datei ignoriert werden.
Zeile 1341: Zeile 856:
Zeile 1343: Zeile 857:
Zeile 1349: Zeile 864:

Im Gegensatz zu Fedora, stellt Debian drei LDAP Konfigurationsdateien zur
Verfuegung. Die allgemeine unter /etc/ldap/ldap.conf, die wie im Beispiel
unter Punkt 4.1 gestaltet werden sollte, die /etc/libnss-ldap.conf, fuer
die nsswitch Services und die /etc/pam_ldap.conf, fuer PAM.
Im Gegensatz zu Fedora, stellt Debian drei LDAP Konfigurationsdateien zur Verfuegung. Die allgemeine unter /etc/ldap/ldap.conf, die wie im Beispiel unter Punkt 4.1 gestaltet werden sollte, die /etc/libnss-ldap.conf, fuer die nsswitch Services und die /etc/pam_ldap.conf, fuer PAM.
Zeile 1357: Zeile 867:
Zeile 1359: Zeile 868:
Zeile 1372: Zeile 882:

Die Dateien /etc/libnss-ldap.conf und /etc/pam_ldap.conf sind eigentlich
identisch und werden (vermutlich) nur wegen den Angehoerigkeit zu
verschiedenen Packages getrennt behandelt. Beide Dateien werde genauso
konfiguriert, wie das unter Punkt 4.1.1.1 beschriebene Fedora Aequivalent.
Der Einfachheit wegen koennte man eine der beiden Dateien auch einfach
durch einen Symlink auf die jeweils andere ersetzen. Dasselbe gilt
natuerlich auch fuer die jeweilige .secret Datei.

Die Aenderungen an der Datei /etc/nsswitch.conf sehen ein wenig anders aus,
als unter Fedora:
Die Dateien /etc/libnss-ldap.conf und /etc/pam_ldap.conf sind eigentlich identisch und werden (vermutlich) nur wegen den Angehoerigkeit zu verschiedenen Packages getrennt behandelt. Beide Dateien werde genauso konfiguriert, wie das unter Punkt 4.1.1.1 beschriebene Fedora Aequivalent. Der Einfachheit wegen koennte man eine der beiden Dateien auch einfach durch einen Symlink auf die jeweils andere ersetzen. Dasselbe gilt natuerlich auch fuer die jeweilige .secret Datei.

Die Aenderungen an der Datei /etc/nsswitch.conf sehen ein wenig anders aus, als unter Fedora:
Zeile 1385: Zeile 887:
Zeile 1391: Zeile 894:

Genauso wie unter Fedora, ist es zu empfehlen die Passwoertrt ueber PAM
abzugleichen und nicht den shadow-Service zu verwenden.

Das Abfragen von Benutzer-IDs, Gruppen usw. sollte mit diesen Einstellungen
bereits funktionieren. Damit die Authentifizierung jedoch funktioniert,
muessen folgende Dateien im Verzeichnis /etc/pam.d veraendert werden:
Genauso wie unter Fedora, ist es zu empfehlen die Passwoertrt ueber PAM abzugleichen und nicht den shadow-Service zu verwenden.

Das Abfragen von Benutzer-IDs, Gruppen usw. sollte mit diesen Einstellungen bereits funktionieren. Damit die Authentifizierung jedoch funktioniert, muessen folgende Dateien im Verzeichnis /etc/pam.d veraendert werden:
Zeile 1400: Zeile 899:
Zeile 1405: Zeile 905:
Zeile 1407: Zeile 906:
Zeile 1411: Zeile 911:
Zeile 1413: Zeile 912:
Zeile 1416: Zeile 916:
account required pam_deny.so
}}}
account required        pam_deny.so
}}}
Zeile 1420: Zeile 919:
{{{
password sufficient pam_ldap.so
password required pam_unix.so use_first_pass md5 shadow
}}}


{{{
password sufficient     pam_ldap.so
password required       pam_unix.so use_first_pass md5 shadow
}}}
Zeile 1427: Zeile 925:

autofs unter Debian unterstuetzt zwei moegliche Automount-Schemas und es
gibt keine Meoglichkeit diese zu aendern, wie unter Fedora. Ausserdem muss
das Startupscript fuer den autofs-Service (/etc/init.d/autofs) auf eines
der beiden Schemas eingestellt werden.

Und zwar muessen dafuer in den Zeilen 181 und 182, in der Funktion
'getldapmounts' die Namen angepasst werden, die dem Tool
/usr/lib/autofs/autofs-ldap-auto-master uebergeben werden, wenn man ein
anderes als das default-Schema (autofs.schema) verwenden moechte.
autofs unter Debian unterstuetzt zwei moegliche Automount-Schemas und es gibt keine Meoglichkeit diese zu aendern, wie unter Fedora. Ausserdem muss das Startupscript fuer den autofs-Service (/etc/init.d/autofs) auf eines der beiden Schemas eingestellt werden.

Und zwar muessen dafuer in den Zeilen 181 und 182, in der Funktion  'getldapmounts' die Namen angepasst werden, die dem Tool /usr/lib/autofs/autofs-ldap-auto-master uebergeben werden, wenn man ein anderes als das default-Schema (autofs.schema) verwenden moechte.
Zeile 1439: Zeile 930:
Zeile 1444: Zeile 936:
 [ ! -z $LDAPBASE ] && export LDAPBASE="$LDAPBASE"
 /usr/lib/autofs/autofs-ldap-auto-master 2> /dev/null
 ######################################################################
 
# In diesen Zeilen werden die Attribute festgelegt #
 # #
 
/usr/lib/autofs/autofs-ldap-auto-master -m automountMap \ #
  -e automount -n ou -k cn -v automountInformation 2> /dev/null #
 ######################################################################
        [ ! -z $LDAPBASE ] && export LDAPBASE="$LDAPBASE"
        /usr/lib/autofs/autofs-ldap-auto-master 2> /dev/null
        ######################################################################
        
# In diesen Zeilen werden die Attribute festgelegt #
        # #
        
/usr/lib/autofs/autofs-ldap-auto-master -m automountMap \ #
         -e automount -n ou -k cn -v automountInformation 2> /dev/null #
        ######################################################################
Zeile 1455: Zeile 947:

Dies ist jedoch nur noetig, wenn man die auto.master Map vom LDAP Server
beziehen moechte. Alternativ kann, wie unter Fedora, die Datei
/etc/auto.master angepasst werden.

Da das default-Schema bereits dem verwendeten entspricht, ist hier keine
Anpassung notwendig. Das zweite unterstuetzte Schema ist das im NIS-Schema
definierte.
Dies ist jedoch nur noetig, wenn man die auto.master Map vom LDAP Server beziehen moechte. Alternativ kann, wie unter Fedora, die Datei /etc/auto.master angepasst werden.

Da das default-Schema bereits dem verwendeten entspricht, ist hier keine Anpassung notwendig. Das zweite unterstuetzte Schema ist das im NIS-Schema definierte.
Zeile 1466: Zeile 952:

Bei Solaris 10 sind alle benoetigen Packages bereits vorhanden. Da aber
nicht OpenLDAP als Grundlage fuer die Solaris-LDAP-Tools stellt,
gestaltet sich die Konfiguration ein wenig anders, als unter Linux.
Bei Solaris 10 sind alle benoetigen Packages bereits vorhanden. Da aber nicht OpenLDAP als Grundlage fuer die Solaris-LDAP-Tools stellt, gestaltet sich die Konfiguration ein wenig anders, als unter Linux.
Zeile 1472: Zeile 955:

Solaris 10 hat bereits einen eigenen, von Sun entwickelten LDAP-Client
vorinstalliert. Dieser Client laesst sich relativ einfach mit nur einem
Kommando konfigurieren und sogar noch leichter, wenn vorgefertigte
Konfigurationsprofile auf dem LDAP-Server hinterlegt sind.
(Nicht unterstuetzt auf den laufenden Servern)

Ist dies der Fall, reicht es das Kommando 'ldapclient init <server>'
auszufuehren. Das Tool erledigt dann automatisch alle noetigen
Systemeinstellungen.
Solaris 10 hat bereits einen eigenen, von Sun entwickelten LDAP-Client vorinstalliert. Dieser Client laesst sich relativ einfach mit nur einem Kommando konfigurieren und sogar noch leichter, wenn vorgefertigte Konfigurationsprofile auf dem LDAP-Server hinterlegt sind. (Nicht unterstuetzt auf den laufenden Servern)

Ist dies der Fall, reicht es das Kommando 'ldapclient init <server>' auszufuehren. Das Tool erledigt dann automatisch alle noetigen Systemeinstellungen.
Zeile 1484: Zeile 960:
Zeile 1502: Zeile 979:

Das Attribut 'serviceSearchDescriptor' folgt dabei der Syntax
'<service>:<dn>?<scope>?<filter>'. Wie bei den OpenLDAP-
Konfigurationsdateien, kann man mithilfe des Filters die Liste von den
nss-Services erfassten Suchobjekte begrenzen. (z.B. die Liste der
passwd-Benutzer)

Es gibt jedoch scheinbar keine Moeglichkeit, wie bei OpenLDAP mit
'pam_filter', den Zugriff auf einen Client zu beschraenken.

Eine ausfuehrliche Dokumentation zur Benutzung von ldapclient, sowie die
Erklaerung aller verfuegbaren Optionen ist in den Manpages zu finden.
(ldapclient(1M))

Das Ueberpruefen der Serverzertifikate laesst sich, anders als bei OpenLDAP-
Clients, nicht abschalten. Deshalb muss das root-CA-Zertifikat auf jeden
Fall eingebunden werden.

Da der Sun-LDAP-Client das Zertifikat jedoch im NSS-Format (Network
Security Services) benoetigt, muss das PEM-Zertifikat vorher konvertiert
werden.

Um die vorhandene *.pem-Datei in dieses Format zu bringen, kann man das
Tool 'certutil' verwenden, das auf Solaris vorinstalliert sein sollte:
Das Attribut 'serviceSearchDescriptor' folgt dabei der Syntax '<service>:<dn>?<scope>?<filter>'. Wie bei den OpenLDAP- Konfigurationsdateien, kann man mithilfe des Filters die Liste von den nss-Services erfassten Suchobjekte begrenzen. (z.B. die Liste der passwd-Benutzer)

Es gibt jedoch scheinbar keine Moeglichkeit, wie bei OpenLDAP mit 'pam_filter', den Zugriff auf einen Client zu beschraenken.

Eine ausfuehrliche Dokumentation zur Benutzung von ldapclient, sowie die Erklaerung aller verfuegbaren Optionen ist in den Manpages zu finden. (ldapclient(1M))

Das Ueberpruefen der Serverzertifikate laesst sich, anders als bei OpenLDAP- Clients, nicht abschalten. Deshalb muss das root-CA-Zertifikat auf jeden Fall eingebunden werden.

Da der Sun-LDAP-Client das Zertifikat jedoch im NSS-Format (Network Security Services) benoetigt, muss das PEM-Zertifikat vorher konvertiert werden.

Um die vorhandene *.pem-Datei in dieses Format zu bringen, kann man das Tool 'certutil' verwenden, das auf Solaris vorinstalliert sein sollte:
Zeile 1533: Zeile 997:

Das erste Kommando legt dabei die NSS-DB fuer die Zertifikate an (Passwort
leer lassen). Das zweite pflegt das Zertifikat in diese Datenbank ein. Die
DB muss dabei fuer alle Benutzer lesbar sein.

Das Zertifikat sollte eingebunden werden, bevor das ldapclient-Kommando
ausgefuehrt wird!

Alle Dateien, die ldapclient veraendert, werden nach /var/ldap/restore
kopiert und gehen somit nicht verloren. Die LDAP Konfigurationsdateien die,
nicht mit Konfigurationsdateien von OpenLDAP kompatibel sind, liegen in
/var/ldap.

Auch hier ist wieder zu empfehlen, nicht den shadow-Service zu benutzen,
sondern PAM entsprechend zu konfigurieren. Dafuer muessen folgende
Anpassungen an der Datei /etc/pam.conf vorgenommen werden:
Das erste Kommando legt dabei die NSS-DB fuer die Zertifikate an (Passwort leer lassen). Das zweite pflegt das Zertifikat in diese Datenbank ein. Die DB muss dabei fuer alle Benutzer lesbar sein.

Das Zertifikat sollte eingebunden werden, bevor das ldapclient-Kommando ausgefuehrt wird!

Alle Dateien, die ldapclient veraendert, werden nach /var/ldap/restore kopiert und gehen somit nicht verloren. Die LDAP Konfigurationsdateien die, nicht mit Konfigurationsdateien von OpenLDAP kompatibel sind, liegen in /var/ldap.

Auch hier ist wieder zu empfehlen, nicht den shadow-Service zu benutzen, sondern PAM entsprechend zu konfigurieren. Dafuer muessen folgende Anpassungen an der Datei /etc/pam.conf vorgenommen werden:
Zeile 1551: Zeile 1006:
Zeile 1616: Zeile 1072:
passwd auth sufficient  pam_lap.so.1 use_first_pass passwd auth sufficient         pam_lap.so.1 use_first_pass
Zeile 1644: Zeile 1100:

Leider bietet das pam_ldap-Modul von Sun nicht die Moeglichkeit den Zugriff
auf einen Host durch einen LDAP-Filter zu begrenzen. Alternativ kann man
aber ueber die Option 'serviceSearchDescriptor' in ldapclient einen Filter
uebergeben und so die Liste der verfuegbaren Benutzer eingrenzen.

Eine andere Moeglichkeit ist, das pam_ldap-Modul von PADL (padl.com) statt
dem Sun-Modul zu verwenden. (ungetestet)
Leider bietet das pam_ldap-Modul von Sun nicht die Moeglichkeit den Zugriff auf einen Host durch einen LDAP-Filter zu begrenzen. Alternativ kann man aber ueber die Option 'serviceSearchDescriptor' in ldapclient einen Filter uebergeben und so die Liste der verfuegbaren Benutzer eingrenzen.

Eine andere Moeglichkeit ist, das pam_ldap-Modul von PADL (padl.com) statt dem Sun-Modul zu verwenden. (ungetestet)
Zeile 1654: Zeile 1105:

Da ldapclient keine Einstellungen fuer autofs vornimmt, muessen diese von
Hand nachgetragen werden. Als erstes muss in der Datei /etc/nsswitch.conf
der Wert 'automount' auf 'files ldap' eingestellt werden.
Da ldapclient keine Einstellungen fuer autofs vornimmt, muessen diese von Hand nachgetragen werden. Als erstes muss in der Datei /etc/nsswitch.conf der Wert 'automount' auf 'files ldap' eingestellt werden.
Zeile 1660: Zeile 1108:
{{{
automount files ldap
}}}

Das Verwenden der Mastermap vom LDAP-Server gestaltet sich als relativ
schwierig, weshalb die entsprechenden Maps am besten in die lokale
/etc/auto.master-Map eingebunen werden sollten.

Die Grundlage dafuer wurde schon in den Optionen vom oben beschriebenen
ldapclient-Kommado geschaffen:

{{{
automount       files ldap
}}}
Das Verwenden der Mastermap vom LDAP-Server gestaltet sich als relativ schwierig, weshalb die entsprechenden Maps am besten in die lokale /etc/auto.master-Map eingebunen werden sollten.

Die Grundlage dafuer wurde schon in den Optionen vom oben beschriebenen ldapclient-Kommado geschaffen:
Zeile 1676: Zeile 1121:

Sollen andere Maps als 'auto_home' vom LDAP-Verzeichnis bezogen werden,
muss ldapclient mit den entsprechend erganezten Optionen erneut ausgefuehrt
werden. (ACHTUNG: Dabei wird die Datei nsswitch.conf automatisch mit der
Datei nsswitch.ldap ueberschrieben!)

Um die auto_home-Map nun in die auto.master einzubinden, erstellt man
einfach eine Datei /etc/auto_home mit dem Inhalt '+auto_home' und bindet
diese wie eine lokale Map ein.
Sollen andere Maps als 'auto_home' vom LDAP-Verzeichnis bezogen werden, muss ldapclient mit den entsprechend erganezten Optionen erneut ausgefuehrt werden. (ACHTUNG: Dabei wird die Datei nsswitch.conf automatisch mit der Datei nsswitch.ldap ueberschrieben!)

Um die auto_home-Map nun in die auto.master einzubinden, erstellt man einfach eine Datei /etc/auto_home mit dem Inhalt '+auto_home' und bindet diese wie eine lokale Map ein.
Zeile 1687: Zeile 1126:
Zeile 1690: Zeile 1130:
Zeile 1692: Zeile 1131:
{{{
/home auto_home
}}}

Nach einem Neustart des autofs-Services sollten die Mountpoints aus dem
LDAP-Verzeichnis zur Verfuegung stehen.

{{{
/home   auto_home
}}}
Nach einem Neustart des autofs-Services sollten die Mountpoints aus dem LDAP-Verzeichnis zur Verfuegung stehen.
Zeile 1701: Zeile 1138:

Dieser Abschnitt bezieht sich auf Mac OS X Leopard. Unter anderen Versionen
sollte die Konfiguration in etwa gleich ablaufen, kann jedoch in einigen
Punkten abweichen.

Unter Mac OS X wird der Grossteil der Einstellungen ueber die grafische
Oberflaeche erledigt. Vorher sollte allerding sichergestellt sein, dass in
der Datei /etc/openldap/ldap.conf das rootCA-Zertifikat eingebunden und der
Wert 'TLS_REQCERT' auf 'demand' eingestellt ist.

Danach kann man im Finder unter 'Applications/Utilities' das 'Directory
Utility' aufrufen. Unter dem Reiter 'Services' ist in der Liste ein Punkt
'LDAPv3' vorhanden. Ist der Reiter nicht zu sehen, kann er ueber den Button
'Advanced Setting' sichtbar gemacht werden. Durch einen Doppelklick auf
den 'LDAPv3'-Eintrag gelangt man nun zur LDAP-Serverliste.

Durch einen Klick auf den Button 'New...' kann man einen Server in die
Liste aufnehmen. Im darauf folgenden Dialog gibt man den Servernamen ein,
setzt die Haekchen bei 'Encrypt using SSL' und 'Use for authentication'
und klickt dann auf 'Continue'.

Das verwendete Template ist 'RFC 2307 (UNIX)' und die Searchbase
entspricht der 'base'-Option in der ldap.conf. Sind die Benutzerdaten
nicht anonym lesbar, werden im naechsten Schritt die Autentifizierungsdaten
eines Benutzers mit den entsprechenden Rechten verlangt.

Nach einem weiteren Klick auf 'Continue' werden die eingegebenen Daten
ueberprueft und sollte alles korrekt eingegeben worden sind, wurde der
Server erfolgreich in die Liste aufgenommen und der Vorgang kann mit 'OK'
abgeschlossen werden.

Damit autofs funktioniert, sollte der Eintrag jedoch noch einmal editiert
werden, da das default-Schema nicht dem auf den FB3-Servern verwendeten
entspricht. Unter dem Reiter 'Search & Mappings' kann man saemtliche
Attribute und Objektklassen nach eigenem Bedarf um-mappen, sowie die
Basis-DNs fuer die Suche nach den jeweiligen Daten festlegen.

Unter den Punkten 'Automount' und 'AutomountMap' muss im Feld 'RecordName'
jeweils 'automountMapName' durch 'ou' und 'automountKey' durch 'cn' ersetzt
werden.

Bei Mac OS X ist es, anders als bei Linux, nicht meoglich, auf die lokale
Mastermap /etc/auto.master zu verzichten. Es ist jedoch moeglich, die
lokale Mastermap um Daten aus dem LDAP-Verzeichnis zu erweitern. Indem man
z.B. eine Zeile '+auto.master' hinzufuegt, wird die Matsermap 'auto.master'
vom LDAP-Server mit beruecksichtigt.

Alternativ kann man einzelne Maps aus dem LDAP-Verzeichnis beziehen und
auch lokale erweitern.
Dieser Abschnitt bezieht sich auf Mac OS X Leopard. Unter anderen Versionen sollte die Konfiguration in etwa gleich ablaufen, kann jedoch in einigen Punkten abweichen.

Unter Mac OS X wird der Grossteil der Einstellungen ueber die grafische Oberflaeche erledigt. Vorher sollte allerding sichergestellt sein, dass in der Datei /etc/openldap/ldap.conf das rootCA-Zertifikat eingebunden und der Wert 'TLS_REQCERT' auf 'demand' eingestellt ist.

Danach kann man im Finder unter 'Applications/Utilities' das 'Directory Utility' aufrufen. Unter dem Reiter 'Services' ist in der Liste ein Punkt 'LDAPv3' vorhanden. Ist der Reiter nicht zu sehen, kann er ueber den Button 'Advanced Setting' sichtbar gemacht werden. Durch einen Doppelklick auf den 'LDAPv3'-Eintrag gelangt man nun zur LDAP-Serverliste.

Durch einen Klick auf den Button 'New...' kann man einen Server in die Liste aufnehmen. Im darauf folgenden Dialog gibt man den Servernamen ein, setzt die Haekchen bei 'Encrypt using SSL' und 'Use for authentication' und klickt dann auf 'Continue'.

Das verwendete Template ist 'RFC 2307 (UNIX)' und die Searchbase entspricht der 'base'-Option in der ldap.conf. Sind die Benutzerdaten nicht anonym lesbar, werden im naechsten Schritt die Autentifizierungsdaten eines Benutzers mit den entsprechenden Rechten verlangt.

Nach einem weiteren Klick auf 'Continue' werden die eingegebenen Daten ueberprueft und sollte alles korrekt eingegeben worden sind, wurde der Server erfolgreich in die Liste aufgenommen und der Vorgang kann mit 'OK' abgeschlossen werden.

Damit autofs funktioniert, sollte der Eintrag jedoch noch einmal editiert werden, da das default-Schema nicht dem auf den FB3-Servern verwendeten entspricht. Unter dem Reiter 'Search & Mappings' kann man saemtliche Attribute und Objektklassen nach eigenem Bedarf um-mappen, sowie die Basis-DNs fuer die Suche nach den jeweiligen Daten festlegen.

Unter den Punkten 'Automount' und 'AutomountMap' muss im Feld 'RecordName' jeweils 'automountMapName' durch 'ou' und 'automountKey' durch 'cn' ersetzt werden.

Bei Mac OS X ist es, anders als bei Linux, nicht meoglich, auf die lokale Mastermap /etc/auto.master zu verzichten. Es ist jedoch moeglich, die lokale Mastermap um Daten aus dem LDAP-Verzeichnis zu erweitern. Indem man z.B. eine Zeile '+auto.master' hinzufuegt, wird die Matsermap 'auto.master' vom LDAP-Server mit beruecksichtigt.

Alternativ kann man einzelne Maps aus dem LDAP-Verzeichnis beziehen und auch lokale erweitern.
Zeile 1752: Zeile 1159:
Zeile 1759: Zeile 1167:
Zeile 1763: Zeile 1170:
Zeile 1768: Zeile 1176:
/home   auto_home
}}}
/home                   auto_home
}}}
Zeile 1772: Zeile 1179:
Zeile 1775: Zeile 1183:


Zum Schluss sollte man noch sicher stellen, dass der eingetragene LDAP-
Server im 'Directory Utility' unter 'Search Policy' in der
'Authentication'-Liste eingetragen ist. Ist dies nicht der Fall, kann er
ueber den '+'-Button hinzugefuegt werden.
Zum Schluss sollte man noch sicher stellen, dass der eingetragene LDAP- Server im 'Directory Utility' unter 'Search Policy' in der 'Authentication'-Liste eingetragen ist. Ist dies nicht der Fall, kann er ueber den '+'-Button hinzugefuegt werden.
Zeile 1784: Zeile 1187:
Leider scheint es keine Meoglichkeit zu geben, Filter fuer die Suchbereiche
anzugeben, oder den Zugriff auf einen Host nur bestimmten Benutzern zu
erlauben.
Leider scheint es keine Meoglichkeit zu geben, Filter fuer die Suchbereiche anzugeben, oder den Zugriff auf einen Host nur bestimmten Benutzern zu erlauben.
Zeile 1789: Zeile 1190:

Es ist leider nicht moeglich einen Windows-Client direkt an einen OpenLDAP-
Server anzubinden. Aber man kann einen Samba-Server aufsetzen, der den
LDAP-Server als Backend verwendet. Mit den unter Abschnitt 3. erwaehnten
Samba-Attributen kann ein UNIX-Account im LDAP-Verzeichnis somit
gleichzeitig als Samba-Account verwendet werden.

Eine Dokumentation zu Samba mit LDAP-Backend kann auf samba.org gefunden
werden.
Es ist leider nicht moeglich einen Windows-Client direkt an einen OpenLDAP- Server anzubinden. Aber man kann einen Samba-Server aufsetzen, der den LDAP-Server als Backend verwendet. Mit den unter Abschnitt 3. erwaehnten Samba-Attributen kann ein UNIX-Account im LDAP-Verzeichnis somit gleichzeitig als Samba-Account verwendet werden.

Eine Dokumentation zu Samba mit LDAP-Backend kann auf samba.org gefunden werden.
Zeile 1801: Zeile 1195:

Die Verwaltung der Daten im LDAP-Verzeichnis baut auf das alte, fuer NIS
verwendete, System auf. Verschiedene Skripte stehen zum Teil im FB3-
Dateisystem und zum anderen Teil auf bestimmten Hosts zur Verfuegung, um
alle relevanten Daten einzusehen und gegebenenfalls zu veraendern.

In den folgenden Abschnitten werden die Verwaltungsmoeglichkeiten der
verschiedenen Datengruppen ausgefuehrt und ein Vergleich zu den bisherigen
Methoden gezogen.
Die Verwaltung der Daten im LDAP-Verzeichnis baut auf das alte, fuer NIS verwendete, System auf. Verschiedene Skripte stehen zum Teil im FB3- Dateisystem und zum anderen Teil auf bestimmten Hosts zur Verfuegung, um alle relevanten Daten einzusehen und gegebenenfalls zu veraendern.

In den folgenden Abschnitten werden die Verwaltungsmoeglichkeiten der verschiedenen Datengruppen ausgefuehrt und ein Vergleich zu den bisherigen Methoden gezogen.
Zeile 1812: Zeile 1200:

Das Hinzufuegen und Entfernen von Benutzern ist fuer den Anwender praktisch
unveraendert. Die Skripte 'adduser' und 'delete_user' stehen z.B. weiterhin
zur Verfuegung und haben sich nur inhaltlich, aber nicht in der Funktion
veraendert. Weiteres zu den Verwaltungsskripten spaeter.
Das Hinzufuegen und Entfernen von Benutzern ist fuer den Anwender praktisch unveraendert. Die Skripte 'adduser' und 'delete_user' stehen z.B. weiterhin zur Verfuegung und haben sich nur inhaltlich, aber nicht in der Funktion veraendert. Weiteres zu den Verwaltungsskripten spaeter.
Zeile 1819: Zeile 1203:

Da der Wunsch geaeussert wurde, auf bestimmten Hosts den Benutzerzugriff
einzuschraenken, wurden dazu mehrere Moeglichkeiten ausgearbeitet, die in
diesem Abschnitt erlaeutert werden.
Da der Wunsch geaeussert wurde, auf bestimmten Hosts den Benutzerzugriff einzuschraenken, wurden dazu mehrere Moeglichkeiten ausgearbeitet, die in diesem Abschnitt erlaeutert werden.
Zeile 1825: Zeile 1206:

Auf Systemen, die das pam_ldap-Modul von PADL (padl.com) verwenden, kann
man ueber die entsprechende Konfigurationsdatei den Zugriff auf den Client
mit Hilfe eines LDAP-Filters beschraenken. (siehe Abschnitt 4.1.1.1)

*Getestet unter Debian und Fedora
*Prinzipiell moeglich unter Solaris (PAM-Modul muss uebersetzt und eingebunden werden)
*Nicht moeglich unyer Mac OS X
Auf Systemen, die das pam_ldap-Modul von PADL (padl.com) verwenden, kann man ueber die entsprechende Konfigurationsdatei den Zugriff auf den Client mit Hilfe eines LDAP-Filters beschraenken. (siehe Abschnitt 4.1.1.1)

*Getestet unter Debian und Fedora *Prinzipiell moeglich unter Solaris (PAM-Modul muss uebersetzt und eingebunden werden) *Nicht moeglich unyer Mac OS X
Zeile 1835: Zeile 1211:

Auf Systemen die Netgroups unterstuetzen und die Option 'compat' in der
/etc/nsswitch.conf erlauben, kann mithilfe von Netgroups die Benutzerliste
beeinflusst werden. Dabei ist es sowohl moeglich Netgroups als White- wie
auch als Blacklist anzuwenden.

Beispiel fuer Whitelist: Moechte man nur den Benutzern, die in der Netgroup
'trusers' eingetragen sind, den Zugriff auf einen Host erlauben, muessen
folgende anpassungen vorgenommen werden:
Auf Systemen die Netgroups unterstuetzen und die Option 'compat' in der /etc/nsswitch.conf erlauben, kann mithilfe von Netgroups die Benutzerliste beeinflusst werden. Dabei ist es sowohl moeglich Netgroups als White- wie auch als Blacklist anzuwenden.

Beispiel fuer Whitelist: Moechte man nur den Benutzern, die in der Netgroup 'trusers' eingetragen sind, den Zugriff auf einen Host erlauben, muessen folgende anpassungen vorgenommen werden:
Zeile 1846: Zeile 1216:
{{{
passwd:  files compat
passwd_compat: ldap
}}}

{{{
passwd:         files compat
passwd_compat:  ldap
}}}
Zeile 1852: Zeile 1222:
Zeile 1857: Zeile 1228:
}}}

Durch diese Einstellungen werden die Mitglieder der Netgroup 'trusers' in
die passwd-Liste des Systems aufgenommen. Diese Methode laesst sich auch
ohne Netgroup auf einzelne Benutzer anwenden.
+::::::/sbin/nologin
}}}
Durch diese Einstellungen werden die Mitglieder der Netgroup 'trusers' in die passwd-Liste des Systems aufgenommen. Diese Methode laesst sich auch ohne Netgroup auf einzelne Benutzer anwenden. Die letzte Zeile sorgt dafuer, dass die restlichen Benutzer dem System bekannt bleiben.
Zeile 1864: Zeile 1233:
Zeile 1871: Zeile 1241:

Beispiel fuer Blacklist: Moechte man den Mitgliedern eine bestimmten
Netgroup den Zugriff auf den Host verweigern, muessen folgende Anpassungen
gemacht werden:
Beispiel fuer Blacklist: Moechte man den Mitgliedern eine bestimmten Netgroup den Zugriff auf den Host verweigern, muessen folgende Anpassungen gemacht werden:
Zeile 1879: Zeile 1246:
Zeile 1886: Zeile 1254:

Das einzelne '+' bindet alle LDAP-Benutzer in den passwd-Service ein,
waehrend '-@ntrusers' alle Mitglieder der Netgroup 'ntrusers' davon
ausschliesst. Das Aussschliessen von einzelnen Benutzern ist ebenfalls
moeglich.
Das einzelne '+' bindet alle LDAP-Benutzer in den passwd-Service ein, waehrend '-@ntrusers' alle Mitglieder der Netgroup 'ntrusers' davon ausschliesst. Das Aussschliessen von einzelnen Benutzern ist ebenfalls moeglich.
Zeile 1893: Zeile 1257:
Zeile 1901: Zeile 1266:
Zeile 1913: Zeile 1277:

Dabei ist aber zu beachten, dass es bei LDAP, genauso wie bei NIS, zu
Problemem bezueglich der Groesse der Netgroups kommt. Sollte daher eine
Netgroup zu viele Mitglieder enthalten sollte sie aufgespalten werden.

Eine einfache Verwaltung aller Netgroups (auch der fuer z.B. trustedhosts)
waehre z.B. ueber eine aehnliche Struktur, wie beim momentanen auto.home.d-
Verzeichnis auf bob, moeglich.

*Getestet unter Debian und Solaris
*Prinzipiell moeglich unter allen Systemen, die Netgroups unterstuetzen
*Nicht moeglich unter Mac OS X
Dabei ist aber zu beachten, dass es bei LDAP, genauso wie bei NIS, zu Problemem bezueglich der Groesse der Netgroups kommt. Sollte daher eine Netgroup zu viele Mitglieder enthalten sollte sie aufgespalten werden.

Eine einfache Verwaltung aller Netgroups (auch der fuer z.B. trustedhosts) waehre z.B. ueber eine aehnliche Struktur, wie beim momentanen auto.home.d- Verzeichnis auf bob, moeglich.

*Getestet unter Debian und Solaris *Prinzipiell moeglich unter allen Systemen, die Netgroups unterstuetzen *Nicht moeglich unter Mac OS X
Zeile 1927: Zeile 1284:

Da es unter Mac OS X scheinbar nicht ohne weiteres Moeglich ist, den
Hostzugriff zu begrenzen, ist hier moeglicherweise die einzige Moeglichkeit
ein eigener Replicaserver, der nur die Benutzerdaten synchronisiert, die
auf den angbebundenen Systemen verwendet werden sollen.

Die selbe Eischraenkung schein fuer Samba-Domains zu gelten. Eine weitere
Einschraenkung bei Samba-Domain ist es, dass ein Accountobjekt nur eine
Samba-SID aufnehmen kann und somit nur Mitglied in einer Samba-Domain zur
Zeit sein kann.

Um dies zu umgehen koennte man z.B. einen Replicaserver einrichten, der
alle Daten, ausser den Samba-SIDs repliziert. Die SIDs koennten dann per
Skript eingefuegt werden.
Da es unter Mac OS X scheinbar nicht ohne weiteres Moeglich ist, den Hostzugriff zu begrenzen, ist hier moeglicherweise die einzige Moeglichkeit ein eigener Replicaserver, der nur die Benutzerdaten synchronisiert, die auf den angbebundenen Systemen verwendet werden sollen.

Die selbe Eischraenkung schein fuer Samba-Domains zu gelten. Eine weitere Einschraenkung bei Samba-Domain ist es, dass ein Accountobjekt nur eine Samba-SID aufnehmen kann und somit nur Mitglied in einer Samba-Domain zur Zeit sein kann.

Um dies zu umgehen koennte man z.B. einen Replicaserver einrichten, der alle Daten, ausser den Samba-SIDs repliziert. Die SIDs koennten dann per Skript eingefuegt werden.
Zeile 1943: Zeile 1291:

Da LDAP-Datenbanken hierarchisch organisiert sind, waehre es grundsaetzlich
moeglich die Benutzerobjekte in einer nach z.B. Arbeitsgruppen
gegliederten Baumstruktur abzulegen.

Indem man dann auf Clients nur jeweils einen untergeordneten Zweig als
Suchbasis fuer Benutzerobjekte angibt, koennte der Zugriff auf einen Host
dadurch unter praktisch allen Plattformen auf diesem Unterzweig begrenzt
werden.

Da dieses System jedoch extrem unflexibel ist, ist der Verwaltungsaufwand
relativ hoch. Wenn z.B. Benutzer verschiedenen Arbeitsgruppen angehoeren
sollen oder oft unter ihnen wechseln, muessten Datensaetze mehrfach
vorhanden sein, oder Verweise auf sie muessten gepflegt werden.
Da LDAP-Datenbanken hierarchisch organisiert sind, waehre es grundsaetzlich moeglich die Benutzerobjekte in einer nach z.B. Arbeitsgruppen gegliederten Baumstruktur abzulegen.

Indem man dann auf Clients nur jeweils einen untergeordneten Zweig als Suchbasis fuer Benutzerobjekte angibt, koennte der Zugriff auf einen Host dadurch unter praktisch allen Plattformen auf diesem Unterzweig begrenzt werden.

Da dieses System jedoch extrem unflexibel ist, ist der Verwaltungsaufwand relativ hoch. Wenn z.B. Benutzer verschiedenen Arbeitsgruppen angehoeren sollen oder oft unter ihnen wechseln, muessten Datensaetze mehrfach vorhanden sein, oder Verweise auf sie muessten gepflegt werden.
Zeile 1959: Zeile 1298:

Bei der SUN- und der PADL-nss_ldap-Lib kann man bei den Suchbasen fuer die
verschiedenen Datengruppen einen Filter einstellen. Alle Accounts, die nicht
auf diesen Filter zutreffen, werden in der entsprechenden Datengruppe nicht
beruecksichtigt.

Erklaerungen dazu sind unter den Punkten 4.1.1.1 (nss_ldap-Lib von PADL)
und 4.2.1 (Solaris ldapclient) und in den offiziellen Dokumentation der
jeweiligen Systeme zu finden.
Bei der SUN- und der PADL-nss_ldap-Lib kann man bei den Suchbasen fuer die verschiedenen Datengruppen einen Filter einstellen. Alle Accounts, die nicht auf diesen Filter zutreffen, werden in der entsprechenden Datengruppe nicht beruecksichtigt.

Erklaerungen dazu sind unter den Punkten 4.1.1.1 (nss_ldap-Lib von PADL) und 4.2.1 (Solaris ldapclient) und in den offiziellen Dokumentation der jeweiligen Systeme zu finden.
Zeile 1970: Zeile 1303:

Unter Samba gibt es mehrere Moeglichkeiten, eine bestimmten Gruppe von
Benutzern den Zugriff zu erlauben, bzw. zu gewaehren. Da Samba nur die
Accounts beruecksichtigt, die auch von den nss-Services der passwd-
Datenbank zugeordnet werden, kann man schon durch die Systemeinstellungen
der Maschine, auf der der Samba-Server laufen soll, die Liste der zu
beruecksichtigenden Accounts einschraenken. (siehe z.B. Abschnitt 5.1.1.5)

Desweiteren besteht die Moeglichkeit mit den Direktiven 'valid users' und
'invalid users' den Zugriff fuer UNIX- und Netgroups zu erlauben bzw.
verweigern. Weiteres dazu kann der Manpage zu smb.conf(5) entnommen werden.
Unter Samba gibt es mehrere Moeglichkeiten, eine bestimmten Gruppe von Benutzern den Zugriff zu erlauben, bzw. zu gewaehren. Da Samba nur die Accounts beruecksichtigt, die auch von den nss-Services der passwd- Datenbank zugeordnet werden, kann man schon durch die Systemeinstellungen der Maschine, auf der der Samba-Server laufen soll, die Liste der zu beruecksichtigenden Accounts einschraenken. (siehe z.B. Abschnitt 5.1.1.5)

Desweiteren besteht die Moeglichkeit mit den Direktiven 'valid users' und 'invalid users' den Zugriff fuer UNIX- und Netgroups zu erlauben bzw. verweigern. Weiteres dazu kann der Manpage zu smb.conf(5) entnommen werden.
Zeile 1983: Zeile 1308:
Zeile 1985: Zeile 1309:

Da die Passwoerter schon in der Antragsdatei gehasht sind, wird, wie bisher
auch, beim Erstellen des Accounts nur das UNIX-Passwort, aber kein Samba-
Passwort gesetzt. Soll der Account sich an einer Samba-Domain
authentifizieren koennen, muss dieses nachtraeglich erstellt werden.

Zum Verwalten der Passwoerter stehen mehrere Moeglichkeiten zur Wahl. Auf
Systemen die PAM verwenden, laesst sich ueber das passwd-Modul von PAM das
passwd-Kommando so konfiguerieren, dass darueber sowohl das UNIX- als auch
das Samba-Passwort im LDAP-Verzeichnis geandert werden kann. Ausserdem ist
in den OpenLDAP-Client-Tools ein Programm 'ldappasswd' enthalten, das es
ermoeglicht das UNIX-Passwort im LDAP-Verzeichnus zu veraendern. (siehe
Abschnitt 2.2.4)

Da ldappasswd aber mit DNs arbeitet ist dieses Tool eher fuer Techniker,
als fuer normale Benutzer geeignet.

Die 'smbldap'-Toolsammlung (http://www.iallanis.info/) enthaelt ein
nuetzliches Perlskript 'smbldap-passwd' mit dem Komfortabel sowohl UNIX-
als auch Samba-Passwoerter in einem Schritt geaendert werden koennen.

Desweiteren waere es auch ohne weiteres moeglich ein Web-GUI fuer normale
Benutzer zur Verfuegung zu stellen, mit dem sie ihre Passwoerter aendern
koennen.

Das manuelle Aendern eines Passwortes, z.B. per LDIF und ldapmodify, ist
ebenfalls moeglich. Dabei kann das Passwort sowohl in Klartext, als auch
als Hash in das LDAP-Verzeichnis geschrieben werden. Da der slapd mehrere
Hashschemas fuer Passwoerter unterstuetzt, muss man bei einem gehashten
Passwort angeben, welches Hashschema verwendet wird. Wird dies nicht
gemacht, wird der Hash als Klartextpasswort identifiziert. Das Hashschema
wird dabei in geschweiften Klammern ('{' und '}' ) gefolgt vom Hash selbst
angegeben.

Soll die Authentifizierung der Benutzer allein ueber PAM ablaufen, so ist
egal, welches Hashschema fuer die Passwoerter verwendet wird. Soll aber der
shadow-Service verwendet werden, so _muessen_ die Passwoerter mit {crypt}
gehasht sein.

Die unterstuetzten Hashschemas sind {CRYPT}, {MD5}, {SMD5}, {SSHA} und
{SHA}.

Bei den folgenden LDIF-Beispielen, bei dem das Passwort des Benutzers
'testbenutzer' ueberschrieben wird, lautet das Passwort immer 'test':
Da die Passwoerter schon in der Antragsdatei gehasht sind, wird, wie bisher auch, beim Erstellen des Accounts nur das UNIX-Passwort, aber kein Samba- Passwort gesetzt. Soll der Account sich an einer Samba-Domain authentifizieren koennen, muss dieses nachtraeglich erstellt werden.

Zum Verwalten der Passwoerter stehen mehrere Moeglichkeiten zur Wahl. Auf Systemen die PAM verwenden, laesst sich ueber das passwd-Modul von PAM das passwd-Kommando so konfiguerieren, dass darueber sowohl das UNIX- als auch das Samba-Passwort im LDAP-Verzeichnis geandert werden kann. Ausserdem ist in den OpenLDAP-Client-Tools ein Programm 'ldappasswd' enthalten, das es ermoeglicht das UNIX-Passwort im LDAP-Verzeichnus zu veraendern. (siehe Abschnitt 2.2.4)

Da ldappasswd aber mit DNs arbeitet ist dieses Tool eher fuer Techniker, als fuer normale Benutzer geeignet.

Die 'smbldap'-Toolsammlung (http://www.iallanis.info/) enthaelt ein nuetzliches Perlskript 'smbldap-passwd' mit dem Komfortabel sowohl UNIX- als auch Samba-Passwoerter in einem Schritt geaendert werden koennen.

Desweiteren waere es auch ohne weiteres moeglich ein Web-GUI fuer normale Benutzer zur Verfuegung zu stellen, mit dem sie ihre Passwoerter aendern koennen.

Das manuelle Aendern eines Passwortes, z.B. per LDIF und ldapmodify, ist ebenfalls moeglich. Dabei kann das Passwort sowohl in Klartext, als auch als Hash in das LDAP-Verzeichnis geschrieben werden. Da der slapd mehrere Hashschemas fuer Passwoerter unterstuetzt, muss man bei einem gehashten Passwort angeben, welches Hashschema verwendet wird. Wird dies nicht gemacht, wird der Hash als Klartextpasswort identifiziert. Das Hashschema wird dabei in geschweiften Klammern ('{' und '}' ) gefolgt vom Hash selbst angegeben.

Soll die Authentifizierung der Benutzer allein ueber PAM ablaufen, so ist egal, welches Hashschema fuer die Passwoerter verwendet wird. Soll aber der shadow-Service verwendet werden, so _muessen_ die Passwoerter mit {crypt} gehasht sein.

Die unterstuetzten Hashschemas sind {CRYPT}, {MD5}, {SMD5}, {SSHA} und {SHA}.

Bei den folgenden LDIF-Beispielen, bei dem das Passwort des Benutzers 'testbenutzer' ueberschrieben wird, lautet das Passwort immer 'test':
Zeile 2036: Zeile 1333:
Zeile 2045: Zeile 1341:
Zeile 2054: Zeile 1349:
Zeile 2063: Zeile 1357:

Diese LDIF-Daten koennten z.B. ldapmodify einfach in das LDAP-Verzeichnis
uebernommen werden.

Aus Sicherheitsgruenden ist es natuerlich nicht zu empfehlen, Passwoerter
in Klartext zu speichern. Davon abgesehen ist es praktisch jedem selbst
ueberlassen, wie er seine Passwoerter hasht. Nur fuer die Verwendung von
shadow-Passwoertern, wird man auf ein Schema ({crypt}) beschraenkt.
Diese LDIF-Daten koennten z.B. ldapmodify einfach in das LDAP-Verzeichnis uebernommen werden.

Aus Sicherheitsgruenden ist es natuerlich nicht zu empfehlen, Passwoerter in Klartext zu speichern. Davon abgesehen ist es praktisch jedem selbst ueberlassen, wie er seine Passwoerter hasht. Nur fuer die Verwendung von shadow-Passwoertern, wird man auf ein Schema ({crypt}) beschraenkt.
Zeile 2073: Zeile 1362:

Die momentane Regelung mit NIS sieht es vor, dass das Aendern der
Passwoerter nur auf einem Passworthost erlaubt ist. Die Umstellung auf LDAP
erlaubt es, dies per PAM auf jedem Host zu ermoeglichen.

Fuer die Uebergangsphase ist es vorgesehen, dass die Regelung mit dem
Passworthost bestehen bleibt und die NIS-Passwoerter per Cronjob in das
LDAP-Verzeichnis eingepflegt werden.
Die momentane Regelung mit NIS sieht es vor, dass das Aendern der Passwoerter nur auf einem Passworthost erlaubt ist. Die Umstellung auf LDAP erlaubt es, dies per PAM auf jedem Host zu ermoeglichen.

Fuer die Uebergangsphase ist es vorgesehen, dass die Regelung mit dem Passworthost bestehen bleibt und die NIS-Passwoerter per Cronjob in das LDAP-Verzeichnis eingepflegt werden.
Zeile 2083: Zeile 1367:

Die urspruenglich in /home/userdb/data/user gelegenen zusaetzlichen
Benutzerdaten sind von nun an in die Accountobjekte im LDAP-Verzeichnis
integriert. Aus Kompatibilitaetsgruenden wird das alte Format aber
weiterhin als readonly-Datei verfuegbar sein. Dafuer werden die
entsprechenden Daten regelmaessig durch ein Skript aus dem LDAP-Verzeichnis
exportiert.

Aenderungen an den userdb-Daten sind nur noch direkt im LDAP-Verzeichnis
moeglich. Dazu kann man die entsprechenden Attribute entweder manuell
veraendern oder das Web-GUI unter https://www.informatik.uni-bremen.de/
verwenden. Das Web-GUI entspricht dabei in seiner Funktionalitaet
dem fuer die alte Userdatendatenbank verwendeten GUI.

Die Verwendung des GUIs ist dabei dem manuellen Editieren von Daten
vorzuziehen, da es die Eingaben vor dem Schreiben in das Verzeichnis auf
Gueltigkeit prueft, wodurch fehlerhafte Daten vermieden werden koennen.

Da die Userdatenbank im alten Format fuer Lesezugriffe zur Verfuegung
steht, ergeben sich keine Aenderungen an rein lesenden Skripten, die auf
die userdb-Daten zugreifen. 

Eine Aufstellung aller veraenderten, entfallenden und neuen Skripten ist
unter Punkt 5.5 zu finden.

Fuer die Ubergangsphase wird das alte System vorerst bestehen bleiben. Die
Userdatenbankdaten werden dann per Cronjob regelmaessig in das LDAP-
Verzeichnis eingepflegt.
Die urspruenglich in /home/userdb/data/user gelegenen zusaetzlichen Benutzerdaten sind von nun an in die Accountobjekte im LDAP-Verzeichnis integriert. Aus Kompatibilitaetsgruenden wird das alte Format aber weiterhin als readonly-Datei verfuegbar sein. Dafuer werden die entsprechenden Daten regelmaessig durch ein Skript aus dem LDAP-Verzeichnis exportiert.

Aenderungen an den userdb-Daten sind nur noch direkt im LDAP-Verzeichnis moeglich. Dazu kann man die entsprechenden Attribute entweder manuell veraendern oder das Web-GUI unter https://www.informatik.uni-bremen.de/ verwenden. Das Web-GUI entspricht dabei in seiner Funktionalitaet dem fuer die alte Userdatendatenbank verwendeten GUI.

Die Verwendung des GUIs ist dabei dem manuellen Editieren von Daten vorzuziehen, da es die Eingaben vor dem Schreiben in das Verzeichnis auf Gueltigkeit prueft, wodurch fehlerhafte Daten vermieden werden koennen.

Da die Userdatenbank im alten Format fuer Lesezugriffe zur Verfuegung steht, ergeben sich keine Aenderungen an rein lesenden Skripten, die auf die userdb-Daten zugreifen.

Eine Aufstellung aller veraenderten, entfallenden und neuen Skripten ist unter Punkt 5.5 zu finden.

Fuer die Ubergangsphase wird das alte System vorerst bestehen bleiben. Die Userdatenbankdaten werden dann per Cronjob regelmaessig in das LDAP- Verzeichnis eingepflegt.
Zeile 2113: Zeile 1380:

An der Verwaltung der Benutzergruppen wird sich fuer den Anwender nichts
aendern. Die Aenderungen bestehen nur darin, dass die Gruppen nun
automatisch mit dem LDAP-Verzeichnis und nicht mehr mit NIS abgeglichen
werden.
An der Verwaltung der Benutzergruppen wird sich fuer den Anwender nichts aendern. Die Aenderungen bestehen nur darin, dass die Gruppen nun automatisch mit dem LDAP-Verzeichnis und nicht mehr mit NIS abgeglichen werden.
Zeile 2122: Zeile 1385:

Auch an der Verwaltung der Mountpoints in /etc/informatik/auto.home.d/ auf
bob wird sich von der Anwenderseite her nichts veraendern. Das Makefile
wurde so angepasst, dass ein entsprechendes Skript ausgefuehrt wird,
welches die Automountdaten mit dem LDAP-Server abgleicht und Aenderungen
in das Verzeichnis uebertraegt.
Auch an der Verwaltung der Mountpoints in /etc/informatik/auto.home.d/ auf bob wird sich von der Anwenderseite her nichts veraendern. Das Makefile wurde so angepasst, dass ein entsprechendes Skript ausgefuehrt wird, welches die Automountdaten mit dem LDAP-Server abgleicht und Aenderungen in das Verzeichnis uebertraegt.
Zeile 2132: Zeile 1390:

An dieser Stelle wird zu einen spaeteren Zeitpunkt eine Aufstellung aller
zentralen Skripte folgen, die im Zuge der Umstellung von NIS auf LDAP
veraendert werden. In der Uebergangsphase, in der NIS und LDAP parallel
betrieben werden sollen, werden vorerst alle Daten aus NIS und der
Userdatenbank mit per Cronjob ausgefuehrten Skripten in das LDAP-
Verzeichnis eingepflegt.

Ausnahmen sind (bis jetzt) Gruppen und Mountpoints. Die entsprechende
Skripte auf bob sind soweit angepasst, dass diese Daten direkt mit dem
LDAP-Verzeichnis synchronisiert werden.
An dieser Stelle wird zu einen spaeteren Zeitpunkt eine Aufstellung aller zentralen Skripte folgen, die im Zuge der Umstellung von NIS auf LDAP veraendert werden. In der Uebergangsphase, in der NIS und LDAP parallel betrieben werden sollen, werden vorerst alle Daten aus NIS und der Userdatenbank mit per Cronjob ausgefuehrten Skripten in das LDAP- Verzeichnis eingepflegt.

Ausnahmen sind (bis jetzt) Gruppen und Mountpoints. Die entsprechende Skripte auf bob sind soweit angepasst, dass diese Daten direkt mit dem LDAP-Verzeichnis synchronisiert werden.
Zeile 2152: Zeile 1402:
Zeile 2157: Zeile 1406:
Zeile 2162: Zeile 1410:

LDAP-Clientverwaltung

Einleitung

Diese Dokumentation gibt eine allgemeine Einfuehrung in das Thema LDAP. Ausserdem wird der clientseitige Umgang mit Open-LDAP am Fachbereich 3 der Universitaet Bremen beschrieben.

Viele der OpenLDAP-spezifischen Punkte werden nur grundlegend erkleart. Eine ausfuehrliche Dokumentation ist unter http://www.openldap.org/ zu finden.

1. Was ist LDAP?

LDAP steht fuer 'Lightweight Directory Access Protocol' und ist ein Protokoll, welches die Kommunikation zwischen Clients und einem Verzeichnisdienst beschreibt. Ein solcher Verzeichnisdienst ist eine im Netzwerk verfuegbare, hierarchische Datenbank, die Daten objektorientiert in einer Baumstruktur ablegt.

Angesprochen werden solche Objekte ueber den sogenannten Distinguished Name (DN), der aus seinem relativen Namen (Relative Distinguished Name, kurz RDN) und den RDNs der uebergeordneten Objekte bis zur Verzeichnisbasis zusammengesetzt ist.

Ein RDN ist dabei immer ein Attritbut des jeweiligen Objektes, in Verbindung mit seinem Wert. Hat ein Objekt z.B. ein Attribut 'cn' (common name), dessen wert 'egon' ist, kann der RDN des Objektes 'cn=egon' sein.

Welches Attribut fuer den RDN verwendet wird, ist letztendlich dem Ersteller des Objektes ueberlassen. Der Einfachheit und Datenkonsistenz wegen sollte es aber eine Einigung auf ein Bestimmtes RDN-Attribut fuer die jeweilig verwendeten Objekttypen geben. (Bei UNIX-Accounts ist es z.B. 'uid')

Angenommen dem Objekt mit dem RDN 'cn=egon' ist nur noch ein Objekt 'ou=People' (ou = organizationalUnit) uebergeordnet, welches wiederum der Basis 'dc=informatik,dc=uni-bremen,dc=de' untergeordnet ist, lautet der DN des Objektes 'cn=egon,ou=People,dc=informatik,dc=uni-bremen,dc=de'.

In der Regel koennen jedem Objekt in der Verzeichnisstruktur weitere Objekte untergeordnet werden. Ausnahme stellen dabei z.B. die uebergeordneten RDNs der Verzeichnisbasis dar. Ist z.B. Serverseitig der DN 'dc=informatik,dc=uni-bremen,dc=de' als Datenbasis festgelegt worden, koennen Daten nur untergeordnet zu diesem DN abgelegt werden. Uebergeordnete DNs, wie z.B. 'dc=uni-bremen,dc=de' muessten auf dem Server als eigenstaendige Datenbasis definiert werden, damit dort Daten abgelegt werden koennen.

Ein Objekt in einem Verzeichnis ist eine Sammlung von Attributen, die jeweils einen Typ haben und einen oder mehrere Werte enthalten. Die Syntax der Werte ist dabei abhaengig vom Attributtyp, genauso, wie die Anzahl von Werten, die ein Attribut aufnehmen kann.

Um eingrenzen zu koennen, welche Attribute ein bestimmtes Objekt aufnehmen kann, gibt es das besondere Attribut 'objectClass', welches schematische Regeln fuer ein Objekt festlegt, an die es sich halten muss. Dabei kann ein Objekt auch mehrere Objektklassen enthalten.

In einer Objektklasse wird z.B. festgelegt, welche Attribute ein Objekt enthalten muss und welche optional zur Verfuegung stehen. Ein Objekt kann keine Attribute aufnehmen, die nicht in mindestens einer seiner Objektklassen definiert sind und muss mindestens die Pflichtattribute aller seiner Objektklassen enthalten.

Attribute und Objektklassen werden in sogenannten Schemas definiert, die serverseitig eingebunden werden.

Um ungewollte Zugriffe auf Baeume, Objekte oder Attribute zu verhindern, stellt LDAP verschiedene Mechanismen zur Authentifikation von Benutzern und dem Einrichten von Zugriffsberechtigungen fuer diese zur Verfuegung.

2. Allgemeine Zugriffsmoeglichkeiten auf die Server/das LDAP-Verzeichnis

In diesem Abschnitt werden einige Werkzeuge erklaert, mit deren Hilfe man auf ein LDAP-Verzeichnis zugreifen kann.

Die beiden Standardports, die von LDAP verwendet werden, sind einmal der Port 389 (ldap://) fuer unverschluesselte Verbindungen und 636 (ldaps://) auf dem die Daten per TLS/SSL gesichert sind.

Da ldaps:// aber nicht offiziell dokumentiert ist, solle man die empfohlene Methode 'start_tls' ueber Port 389 (dazu spaeter mehr) vorziehen.

Fuer die Authentifikation am Server gibt es verschiedene Moeglichkeiten. Einmal die sogenannte 'simple bind' Methode, bei der die Authentifizierungsdaten einfach in Klartext an den Server uebermittelt werden. Diese Methode sollte aus Sicherheitsgruenden nur in Verbindung mit einer gesicherten TLS/SSL-Verbindung verwendet werden.

Die zweite Methode ist 'Simple Authentication and Security Layer' (SASL), welche wiederum verschiedene Mechanismen zur gesicherten Authentifizierung bereit stellt.

Welche Methode man bevorzugt, ist einem selbst ueberlassen. In diesem Dokument wird jedoch nur auf das 'simple bind' in Verbindung mit einer TLS/SSL-Verbindung eingegengen. Aus den offiziellen Dokumentationen der jeweiligen Tools kann man jedoch alles entnehmen, was fuer eine SASL- gestuetzte Authentifikation erforderlich ist.

SASL wird von den momentan laufenden LDAP-Servern nicht unterstuetzt. Daher wird ausdruecklich empfohlen, beider allen (!) Anfrage an den Server, die nicht als anonymer Benutzer getaetigt werden, TLS/SSL zu verwenden.

2.1 Access Control List

LDAP ermoeglicht die Verwendung komplexer ACLs, mit dessen Hilfe der Zugriff auf die Daten im Verzeichnis von ganzen Baeumen bis auf einzelne Attribute beschraenkt werden koennen. Als Zugriffskriterien lassen sich dabei Gruppenmitgliedschaften, allgemein LDAP-Filter, IP-Adressbereiche, eine mindestanforderung an die Verschluesselung und mehr angeben.

Die meisten dieser Kriterien sind auf Accounts im LDAP-Verzeichnis bezogen. Prinzipiell wird jedes Objekt in der Datenbank, welches das Attribut 'userPassword' enthaelt als Account behandelt und laesst somit eine Authentifizierung zu.

Es koennen unter anderem die folgenden Zugriffsarten gegeben werden: (eine hoehere Stufe schliesst die darunterliegenden ein. So darf 'read' z.B. auch 'compare' und 'auth')

none      Der User hat keinerlei Zugriff.

auth      Ein User schickt dem Server seine Benutzerdaten.
          Der Server vergleicht diese und gewahrt entweder Zugriff oder
          quittiert mit einem Fehler.

compare   Ein User schickt einen Datensatz an den LDAP-Server, mit einem DN
          eines bestehenden. Der Server vergleich diese und liefert true
          oder false.

read      Der User darf die Daten lesen.

write     Der User darf die Daten veraendern.

Dadurch lassen sich Dummyuser anlegen, die nur fuer die Verteilung von Zugriffsrechten verwendet werden koennen. Auf den aktiven LDAP-Servern sind solche Dummyuser unter dem DN 'ou=admin,dc=informatik,dc=uni-bremen,dc=de' abgelegt und werden z.B. verwendet, um bestimmten Skripten Zugriff auf nur die Daten zu gewaehren, die auch wirklich notwenidig sind.

Die Zugriffe auf die Daten im LDAP-Verzeichnis des FB3 sind nach den folgenden Kriterien beschraenkt: (Ausszug)

Benutzerdaten (Ausser Passwoerter)

Mitglieder der Gruppe fb3-t                                             write
Dummyuser uid=nsswitch,ou=System,dc=informatik,dc=uni-bremen,dc=de      read
Dummyuser uid=syncrepl,ou=System,dc=informatik,dc=uni-bremen,dc=de      read
Dummyuser uid=openid,ou=System,dc=informatik,dc=uni-bremen,dc=de        read
Dummyuser uid=adduser,ou=System,dc=informatik,dc=uni-bremen,dc=de       write
Alle authentifizierten Benutzer, bezogen auf ihre eigenen Daten         read

Passwoerter

Mitglieder der Gruppe fb3-t                                             write
Dummyuser uid=syncrepl,ou=System,dc=informatik,dc=uni-bremen,dc=de      read
Dummyuser uid=adduser,ou=System,dc=informatik,dc=uni-bremen,dc=de       write
Alle authentifizierten Benutzer, bezogen auf ihr eigenes Passwort       write
Anonyme Benutzer                                                        auth

Gruppen

Mitglieder der Gruppe fb3-t                                             write
Dummyuser uid=nsswitch,ou=System,dc=informatik,dc=uni-bremen,dc=de      read
Dummyuser uid=group,ou=System,dc=informatik,dc=uni-bremen,dc=de         write
Dummyuser uid=openid,ou=System,dc=informatik,dc=uni-bremen,dc=de        read
Dummyuser uid=syncrepl,ou=System,dc=informatik,dc=uni-bremen,dc=de      read

Netgroups

Dummyuser uid=nsswitch,ou=System,dc=informatik,dc=uni-bremen,dc=de      read
Dummyuser uid=netgroup,ou=System,dc=informatik,dc=uni-bremen,dc=de      write
Dummyuser uid=syncrepl,ou=System,dc=informatik,dc=uni-bremen,dc=de      read

auto_home

Dummyuser uid=autofs,ou=System,dc=informatik,dc=uni-bremen,dc=de        write
Alle                                                                    read

alle restlichen Daten

Anonyme Benutzer                                                        auth
Dummyuser uid=syncrepl,ou=System,dc=informatik,dc=uni-bremen,dc=de      read

Die Dummyuser mit den Schreibrechten sind fuer die Synchronisationsskripte erstellt worden. Der Dummyuser 'nsswitch' ist auf allen Clienthosts eingetragen, damit das System Zugriff auf die entsprechenden Daten hat. Der Dummyuser 'syncrepl' wird fuer die Synchronisation der Replicaserver benoetigt und hate Leserechte auf das gesamte Verzeichnis.

2.2 LDIF

LDIF ist die Abkuerzung fuer 'LDAP Data Interchange Format' und beschreibt ein textbasiertes Datenformat zur Darstellung von Informationen in einem LDAP-Verzeichnis.

Da LDAP lediglich ein Kommunikationsprotokoll fuer Verzeichnisdienste definiert, deren interne Datendarstellung herstellerspezifisch sein kann, wurde LDIF entwickelt, um einen einfachen Austausch von Daten auch zwischen heterogenen Systemen zu ermoeglichen.

Die erste Zeile eines Datensatzes enthaelt dabei immer den DN, gefolgt von von den Objektklassen, den Attributen und deren Werten. Der Abschluss einer Objektdefinition ist eine Leerzeile. Wie bereits weiter oben erwaehnt, kann ein Attribut, je nach Typ, auch mehrere Werte aufnehmen. In LDIF wird dies einfach durch das wiederholte auffuehren eines Attributes mit einem jeweils anderen Wert dargestellt.

Fuer die Darstellung gilt das Format '<Attributname>: <Attributwert>'

Laesst sich ein Attributwert nicht als Text darstellen, so wird er in base64-Kodierung nach einem doppelten Doppelpunkt (::) nach dem Attributnamen dargestellt.

'<Attributname>:: <base64-kodierter Attributwert>'

Dies wird z.B. fuer das Abbilden von Grafiken benoetigt. Eine JPEG-Grafik koennte z.B. wie folgt in LDIF abgebildet werden:

jpegPhoto:: /9j/4AAQSkZJRgABAAAAAQABAAD/2wBDABALD
 A4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQ
 ERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVG
 ...

Bei mehrzeiligen Wertzuweisungen ist zu beachten, dass nach einem Zeilenumbruch ein einzelnes Leerzeichen anzeigt, dass die Zeile eine Fortsetzung der vorangegangenen Zeile ist.

Hier ein Beispiel fuer einen Datensatz im LDIF Format:

dn: cn=testgruppe,ou=Group,dc=informatik,dc=uni-bremen,dc=de
objectClass: top
objectClass: posixGroup
cn: testgruppe
userPassword: *
gidNumber: 123
memberUid: mitglied1
memberUid: mitglied2
memberUid: ...

LDIF kann jedoch nicht nur vollstaendige Datensaetze abbilden, sondern auch Aenderungen an bestehenden Objekten beschreiben. In diesem Fall wird nach dem DN in der ersten Zeile des Datensatzes der Modus der Modifikationen angegeben, gefolgt von einer oder mehreren Aenderungsanweisungen, die jeweils durch eine Zeile die nur ein '-' enthaelt, voneinander getrennt werden.

Moechte man z.B. einem Objekt ein Attribut hinzufuegen und den Wert eines anderen Attributes veraendern, koennte ein LDIF-Datensatz wie folgt aussehen:

dn: cn=testgruppe,ou=Group,dc=informatik,dc=uni-bremen,dc=de
changetype: modify
add: description
description: Testeintrag im LDAP-Verzeichnis
-
replace: userPassword
userPassword: {crypt}neuespasswort

Ein weiteres Beispiel zum Umbenennen und Verschieben eines Objektes:

dn: cn=testgruppe,ou=Group,dc=informatik,dc=uni-bremen,dc=de
changetype: modrdn
newrdn: cn=gruppe
deleteoldrdn: 1
newsuperior: dc=informatik,dc=uni-bremen,dc=de

Weitere Beispiele und Beschreibungen sind in den Manpages unter ldif(5) zu finden.

Die technischen Spezifikationen von LDIF sind auf http://tools.ietf.org/html/rfc2849 einsehbar.

2.3 OpenLDAP-Utilities

Die OpenLDAP-Software bietet neben einem Serverprogramm auch diverse Client-Tools fuer die Kommunikation mit einem LDAP-Server an. Diese Tools arbeiten mit dem unter 2.1 beschriebenen LDIF.

Die drei wichtigsten Tools sind hier ldapsearch, ldapmodify und ldapdelete. Diese Tools verwenden eine gemeinsame, allgemeine Konfigurationsdatei ldap.conf. Genauso wie ldappasswd, mit dessen Hilfe man Passwoerter im LDAP-Verzeichnis aendern kann.

ACHTUNG: Die LDAP-Tools unter Solaris sind genauso benannt, wie die Open- LDAP-Tools, unterscheiden sich jedoch in der Benutzung! Die Unterscheide werden unter Punkt 2.4 genauer beschrieben.

2.3.1 ldapsearch

ldapsearch durchsucht den angegebenen LDAP-Server nach einem definierbaren Suchfilter und gibt die gefundenen Daten in LDIF zurueck.

Die allgemeinen Verbindungsdaten, wie Serveradresse, eventuelle Verschluesselung, Basis-DN fuer Suchanfragen usw. entnimmt das Programm der allgemeinen Konfigurationsdatei ldap.conf. Ist diese Datei nicht vorhanden oder noch nicht korrekt konfiguriert bzw. wenn man eigene Verbindungsdaten verwenden moechte, kann man diese auch als Option dem Programm uebergeben.

Beim folgenden Beispiel wird angenommen, dass keine ldap.conf vorhanden ist und alle Daten anonym lesbar und unter dem Basis-DN 'dc=informatik,dc=uni-bremen,dc=de' abgelegt sind:

ldapsearch -x -H "ldaps://ldap1.informatik.uni-bremen.de" \
-b "dc=informatik,dc=uni-bremen,dc=de" -s sub

-x gibt an, dass das 'simple bind' Verfahren zur Authentifizierung am Server verwendet werden soll. Gibt man diese Option nicht an, wird per default SASL verwendet. Durch das Weglassen von Authentifizierungsdaten wird man automatisch als anonymer Benutzer authentifiziert.

Mit der Option -H kann man einen oder mehrere, durch Leerzeichen getrennte, Server-URIs angeben. Eine weitere Option zum Definieren eines anzusprechenden Servers ist die Option -h, welche einen Hostnamen oder eine IP-Adresse erwartet. -H ist den Manpages nach die bevorzugte Methode Serveradressen anzugeben.

-b (base) definiert den Basis-DN, von dem die Suchanfrage ausgeht, waehrend -s (scope) angibt, wie tief die Suche in die untergeordneten Objekte vordringen soll. Die moeglichen Werte fuer -s sind 'base', was bedeutet, dass nur das Basis-DN-Objekt durchsucht wird, 'one', das alle direkt dem Basis-DN untergeordneten Objekte einschliesst und 'sub', was saemtliche Unterverzweigungen in die Suche einschliesst. Der Defaultwert fuer -s ist in der Regel 'sub'. Der Default fuer -b ist auf den LDAP-Servern des FB3 'dc=informatik,dc=uni-bremen,dc=de'.

Das Beispielkommando wuerde also saemtliche (anonym lesbaren) Daten, die im LDAP-Verzeichnis unter der Basis "dc=informatik,dc=uni-bremen,dc=de" abgelegt sind, ausgeben.

Durch die 'ldaps://'-Schreibweise der Server-URI, wird die Verbindung zum Server automatisch ueber Port 636 abgwickelt und dabei TLS/SSL verschluesselt.

Es ist ausserdem moeglich auch die Kommunikation auf Port 389 (ldap://) zu verschluesseln, indem man sich der 'start_tls'-Funktion bedient. Diese kann durch die Option -Z (TLS versuchen) bzw. -ZZ (TSL erzwingen) gestartet werden. Dabei ist zu beachten, dass sich 'ldaps://' und 'start_tls' nicht kombinieren lassen.

ldapsearch -x -ZZ -H "ldap://ldap1.informatik.uni-bremen.de" \
-b "dc=informatik,dc=uni-bremen,dc=de" -s sub

Bis auf -x und -Z[Z], koennen alle diese Optionen in der allgemeinen ldap.conf definiert werden. Die Authentifikation per SASL ist bei den OpenLDAP-Utilities ein unveraenderbarer default. Da die Server kein SASL unterstuetzen, muss immer (!) ein -x angegeben werden.

Ausserdem ist die Kombination ldap:// und -ZZ ldaps:// vorzuziehen, da ldaps:// nicht offiziell dokumentiert oder spezifiziert ist. Daher sollte immer (!) mit ldap:// und -ZZ gearbeitet werden.

Fuer die weiteren Beispiele wird angenommen, dass eine korrekt konfigurierte ldap.conf vorhanden ist und alle Verbindungsbedingten Daten automatisch von ldapsearch bezogen werden.

Um das Suchergebnis einzugrenzen, kann man einen Filter angeben, der mehrere, logisch miteinander verknuepfbare, Bedingungen zulaesst. LDAP- Suchfilter sind nach RFC 4515 definiert. (http://www.rfc-editor.org/rfc/rfc4515.txt)

Wird kein Filter angegeben, wird der default-Filter '(objectClass=*)' angewendet.

Einige Beispiele fuer Suchfilter:

(objectClass=posixAccount)

Es werden nur Objekte zurueckgegeben, die die Objektklasse 'posixAccount' enthalten.

(!(objectClass=posixAccount))

Es werden nur Objekte zurueckgegeben, die nicht die Objektklasse 'posixAccount' enthalten.

(&(objectClass=posixAccount)(!(uid=benutzer)))

Es werden nur Objekte zuruckgegeben, die die Objektklasse 'posixAccount' enthalten und die ein Attribut 'uid' haben, dessen Wert nicht 'benutzer' ist.

(|(uid=benutzer)(uid=t*))

Es werden nur Objekte zurueckgegeben, die ein Attribut 'uid' haben, welches den Wert 'benutzer' enthaelt oder mit dem Zeichen 't' beginnt.

(&(objectClass=posixAccount)(|(uid=benutzer)(uid=test)))

Es werden nur Objekte zurueckgegeben, die die Objektklasse 'posixAccount' enthalten und ein Attribut 'uid' haben, welches den Wert 'benutzer' oder 'test' enthaelt.

Filterbedingungen werden nur auf Attribute angewendet, die auch in einem Objekt vorhanden sind. Enthaelt ein Objekt im Suchbereich ein im Filter angegebenes Attribut nicht, so wird die ensprechende Bediungung bei diesem Objekt immer als nicht zutreffend behandelt.

Beispiel: Es sollen alle Objekte mit der Objektklasse 'posixAccount' mit dem Attribut 'uid=test' ausgegeben werden:

ldapsearch -x -ZZ "(&(objectClass=posixAccount)(uid=test))"

Sucht man auf diese Weise im LDAP-Verzeichnis, werden jeweils alle lesbaren Attribute der gefundenen Objekte angezeigt. Moechte man sich nur bestimmte Attribute anzeigen lassen, kann man diese einfach, nacheinander und mit Leerzeichen getrennt, hinter dem Filter angeben. Der DN wird aber in jedem Fall angezeigt und laesst sich nicht ausblenden.

Das folgende Kommado zeigt z.B. von allen gefundenen Objekten jeweils nur die Attribute 'uid' und 'objectClass' an, sofern diese im jeweiligen Objekt vorhanden sind.

ldapsearch -x -ZZ "(&(objectClass=posixAccount)(uid=test))" uid objectClass

Zu beachten waere noch, dass jedes Objekt im LDAP-Verzeichnis Attribute enthaelt, die in der Regel unsichtbar sind und automatisch vom slapd erzeugt werden, die sogenannten 'operativen Attribute'. Diese operativen Attribute enthalten unter anderem eine interne, im Verzeichnis einzigartige ID, den 'Universally Unique Identifier' (UUID), den Zeitpunkt an dem das Objekt erstellt wurde, den DN des Benutzers, der das Objekt erstellt hat und einiges mehr.

Die operativen Attribute eines Objektes kann man sich durch ein '+' in der Attributliste anzeigen lassen.

ldapsearch -x -ZZ "(objectClass=posixAccount)" +

Weitere Beispiele und eine Dokumentation aller verfuegbaren Optionen sind in der Manpage zu ldapsearch (ldapsearch(1)) zu finden.

2.3.2 ldapmodify

ldapmodify ermoeglicht es, Daten in LDIF in ein LDAP-Verzeichnis einzugeben. Das Tool verwendet dabei dieselben Verbindungsoptionen wie ldapsearch bzw. dieselbe Konfigurationsdatei ldap.conf.

Mit der Option -f kann man den Pfad zu einer Datei uebergeben, die LDIF- Daten enthaelt. Ansonsten erwartet ldapmodify eine Eingabe von Daten ueber die Standardeingabe.

Hat man mehrere Datensaetze hintereinander in einer Datei abgelegt, kann die Option -c sehr nuetzlich sein. Sie bewirkt, dass fehlerhafte Datensaetze uebersprungen werden und beim naechsten weitergemacht wird. Gibt man diese Option nicht an, bricht das Programm die laufende Operation ab, wenn die LDIF-Daten fehlerhaft sind, oder der Server einen Fehler zurueckgibt, z.B. weil ein Datensatz bereits vorhanden ist.

Standardmaessig erwartet ldapmodify Modifikationsanweisungen in LDIF. Mit der Option -a kann man jedoch auch vollstaendige Datensaetze in das LDAP- Verzeichnis einlesen.

Moechte man z.B. folgenden Datensatz in das Verzeichnis einfuegen, legt man diesen am besten in einer Datei ab und fuehrt das darauf folgende Kommando aus:

test.ldif

dn: cn=test,dc=informatik,dc=uni-bremen,dc=de
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: test
userPassword: {crypt}password

ldapmodify -x -ZZ -a -f test.ldif

Soll ein Datensatz veraendert werden, koennte dies z.B. so aussehen:

change.ldif

dn: cn=test,dc=informatik,dc=uni-bremen,dc=de
changetype: modify
replace: userPassword
userPassword: {crypt}neuesPasswort

ldapmodify -x -ZZ -f change.ldif

Da anonyme Benutzer normalerweise keine Schreibrechte im LDAP-Verzeichnis haben, muesste der Server diese Schreibvorgaenge jedoch mit einer Fehlermedung quittieren. Um sich am Server zu authentifizieren, kann man die Optionen -D und -W/-w verwenden.

Mit -D wird ldapmodify der DN eines Accountobjektes uebergeben, welches idealerweise die entsprechenden Berechtigungen hat, die gewuenschten Schreiboperationen durchfuehren zu koennen. -w erwartet, dass das Passwort des Accountobjektes in Klartext in der Kommandozeile uebergeben wird. Dies ist z.B. fuer skriptgesteuerte Aenderungen am LDAP-Verzeichnis nuetzlich. Durch die Benutzung von -W kann man das Passwort aber auch in einen Prompt eingeben.

-D und -W/-w verwenden die Methode 'simple auth' und sollten daher in Verbindung mit TLS/SSL angewendet werden.

ldapmodify -x -ZZ -f change.ldif -D "cn=admin,dc=informatik,dc=uni-bremen,dc=de" -W

ODER

ldapmodify -x -ZZ -f change.ldif -D "cn=admin,dc=informatik,dc=uni-bremen,dc=de" -w passwort

Weitere Beispiele und eine Dokumentation aller verfuegbaren Optionen sind in der Manpage zu ldapmodify (ldapmodify(1)) einsehbar.

2.3.3 ldapdelete

Im Gegensatz zu ldapsearch und ldapmodify arbeitet ldapdelete nicht mit LDIF, sondern mit einfachen DNs. Es gelten dieselben Optionen fuer Verbindungen zum Server wie bei ldapsearch und ldapmodify.

Wie ldapmodify verfuegt ldapdelete ueber eine Option -c, die bewirkt, dass Fehler zwar gemeldet werden, das Programm aber bis zum Ende weiterlaeuft.

Als Eingabe wird ein DN oder eine durch Zeilenumbrueche getrennte Liste von DNs erwartet, die aus dem LDAP-Verzeichnis entfernt werden sollen.

Als Quelle dient entweder die Kommandozeile, die Standardeingabe, oder eine Datei (-f).

Auch hier ist zu beachten, dass anonyme Benutzer in der Regel nicht die Berechtigung haben, Daten im LDAP-Verzeichnis zu veraendern. Darum ist es, wie bei ldapmodify, noetig sich am Server zu authentifizieren.

Will man z.B. den im ldapmodify-Beispiel erstellten Datensatz wieder aus dem Verzeichnis entfernen, kann man folgendes Kommando anwenden:

ldapdelete -x -ZZ -D "cn=admin,dc=informatik,dc=uni-bremen,dc=de" -W "cn=test,dc=informatik,dc=uni-bremen,dc=de"

Weitere Beispiele und eine Dokumentation aller verfuegbaren Optionen sind in der Manpage zu ldapdelete (ldapdelete(1)) einsehbar.

2.3.4 ldappasswd

ldappasswd nutzt dieselben Verbindungsoptionen wie alle anderen OpenLDAP- Utilities. Um Passwoerter zu aendern, muss man dem Tool Authentifizierungsdaten fuer einen LDAP-Benutzer mit entsprechenden Schreibrechten uebergeben, sowie den Accountnamen, dessen Passwoer geaendert werden soll.

Um z.B. als Benutzer 'testuser' sein eigenes Passwort zu aendern, kann man folgendes Kommando verwenden:

ldappasswd -D "uid=testuser,ou=People,dc=informatik,dc=uni-bremen,dc=de" -W -x -ZZ

Da keine weiteren Optionen uebergeben wurden, erstellt der LDAP-Server automatisch ein zufaelliges Passwort und gibt dieses danach aus, sofern es erfolgreich ins Verzeichnis geschrieben werden konnte.

Moechte man ein eigenes Passwort setzen, kann man dies mit den Optionen -s bzw. -S angeben. -s erwartet das neue Passwort in der Kommandozeile, waehrend -S einen Prompt zur Verfuegung stellt.

ldappasswd-D "uid=testuser,ou=People,dc=informatik,dc=uni-bremen,dc=de" -W -s pwd -x -ZZ

ODER

ldappasswd -D "uid=testuser,ou=People,dc=informatik,dc=uni-bremen,dc=de" -x -W -S -ZZ

Um das Passwort eines Benutzers zu aendern, der nicht dem entspricht, als der man sich mit -D am Server authentifiziert, kann man einfach den DN des jeweiligen Benutzers uebergeben.

Beispiel:

ldappasswd -x -ZZ -D "cn=admin,dc=informatik,dc=uni-bremen,dc=de" -W -S "uid=testuser,ou=People,dc=informatik,dc=uni-bremen,dc=de"

Ob und wie per ldappasswd erstellte Passwoerter gehasht werden, wird auf der Serverseite festgelegt.

2.4 Solaris LDAP-Utilities

Wie unter Punkt 2.3 beschrieben, haben die LDAP-Tools unter Solaris die selben Namen, wie die OpenLDAP-Tools und sind daher leicht zu verwechseln. Die grundlegende Bedienung ist zwar die selbe, wie bei den OpenLDAP-Tools, jedoch nicht voellig identisch.

So erwarten die Sun-Tools z.B. immer einen Base-DN (-b) und einen Suchfilter. Beispiel:

ldapsearch -x -b "dc=informatik,dc=uni-bremen,dc=de" obejctclass=*

Ausserdem muss bei einer SSL/TLS-Verbindung anscheinend immer der Pfad zum Zertifikat angegeben werden (-P).

ldapsearch -x -Z -b "dc=informatik,dc=uni-bremen,dc=de" -P /var/ldap obejctclass=*

2.5 Perl-Skripte

Perl bietet mit der Bibliothek Net::LDAP eine komfortable Moeglichkeit eine Verbindung zu einem LDAP-Server herzustellen und Datensaetze aus ihm auszulesen und zu veraendern.

Dabei ist es sowohl moeglich Daten in LDIF zu importieren/exportieren, als auch ueber entsprechende Methoden Daten in oder aus Variablen zu lesen/schreiben.

Die benoetigten Dateien und eine ausfuehrliche Dokumentation sind unter http://ldap.perl.org/ zu finden.

Die meisten Linux Distributionen sollten diese Lib in ihren Standard- Repositories haben. (z.B. perl-LDAP unter Fedora 7 oder libnet-ldap-perl unter Debian 4)

Da einige der ueberarbeiteten und neuen Verwaltungsskripte auf diese Bibliothek zurueckgreifen (mehr unter Abschnitt 5.), sollte diese zumindest auf allen Systemen, von denen aus administrative Aufgaben erfuellt werden, installiert sein.

2.6 .htaccess

Mit Webservern, die LDAP unterstuetzen, kann auch .htaccess Authentifizierungsdaten von einem LDAP-Server beziehen.

Wichtige Voraussetzung bei Apache 2.2 die Einbindung der Module "mod_ldap" und "mod_authnz_ldap"in der httpd.conf:

   LoadModule ldap_module modules/mod_ldap.so
   LoadModule authnz_ldap_module modules/mod_authnz_ldap.so

und der folgende globale Eintrag n der httpd-ssl.conf:

   LDAPTrustedGlobalCert CA_BASE64 /Pfad_zum_Root_Zertifikat/cacert.crt

Im nachfolgenden ".htaccess" Beispiel koennen sich nur Mitglieder der Gruppe fb3t mit ihrem unix-Passwort anmelden:

   AuthType Basic
   AuthName "private area"
   AuthBasicProvider ldap

   AuthLDAPURL "ldaps://ldapfarm.informatik.uni-bremen.de/ou=People,dc=informatik,dc=uni-bremen,dc=de?uid?sub?(objectClass=*)"
   AuthLDAPBindDN uid=nsswitch,ou=System,dc=informatik,dc=uni-bremen,dc=de
   AuthLDAPBindPassword "secret"

   AuthLDAPGroupAttribute memberUid
   AuthLDAPGroupAttributeIsDN off
   Require ldap-group cn=fb3t,ou=Group,dc=informatik,dc=uni-bremen,dc=de

Eine ausfuehrliche Dokumentation der Apache-Module 'mod_ldap' und 'mod_authnz_ldap' koennen der offiziellen Apache-Dokumentation entnommen werden.

3. Aufbau der Server

Als Server wird der slapd (Standalone LDAP Deamon) von OpenLDAP, mit einem Berkeley-DB-Backend, unter Solaris 10 verwendet.

Die momentan aktiven Server sind ldap-master, ldap1, ldap2 und ldap3.

ldap-master ist dabei der Masterserver von dem die Replicaserver ldap1, ldap2 und ldap3 ihre Daten beziehen. Schreiboperationen sind nur auf dem Masterserver erlaubt. Versucht man schreibend auf einen der Replicaserver zuzugreifen, antwortet dieser mir einem Verweis (referral) auf ldap-master.

Die Synchronisation der Replicaserver erfolgt push-basiert, was bedeutet, dass der Masterserver alle Schreiboperationen ohne Verzoegerung an die Replicaserver weitergibt.

Replicaserver dienen dem Zweck der Daten- und Ausfallsicherheit, sowie der Lastverteilung. So koennen z.B. in der ldap.conf mehrere LDAP-Server angegeben werden, die der Reihe nach angesprochen werden, falls einer nicht erreichbar ist. Alternativ kann man als Serveradresse ldapfarm verwenden, von der aus alle LDAP-Anfragen gleichmaessig auf die Server verteil werden.

3.1 Verwendete Schemas

Wie in Abschnitt 1. beschrieben, kann innerhalb eines Objektes mit dem Attribut 'objectClass' festgelegt werden, welche Attribute das jeweilige Objekt aufnehmen kann. Die verschiedenen Objektklassen und deren Attribute wiederum werden serverseitig in sogenannten Schemas definiert.

In diesem Abschnitt wird nur grob angesprochen, welche Schemas auf den Servern eingebunden sind und was diese enthalten.

core.schema, cosine.schema, inetorgperson.schema

Die Kernschemas, die grundlegende Objektklassen und Attribute nach dem X.500-Standard zur Verfuegung stellen. Standardmaessig im OpenLDAP-Paket enthalten.

nis.schema

Das NIS-Schema stellt Objektklassen und Attribute zur Abbildung von UNIX- Accounts, Gruppen, Automount-Maps, usw. im Verzeichnisdienst zur Verfuegung. Im OpenLDAP-Paket enthalten.

samba.schema

Das Samba-Schema ermoeglicht es, einen Samba-PDC an den LDAP-Service anzubinden, und die zusaetzlichen Accountdaten in UNIX-Accountobjekten einzubetten. Von samba.org bezogen, bzw. im Samba-Paket enthalten.

autofs.schema

Ermoeglicht die Implementierung von einheitlichen Automount-Maps, die mit nur geringem Aufwand plattformuebergreifend anwendbar sind. Im OpenLDAP-Paket enthalten.

userdb.schema

Das userdb-Schema ist ein selbsterstelltes Schema, welches auf das NIS- Schema aufbaut und Attribute aus der Userdatenbank /home/userdb/data/user ergaenzt, die nicht im NIS-Schema enthalten sind.

pykota.schema

Stellt Objektklassen und Attribute zur Verwaltung der Druckerquota bereit. http://www.pykota.com/

3.2 Gliederung der Datenbank

Wie in Abschnitt 1. erwaehnt, ist die Datenbank in einer hierarchischen Baumstruktur organisiert. Die Wurzelebene dieser Struktur enthaelt ein virtuelles Objekt mit der Klasse 'OpenLDAProotDSE', welches aus der Konfiguration des Servers erstellt wird.

Ausserdem enthaelt das rootDSE-Objekt Informationen ueber den Namenskontext der Datenbank, die verwendeten Schemas und die unterstuetzten Zugriffs- und Kontollmethoden.

Der DN des rootDSE-Objektes ist "", also ein leerer String. Eine Liste der eingebundenen Schemas ist unter dem DN "cn=subschemas" zu finden, waehrend die Konfiguration des Servers unter "cn=config" angesprochen werden kann.

Das OpenLDAProotDSE-Objekt eines LDAP-Servers kann wie folgt ausgelesen werden:

ldapsearch -x -ZZ -b "" -s base +

Da fast alle Inhalte des rootDSE-Objektes zu den operativen Attributen gehoeren, muss man das '+' im Bereich der Attributliste angeben, um diese sehen zu koennen.

Die Basis fuer die eigentlichen Nutzdaten des LDAP-Server kann man dem Attribut 'namingContexts' entnehmen. Da ein LDAP-Server mehr als nur eine Datenbasis zur Verfuegung stellen kann, kann dieses Attribut auch mehrere Werte enthalten.

Die Daten unter dem DN "dc=informatik,dc=uni-bremen,dc=de" sind zwecks Strukturierung und Administrierbarkeit unter anderem in die folgenden Organisationseinheiten (ou = organizationalUnit) unterteilt:

3.2.1 Benutzeraccounts (ou=People)

Die Objekte fuer Benutzeraccounts sind unter dem DN "ou=People,dc=informatik,dc=uni-bremen,dc=de" zu finden und aufbauend auf das NIS-Schema als UNIX-Account angelegt. Sie enthalten zusaetzlich noch Samba-Attribute, welche es einem Samba-Server ermoeglichen sie als Samba- Domainaccounts wahrzunehmen. Ausserdem sind Attribute zur Einbindung der Benutzerdatenbank des FB3 enthalten.

Ein vollstaendiges Accountobjekt ist wie folgt aufgebaut:

dn: uid=testaccount,ou=People,dc=informatik,dc=uni-bremen,dc=de
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
objectClass: UDBentry
objectClass: sambaSamAccount
##### NIS-Attribute
# Accountname
uid: testaccount
# UNIX-Passwort
userPassword: {crypt}mKA7Wa6cUWxUc
# Account ID
uidNumber: 12345
# Gruppen ID
gidNumber: 114
# Login Shell
loginShell: /usr/local/bin/bash
# Pfad zum Homeverzeichnis
homeDirectory: /home/testaccount
# Vollstaendiger Name
cn: Mustermann, Martin
# gecos
gecos: Martin Mustermann, Raum xxx, Tel: 234
##### userdb-Attribute
# Status (S|M|X...)
UDBstatus: S
# Matrikelnummer
UDBmatnr: 23456
# Chipkartennummer
UDBkanr: 1234
# Datum der Accounterstellung
UDBdate: 2008-02-26
# Studiengang/Fachbereich
UDBstuga: Informatik
# Kommentar
UDBcomment: Dies ist ein Kommentar
# Titel
UDBtitel: Dr.
# Grund fuer Accountsperrung
UDBlocked: aus_testgruenden_gesperrt-2008-02-26
# Datum fuer Ablauf des Accounts
UDBexpires: 2008-02-27
# Begruendung fuer Ablauf des Accounts
UDBexpreason: laeuft aus testgruenden ab
# Optionales Attribut zur Zugriffsbeschraenkung auf bestimme Hosts
# Dieses Attribut kann beliebig viele Werte aufnehmen
UDBhostaccess: test
UDBhostaccess: test2
##### Samba-Attribute
# Samba SID
sambaSID: S-1-5-21-3665695678-2981675336-587275816-123
# Passwort
sambaLMPassword: 01FC5A6BE7BC6929AAD3B435B51404EE
sambaNTPassword: 0CB6948805F797BF2A82807973B89537
# Verschiedene von Samba benoetigte Daten
sambaPwdLastSet: 0
sambaPwdCanChange: 0
sambaPwdMustChange: 2147483647
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
# Accountflaggs
sambaAcctFlags: [U]
# Anzeigename, der z.B. im Windows XP Startmenue erscheint
displayName: Martin Mustermann

Zu den verwendeten Objektklassen:

Zum NIS-Schema gehoeren auch die Objektklassen 'posixAccount' und 'shadowAccount', die jeweils einen Eintrag in der /etc/passwd und der /etc/shadow repraesentieren.

Die Objektklasse 'UDBentry' wird im selbst erstellten userdb-Schema definiert und ergaenzt das NIS-Schema um die fuer die Userdatenbank des FB3 benoetigten Attribute.

sambaSamAccount gehoert zum Samba-Schema und ergaenzt Attribute, die ein Samba-Server benoetigt, um ein solches Objekt als Samba-Account mitverwenden zu koennen.

3.2.2 Gruppen (ou=Group)

Gruppen sind unter der Organisationseinheit ou=Group untergebracht und wie bei den Accounts nach dem NIS-Schema als UNIX-Gruppen deklariert. Auch sie enthalten zusaetzlich Samba-Attribute, welche es einem Samba-Server ermoeglicht sie sie als Domaingruppen zu mappen.

Ein vollstaendiges Gruppenobjekt ist wie folgt aufgebaut:

dn: cn=fb3t,ou=Group,dc=informatik,dc=uni-bremen,dc=de
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
##### NIS Atribute
# Name der Gruppe
cn: fb3t
# Gruppenpasswort
userPassword: *
# Gruppen ID
gidNumber: 495
# Liste von Accountnamen, die Mitglied der Gruppe sind
memberUid: bine
memberUid: cabo
memberUid: cboehm
memberUid: cyu
memberUid: .....
##### Samba-Attribute
# Samba-SID
sambaSID: S-1-5-21-3665695678-2981675336-587275816-2345
# Samba-Gruppentyp
sambaGroupType: 2

Zu den verwendeten Objektklassen:

Die Objektklasse 'posixGroup' ist Teil des NIS-Schemas und repraesentiert einen Eintrag in der /etc/group, waehrend 'sambaGroupMapping' aus dem Samba-Schema es einem Samba-Server erlaubt, diese Gruppe als Samba- Domaingruppe zu verwenden.

3.2.3 Mountpoints (ou=Mounts)

Automount-Maps, fuer den Einsatz mit autofs, sind unter dem Objekt mit dem DN "ou=Mounts,dc=informatik,dc=uni-bremen,dc=de" abgelegt, waehrend die Mastermap den DN "ou=auto.master,dc=informatik,dc=uni-bremen,dc=de" traegt.

Eine Mountmap, wie z.B. fuer die Homeverzeichnisse, ist wiederum eine Organisationseinheit, die ou=Mounts untergeordnet ist. Die Mastermap verweist, wie bei dem dateigestuetzten Aequivalent, auf die jeweiligen Maps in ou=Mounts.

Die Verwendung einer LDAP-gestuetzten Mastermap ist optional. Die Verwendung von Automount-Maps wird im Abschnitt fuer die Einrichtung von Clients weiter erlaeutert.

Ein vollstaendiger Mountpointeintrag sieht wie folgt aus:

dn: cn=peter,ou=auto_home,ou=Mounts,dc=informatik,dc=uni-bremen,dc=de
objectClass: automount
cn: peter
automountInformation: pierre:/export/home/stud/&

Ein Eintrag in der Mastermap ist identisch mit einem solchen Mountpoint- Eintrag. Im Attribut 'automountInformation' wird dabei auf die entsprechende Automount-Map verwiesen. Dieser Verweis kann entweder eine lokale Datei sein, die natuerlich auf jedem System, das diese Map verwenden soll, vorhanden sein muss, oder das Schluesselwort 'ldap' gefolgt von einem Doppelpunkt (:) und dem DN der gewuenschten Map im LDAP- Verzeichnis.

Der Eintrag fuer die Homedirectories in der auto.master Map koennte z.B. wie folgt aussehen:

dn: cn=/home,ou=auto.master,dc=informatik,dc=uni-bremen,dc=de
objectClass: automount
cn: /home
automountInformation: ldap:ou=auto_home,ou=Mounts,dc=informatik,dc=uni-br
 emen,dc=de

3.2.4 Netgroup (ou=Netgroup)

Die Netgroups, die unter anderem fuer den hostbasierten SSH-Zugriff verwendet werden, sind in der Organisationseinheit Netgroup untergebracht, und auch sie bauen auf dem NIS-Schema auf.

Da es bei LDAP, genausow wie bei NIS, zu Problemen kommen kann, wenn eine Netgroup zu viele Mitglieder hat, gibt es auch hier die Moeglichkeit eine Gruppe in mehrere Untergruppen aufzuspalten.

Eine Netgroup koennte z.B. wie folgt abgebildet werden:

dn: cn=trhosts,ou=Netgroup,dc=informatik,dc=uni-bremen,dc=de
objectClass: top
objectClass: nisNetgroup
# Name der Netgroup
cn: trhosts
# Verweise auf weitere Netgroups
memberNisNetgroup: trhosts0
memberNisNetgroup: trhosts1
memberNisNetgrpup: ...

dn: cn=trhosts0,ou=Netgroup,dc=informatik,dc=uni-bremen,dc=de
objectClass: top
objectClass: nisNetgroup
# Name der Netgroup
cn: trhosts0
# Eintraege in der Netgroup
nisNetgroupTriple: (herzog1.home.informatik.uni-bremen.de,-,)
nisNetgroupTriple: (herzog2.home.informatik.uni-bremen.de,-,)
nisNetgroupTriple: ...

4. Einrichten von Clients

Dieser Abschnitt beschreibt, wie man Clients verschiedener Plattformen so einrichtet, dass Benutzer sich mit LDAP-Accounts an ihnen anmelden koennen.

Skripte, die die Konfiguration der wichtigsten Plattformen automatisch abwickeln, liegen unter /home/ldap bereit.

4.1 Linux allgemein

Die meisten Linux-Distibutionen pflegen die OpenLDAP-Software in ihren Standardrepositories, was das Einrichten von Linux-Clients fuer einen OpenLDAP-Server sehr erleichtert.

Die Pfade zu den Konfigurationsdateien koennen sich dabei in den verschiedenen Distributionen voneinander unterscheiden, doch der Aufbau ist bei allen derselbe.

Zu beachten ist, dass es meistens mindestens zwei Konfigurationsdateien fuer LDAP gibt. Einmal ist da die allgemein fuer die OpenLDAP-Tools geltende und dann noch mindestens eine fuer nsswitch und PAM. Ausfuehrliche Dokumentationen fuer diese Konfigurationsdateien koennen in den jeweiligen Manpages eingesehen werden.

Auf die Konfiguration der Authentifizierung unter bestimmten Distributionen wird in den folgenden Unterpunkten genauer eingegangen. Die allgemeine Konfiguration sollte jedoch ueberall etwa so aussehen, um mit den laufenden LDAP-Servern zu arbeiten:

ldap.conf (in der Regel unter /etc/ldap oder /etc/openldap zu finden)

# Liste von LDAP Servern; ist ein Server nicht ereichbar, wird der jeweils
# naechste in der Liste angesprochen (mit Leerzeichen getrennt)
uri     ldaps://ldapfarm.informatik.uni-bremen.de/

# Basis-DN, unter dem das LDAP-Verzeichnis standardmaessig durchsucht wird
base    dc=informatik,dc=uni-bremen,dc=de

# Verifizierung des Server-CA-Zertifikats erzwingen
tls_reqcert demand
# Einbindung des root-CA-Zertifikats zur Verifizierung
tls_cacert /etc/openldap/certs/cacert.pem

Fuer eine sichere TLS/SSL-Verbindung muss das root-CA-Zertifikate der Zertifizierngsstelle eingebunden werden. (www.ca.informatik.uni-bremen.de) Dabei ist zu beachten, dass bei TLS/SSL gesicherten Verbindungen immer der vollstaendige Domainname des jeweiligen Servers verwendet werden muss!

Moechte man die Serverzertifikate nicht verifizieren, kann man die Option 'tls_reqcert' auf 'never' setzen.

4.1.1 Fedora 7

Folgende Packages werden unter Fedora 7 fuer die Einrichtung einer Benutzerauthentifizierung per LDAP benoetigt:

openldap
openldap-clients
nss_ldap

(nss_ldap enthaelt gleichzeitig die benoetigten PAM-Bibliotheken.)

Das Paket nss_ldap wird ueber die Datei /etc/ldap.conf konfiguriert, waehrend die Konfigurationsdatei der openldap-client-Tools unter /etc/openldap/ldap.conf zu finden ist.

4.1.1.1 nsswitch-Services und Benutzerauthentifikation

Um eine Benutzerauthentifikation per LDAP zu ermoeglichen und die von den nss-Services benoetigten Daten aus LDAP zu verwenden, sind die folgenden Dateien relevant:

/etc/openldap/ldap.conf
/etc/ldap.conf
/etc/ldap.secret
/etc/nsswitch.conf
/etc/pam.d/system-auth

Die Datei /etc/openldap/ldap.conf sollte hierbei wie im Beispiel unter Abschnitt 4.1 gestaltet werden.

Die /etc/ldap.conf koennte z.B. wie folgt aussehen:

# Liste von LDAP Servern; ist ein Server nicht erreichbar, wird der
# jeweils naechste in der Liste angesprochen (mit Leerzeichen getrennt)
#
# WICHTIG: Auf Fedora-Systemen kann es zu Verbindungsproblemen kommen, wenn
# der '/' am Ende des URI fehlt! Dieser Fehler hat bei Tests dazu gefuehrt,
# dass das System nicht mehr gebootet werden konnte!
#
uri     ldap://ldapfarm.informatik.uni-bremen.de/

# Basis-DN, unter dem das LDAP-Verzeichnis standardmaessig durchsucht wird
base    dc=informatik,dc=uni-bremen,dc=de

# Sollten die Benutzerdaten nicht anonym einsehbar sein, wird ein
# LDAP-Account (proxyuser) mit den entsprechenden Leserechten benoetigt
binddn cn=nsswitch,ou=Proxyusers,dc=informatik,dc=uni-bremen,dc=de
bindpw nsswitchread

# Mit pam_filter kann man den Zugriff auf den Host anhand eines Suchfilters
# beschraenken. Es werden alle Benutzer von den nss-Services erkannt, aber
# nur die Accounts, die in diese Filter passen, duerfen sich einloggen
# (Benutzung von PAM vorrausgesetzt)
#pam_filter uid=a*

# Kontext fuer nsswitch-Abfragen
# Syntax:
# nss_base_XXX          base?scope?filter
# 'scope' beschreibt dabei, wie der angegebene DN durchsucht werden soll.
# Moeglich sind die Werte 'base' (nur das Objekt des DN selbst), 'one'
# (alle unmittelbar dem Objekt untergeordneten Objekte) und 'sub'
# (rekursiv alle Objekte, die dem Objekt untergeordnet sind)
# Fuer 'filter' kann ein LDAP-Suchfilter eingesetzt werden, um die Liste
# der von den nss-Services gelisteten Benutzer einzugrenzen.
nss_base_passwd         ou=People,dc=informatik,dc=uni-bremen,dc=de?one
nss_base_group          ou=Group,dc=informatik,dc=uni-bremen,dc=de?one
nss_base_netgroup       ou=Netgroup,dc=informatik,dc=uni-bremen,dc=de?one

# Lokale Benutzer, bzw. Benutzer bei denen angenommen wird, dass sie
# nicht im LDAP-Verzeichnis vorhanden sein sollten und somit bei Abfragen
# ignoriert werden
nss_initgroups_ignoreusers root,ldap,named,avahi,haldaemon

# Initialisierung der TLS-Verbindung ueber Port 389
ssl start_tls

# Verifizierung des Server-CA-Zertifikats erzwingen
tls_reqcert demand
# Einbindung des root-CA-Zertifikats zur Verifizierung
tls_cacert /etc/openldap/certs/cacert.pem

Mit der Option 'pam_filter', ist es moeglich den Zugriff auf den Host auf LDAP-Benutzer zu beschraenken, die auf einen LDAP-Suchfilter passen. Nur Benutzer, die in das Suchmuster fallen, koennen sich einloggen. Der Rest wird von den nsswitch-Services zwar erfasst, aber alle Loginversuche werden abgelehnt.

Ausserdem ist es moeglich, die von den nsswitch-Services zu verwendeten Objekte auf die selbe Weise zu beschraenken. Mit den 'nss_base_*' Optionen kann man nicht nur die Suchbasis fuer den jeweiligen Service definieren, sondern auch einen LDAP-Suchfilter uebergeben. Es werden jeweils nur Objekte fuer diesen Service beruecksichtigt, die auf den Suchfilter passen.

Damit die nsswitch-Services, wie passwd, group usw. funktionieren, muessen diese Lesezugriff auf die entsprechenden Daten haben. Zu diesem Zweck kann man sogenannte 'Proxyuser' einrichten, dessen einziger Zweck es ist, bestimmte Berechtigungen im LDAP-Verzeichnis zu erhalten und damit Zugriff auf bestimmte Daten zu gewahren.

Es koennen zwei solcher Benutzer in der Konfigurationsdatei angegeben werden. Einmal einer fuer die allgemein zugaenglichen nss-Services, der es Benutzernamen, Gruppen usw. auslesen kann und einer fuer administrative Aufgaben, wie das Auslesen der der Passworthashes fuer den shadow-Dienst, oder das Aendern von Passwoertern.

Da die Benutzer aber Schreibrechte auf ihre eigene Passwoerter haben und die Passworthashes durch die Verwendung von PAM nicht aktiv ausgelesen werden muessen, muss nur der Proxyuser fuer die normalen nsswitch-Dienste angegeben werden.

Gibt man dennoch den administrativen Proxyuser an, so muss dieser Schreibrechte auf die Benutzerpasswoerter haben, damit diese sie aendern koennen. (AUS SICHERHEITSGRUENDEN NICHT ZU EMPFEHLEN!)

Da zur Authentifizierung der Proxyuser die 'simple bind' Methode verwendet wird, sollte auf jeden Fall darauf geachtet werden eine TLS/SSL-gesicherte Verbindung zum Server herzustellen.

In diesem Fall wird das durch die Verwendung von 'ssl start_tls' erreicht. Eine zweite Moeglichkeit besteht darin als URI ldaps:// zu verwenden. Dabei ist aber zu beachten, dass 'ssl start_tls' und ldaps:// sich nicht kombinieren lassen. 'ssl start_tls' ist ldaps:// vorzuziehen.

Aus Sicherheitsgruenden sollten Proxyuser nicht mehr Rechte im LDAP-Verzeichnis haben, als unbedingt notwendig. Da die Passwoerter in Klartext abgelegt sind und auf allen Clients vorhanden sein muessen, reicht es bereits, wenn ein Angreifer in einen Client einbricht und diese Dateien auszuliest, um Zugriff auf das LDAP-Verzeichnis zu erlangen.

Aus diesem Grund sollten nur die notwendigsten Leserechte und wenn moeglich keinerlei Schreibrechte an diese Accounts vergeben werden. Besonders den Proxyuser fuer die nss-Services betreffend, da sein Passwort fuer alle Benutzer lesbar ist.

Die einzige Moeglichkeit, diese Methode zu umgehen, waere der Einsatz von Kerberos, was aber einen bedeutenden Mehraufwand mit sich bringen wuerde.

Um nun die nss-Services passwd, group und netgroup zu veranlassen das LDAP-Verzeichnis nach Daten zu durchsuchen, muessen folgende Anpassungen in der Datei /etc/nsswitch.conf vorgenommen werden:

Auszug aus /etc/nsswitch.conf

passwd:         files ldap
shadow:         files
group:          files ldap
netgroup:       files ldap

Derzeit sind nur passwd, shadow, group, netgroup und automount (dazu spaeter mehr) im LDAP-Verzeichnis enthalten.

Es wird empfohlen die Passwoerter _nicht_ per shadow vom LDAP-Server zu beziehen, sondern die Authentifikation der Benutzer ueber PAM abzuwickeln. Fuer den shadow-Service ist es zwingend erforderlich, dass alle Passwoerter als 'crypt'-Hash im LDAP-Verzeichnis vorhanden sind. Da es aber grundsaetzlich meoglich ist, dass dies nicht der Fall ist und PAM unabhaengig vom Format des Passwortes funktioniert, ist PAM shadow vorzuziehen.

Ausserdem ermoeglicht PAM es, den Zugriff auf den Host, auf bestimme Benutzer zu beschraenken. (siehe 'pam_filter' im Konfigurationsbeispiel weiter oben)

Um PAM fuer LDAP zu konfigurieren, muss die Datei /etc/pam.d/system-auth wie folgt angepasst werden:

/etc/pam.d/system-auth (Beispiel)

#%PAM-1.0
auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        sufficient    pam_ldap.so try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        required      pam_deny.so

account     sufficient    pam_unix.so
account     sufficient    pam_ldap.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     required      pam_permit.so

password    requisite     pam_cracklib.so try_first_pass retry=3
password    sufficient    pam_ldap.so
password    sufficient    pam_unix.so md5 shadow nis nullok use_first_pass use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_ldap.so

Die Aenderungen sollten sofort aktiv werden und koennen getestet werden, indem man z.B. 'id' auf einen Benutzer im LDAP-Verzeichnis anzuwenden,oder einfach versucht sich mit einem LDAP-Benutzer am System anzumelden.

4.1.1.2 autofs

Da autofs die allgemeine Konfigurationsdatei /etc/openldap/ldap.conf und nicht die fuer nsswitch und PAM verwendet, muessen die automount-Daten anonym lesbar sein. Die einzige Alternative, waehre die Verwendung von SASL, da autofs 'simple bind' nicht unterstuetzt.

Fuer die Konfiguration von autofs sind die folgenden Dateien relevant:

/etc/nsswitch.conf
/etc/sysconfig/autofs
/etc/auto.master
/etc/autofs_ldap_auth.conf

Um den Automounter zu veranlassen, Mountinformation aus dem LDAP- Verzeichnis zu beziehen, gibt es zwei Moeglichkeiten. Zum einen kann man die lokale Mastermap /etc/auto.master so anpassen, dass einzelne Mountmaps vom LDAP-Server gelesen werden, oder man passt die Datei /etc/nsswitch.conf so an, dass die lokale Mastermap ignoriert und alle noetigen Daten vom LDAP-Server gelesen werden, sofern diese dort vorhanden sind.

Eine zentral gelegene Mastermap hat den Vorteil, dass bei Aenderungen nur das jeweilige LDAP-Objekt veraendert werden muss und nicht die /etc/auto.master-Dateien auf allen betroffenen Clients.

Verwendet man lieber die lokale Mastermap koennte ein Eintrag in ihr z.B. so aussehen: /home ldap:ou=auto_home,ou=Mounts,dc=informatik,dc=uni-bremen,dc=de

Stellt man die Option 'automount' in der Datei /etc/nsswitch.conf von 'files' auf 'ldap' bzw. 'ldap files' um, so wird versucht, die Mastermap direkt vom LDAP-Server zu beziehen.

autofs unterstuetzt standardmaessig mehrere Automount-Schemas, die bei der Suche nach einem Mountpoint der Reihe nach abgearbeitet werden. Um dies zu verhindern, kann man in der Datei /etc/sysconfig/autofs ein Schema statisch festlegen und dabei auch die Standards umgehen, um auch nicht unterstuetzte Schemas verwenden zu koennen.

Fuer Automount-Schemas werden zwei Objektklassen (Klasse der Automount-Map und Klasse eines Mapeintrages) und drei Attribute benoetigt (Name der Map, Name des Mapeintrages, Wert des Mapeintrages), die sich in den Schemas unterscheiden. In den Kommentaren in der Datei /etc/sysconfig/autofs sind diverse Beispiele vorgegeben.

Das auf den Servern verwendete Schema wird wie folgt festgelegt:

MAP_OBJECT_CLASS="automountMap"
ENTRY_OBJECT_CLASS="automount"
MAP_ATTRIBUTE="ou"
ENTRY_ATTRIBUTE="cn"
VALUE_ATTRIBUTE="automountInformation"

In der Datei /etc/autofs_ldap_auth.conf kann man autofs dazu veranlassen sich per SASL am Server zu authentifizieren, um die Mountdaten zu beziehen. Eine Dokumentation hierzu ist in der Datei selbst enthalten. Da die LDAP- Server momentan kein SASL unterstuetzen, kann diese Datei ignoriert werden.

4.1.2 Debian 4

Fuer Debian 4 werden die folgenden Packages benoetigt:

ldap-utils
libnss-ldap
libpam-ldap
autofs-ldap

Im Gegensatz zu Fedora, stellt Debian drei LDAP Konfigurationsdateien zur Verfuegung. Die allgemeine unter /etc/ldap/ldap.conf, die wie im Beispiel unter Punkt 4.1 gestaltet werden sollte, die /etc/libnss-ldap.conf, fuer die nsswitch Services und die /etc/pam_ldap.conf, fuer PAM.

4.1.2.1 nsswitch-Services und Benutzerauthentifikation

Relevante Dateien:

/etc/ldap/ldap.conf
/etc/libnss-ldap.conf
/etc/libnss-ldap.secret
/etc/pam_ldap.conf
/etc/pam_ldap.secret
/etc/nsswitch.conf
/etc/hosts.equiv
/etc/pam.d/common-auth
/etc/pam.d/common-session
/etc/pam.d/common-account
/etc/pam.d/common-password

Die Dateien /etc/libnss-ldap.conf und /etc/pam_ldap.conf sind eigentlich identisch und werden (vermutlich) nur wegen den Angehoerigkeit zu verschiedenen Packages getrennt behandelt. Beide Dateien werde genauso konfiguriert, wie das unter Punkt 4.1.1.1 beschriebene Fedora Aequivalent. Der Einfachheit wegen koennte man eine der beiden Dateien auch einfach durch einen Symlink auf die jeweils andere ersetzen. Dasselbe gilt natuerlich auch fuer die jeweilige .secret Datei.

Die Aenderungen an der Datei /etc/nsswitch.conf sehen ein wenig anders aus, als unter Fedora:

Auszug aus /etc/nsswitch.conf

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

Genauso wie unter Fedora, ist es zu empfehlen die Passwoertrt ueber PAM abzugleichen und nicht den shadow-Service zu verwenden.

Das Abfragen von Benutzer-IDs, Gruppen usw. sollte mit diesen Einstellungen bereits funktionieren. Damit die Authentifizierung jedoch funktioniert, muessen folgende Dateien im Verzeichnis /etc/pam.d veraendert werden:

/etc/pam.d/commom-auth (Beispiel)

auth    sufficient      pam_unix.so nullok_secure
auth    sufficient      pam_ldap.so use_first_pass
auth    required        pam_deny.so

/etc/pam.d/commom-session (Beispiel)

session required        pam_unix.so
session optional        pam_ldap.so

/etc/pam.d/commom-account (Beispiel)

account sufficient      pam_unix.so
account sufficient      pam_ldap.so
account required        pam_deny.so

/etc/pam.d/common-password (Beispiel)

password sufficient     pam_ldap.so
password required       pam_unix.so use_first_pass md5 shadow

4.1.2.2 autofs

autofs unter Debian unterstuetzt zwei moegliche Automount-Schemas und es gibt keine Meoglichkeit diese zu aendern, wie unter Fedora. Ausserdem muss das Startupscript fuer den autofs-Service (/etc/init.d/autofs) auf eines der beiden Schemas eingestellt werden.

Und zwar muessen dafuer in den Zeilen 181 und 182, in der Funktion 'getldapmounts' die Namen angepasst werden, die dem Tool /usr/lib/autofs/autofs-ldap-auto-master uebergeben werden, wenn man ein anderes als das default-Schema (autofs.schema) verwenden moechte.

Auszug aus /etc/init.d/autofs

function getldapmounts()
{
    if [ -x /usr/lib/autofs/autofs-ldap-auto-master ]; then
        [ ! -z $LDAPURI ] && export LDAPURI="$LDAPURI"
        [ ! -z $LDAPBASE ] && export LDAPBASE="$LDAPBASE"
        /usr/lib/autofs/autofs-ldap-auto-master 2> /dev/null
        ######################################################################
        # In diesen Zeilen werden die Attribute festgelegt                   #
        #                                                                    #
        /usr/lib/autofs/autofs-ldap-auto-master -m automountMap \            #
            -e automount -n ou -k cn -v automountInformation 2> /dev/null    #
        ######################################################################
    fi
}

Dies ist jedoch nur noetig, wenn man die auto.master Map vom LDAP Server beziehen moechte. Alternativ kann, wie unter Fedora, die Datei /etc/auto.master angepasst werden.

Da das default-Schema bereits dem verwendeten entspricht, ist hier keine Anpassung notwendig. Das zweite unterstuetzte Schema ist das im NIS-Schema definierte.

4.2 Solaris 10

Bei Solaris 10 sind alle benoetigen Packages bereits vorhanden. Da aber nicht OpenLDAP als Grundlage fuer die Solaris-LDAP-Tools stellt, gestaltet sich die Konfiguration ein wenig anders, als unter Linux.

4.2.1 nsswitch-Services und Benutzerauthentifikation

Solaris 10 hat bereits einen eigenen, von Sun entwickelten LDAP-Client vorinstalliert. Dieser Client laesst sich relativ einfach mit nur einem Kommando konfigurieren und sogar noch leichter, wenn vorgefertigte Konfigurationsprofile auf dem LDAP-Server hinterlegt sind. (Nicht unterstuetzt auf den laufenden Servern)

Ist dies der Fall, reicht es das Kommando 'ldapclient init <server>' auszufuehren. Das Tool erledigt dann automatisch alle noetigen Systemeinstellungen.

Eine manuelle Konfiguration des Clients koennte z.B. wie folgt aussehen:

ldapclient manual -v \
-a authenticationMethod=tls:simple \
-a credentialLevel=proxy \
-a defaultSearchBase=dc=informatik,dc=uni-bremen,dc=de \
-a defaultSearchScope=sub \
-a defaultServerList="ldapfarm.informatik.uni-bremen.de" \
-a domainName=informatik.uni-bremen.de \
-a preferredServerList="ldapfarm.informatik.uni-bremen.de" \
-a serviceSearchDescriptor="passwd:ou=People,dc=informatik,dc=uni-bremen,dc=de" \
-a serviceSearchDescriptor="group:ou=Group,dc=informatik,dc=uni-bremen,dc=de" \
-a serviceSearchDescriptor="netgroup:ou=Netgroup,dc=informatik,dc=uni-bremen,dc=de" \
-a serviceSearchDescriptor="auto_home:ou=auto_home,ou=Mounts,dc=informatik,dc=uni-bremen,dc=de" \
-a attributeMap="auto_home:automountMapName=ou" \
-a attributeMap="auto_home:automountKey=cn" \
-a proxyDN=cn=nsswitch,ou=Proxyusers,dc=informatik,dc=uni-bremen,dc=de \
-a proxyPassword=nsswitchread

Das Attribut 'serviceSearchDescriptor' folgt dabei der Syntax '<service>:<dn>?<scope>?<filter>'. Wie bei den OpenLDAP- Konfigurationsdateien, kann man mithilfe des Filters die Liste von den nss-Services erfassten Suchobjekte begrenzen. (z.B. die Liste der passwd-Benutzer)

Es gibt jedoch scheinbar keine Moeglichkeit, wie bei OpenLDAP mit 'pam_filter', den Zugriff auf einen Client zu beschraenken.

Eine ausfuehrliche Dokumentation zur Benutzung von ldapclient, sowie die Erklaerung aller verfuegbaren Optionen ist in den Manpages zu finden. (ldapclient(1M))

Das Ueberpruefen der Serverzertifikate laesst sich, anders als bei OpenLDAP- Clients, nicht abschalten. Deshalb muss das root-CA-Zertifikat auf jeden Fall eingebunden werden.

Da der Sun-LDAP-Client das Zertifikat jedoch im NSS-Format (Network Security Services) benoetigt, muss das PEM-Zertifikat vorher konvertiert werden.

Um die vorhandene *.pem-Datei in dieses Format zu bringen, kann man das Tool 'certutil' verwenden, das auf Solaris vorinstalliert sein sollte:

ldap2# /usr/sfw/bin/certutil -N -d /var/ldap
ldap2# /usr/sfw/bin/certutil -A -n "rootCA-FB3" -i cacert.pem -a -t CT \
> -d /var/ldap
ldap2# chmod 444 /var/ldap/*

Das erste Kommando legt dabei die NSS-DB fuer die Zertifikate an (Passwort leer lassen). Das zweite pflegt das Zertifikat in diese Datenbank ein. Die DB muss dabei fuer alle Benutzer lesbar sein.

Das Zertifikat sollte eingebunden werden, bevor das ldapclient-Kommando ausgefuehrt wird!

Alle Dateien, die ldapclient veraendert, werden nach /var/ldap/restore kopiert und gehen somit nicht verloren. Die LDAP Konfigurationsdateien die, nicht mit Konfigurationsdateien von OpenLDAP kompatibel sind, liegen in /var/ldap.

Auch hier ist wieder zu empfehlen, nicht den shadow-Service zu benutzen, sondern PAM entsprechend zu konfigurieren. Dafuer muessen folgende Anpassungen an der Datei /etc/pam.conf vorgenommen werden:

/etc/pam.conf (Beispiel)

#
# Authentication management
#
# login service (explicit because of pam_dial_auth)
#
login   auth requisite          pam_authtok_get.so.1
login   auth required           pam_dhkeys.so.1
login   auth required           pam_unix_cred.so.1
login   auth required           pam_dial_auth.so.1
login   auth sufficient         pam_ldap.so.1 use_first_pass ignore_unknown_user
login   auth required           pam_unix_auth.so.1

#
# rlogin service (explicit because of pam_rhost_auth)
#
rlogin  auth sufficient         pam_rhosts_auth.so.1
rlogin  auth requisite          pam_authtok_get.so.1
rlogin  auth required           pam_dhkeys.so.1
rlogin  auth required           pam_unix_cred.so.1
rlogin  auth sufficient         pam_ldap.so.1 use_first_pass ignore_unknown_user
rlogin  auth required           pam_unix_auth.so.1
#
# Kerberized rlogin service
#
krlogin auth required           pam_unix_cred.so.1
krlogin auth required           pam_krb5.so.1
#
# rsh service (explicit because of pam_rhost_auth,
# and pam_unix_auth for meaningful pam_setcred)
#
rsh     auth sufficient         pam_rhosts_auth.so.1
rsh     auth sufficient         pam_ldap.so.1 use_first_pass ignore_unknown_user
rsh     auth required           pam_unix_cred.so.1
#
# Kerberized rsh service
#
krsh    auth required           pam_unix_cred.so.1
krsh    auth required           pam_krb5.so.1
#
# Kerberized telnet service
#
ktelnet auth required           pam_unix_cred.so.1
ktelnet auth required           pam_krb5.so.1
#
# PPP service (explicit because of pam_dial_auth)
#
ppp     auth requisite          pam_authtok_get.so.1
ppp     auth required           pam_dhkeys.so.1
ppp     auth required           pam_unix_cred.so.1
ppp     auth required           pam_unix_auth.so.1
ppp     auth sufficient         pam_ldap.so.1 use_first_pass ignore_unknown_user
ppp     auth required           pam_dial_auth.so.1
#
# Default definitions for Authentication management
# Used when service name is not explicitly mentioned for authentication
#
other   auth requisite          pam_authtok_get.so.1
other   auth required           pam_dhkeys.so.1
other   auth required           pam_unix_cred.so.1
other   auth sufficient         pam_ldap.so.1 use_first_pass ignore_unknown_user
other   auth required           pam_unix_auth.so.1
#
# passwd command (explicit because of a different authentication module)
#
passwd  auth sufficient         pam_lap.so.1 use_first_pass
passwd  auth required           pam_passwd_auth.so.1
#
# cron service (explicit because of non-usage of pam_roles.so.1)
#
cron    account required        pam_unix_account.so.1
#
# Default definition for Account management
# Used when service name is not explicitly mentioned for account management
#
other   account requisite       pam_roles.so.1
other   account sufficient      pam_ldap.so.1
other   account required        pam_unix_account.so.1
#
# Default definition for Session management
# Used when service name is not explicitly mentioned for session management
#
other   session sufficient      pam_ldap.so.1
other   session required        pam_unix_session.so.1
#
# Default definition for  Password management
# Used when service name is not explicitly mentioned for password management
#
other   password required       pam_dhkeys.so.1
other   password requisite      pam_authtok_get.so.1
other   password requisite      pam_authtok_check.so.1
other   password required       pam_authtok_store.so.1

Leider bietet das pam_ldap-Modul von Sun nicht die Moeglichkeit den Zugriff auf einen Host durch einen LDAP-Filter zu begrenzen. Alternativ kann man aber ueber die Option 'serviceSearchDescriptor' in ldapclient einen Filter uebergeben und so die Liste der verfuegbaren Benutzer eingrenzen.

Eine andere Moeglichkeit ist, das pam_ldap-Modul von PADL (padl.com) statt dem Sun-Modul zu verwenden. (ungetestet)

4.2.2 autofs

Da ldapclient keine Einstellungen fuer autofs vornimmt, muessen diese von Hand nachgetragen werden. Als erstes muss in der Datei /etc/nsswitch.conf der Wert 'automount' auf 'files ldap' eingestellt werden.

Auszug aus /etc/nsswitch.conf

automount       files ldap

Das Verwenden der Mastermap vom LDAP-Server gestaltet sich als relativ schwierig, weshalb die entsprechenden Maps am besten in die lokale /etc/auto.master-Map eingebunen werden sollten.

Die Grundlage dafuer wurde schon in den Optionen vom oben beschriebenen ldapclient-Kommado geschaffen:

-a serviceSearchDescriptor="auto_home:ou=auto_home,ou=Mounts,dc=informatik,dc=uni-bremen,dc=de" \
-a attributeMap="auto_home:automountMapName=ou" \
-a attributeMap="auto_home:automountKey=cn" \

Sollen andere Maps als 'auto_home' vom LDAP-Verzeichnis bezogen werden, muss ldapclient mit den entsprechend erganezten Optionen erneut ausgefuehrt werden. (ACHTUNG: Dabei wird die Datei nsswitch.conf automatisch mit der Datei nsswitch.ldap ueberschrieben!)

Um die auto_home-Map nun in die auto.master einzubinden, erstellt man einfach eine Datei /etc/auto_home mit dem Inhalt '+auto_home' und bindet diese wie eine lokale Map ein.

/etc/auo_home

+auto_home

/etc/auo.master

/home   auto_home

Nach einem Neustart des autofs-Services sollten die Mountpoints aus dem LDAP-Verzeichnis zur Verfuegung stehen.

4.3 Mac OS X

Dieser Abschnitt bezieht sich auf Mac OS X Leopard. Unter anderen Versionen sollte die Konfiguration in etwa gleich ablaufen, kann jedoch in einigen Punkten abweichen.

Unter Mac OS X wird der Grossteil der Einstellungen ueber die grafische Oberflaeche erledigt. Vorher sollte allerding sichergestellt sein, dass in der Datei /etc/openldap/ldap.conf das rootCA-Zertifikat eingebunden und der Wert 'TLS_REQCERT' auf 'demand' eingestellt ist.

Danach kann man im Finder unter 'Applications/Utilities' das 'Directory Utility' aufrufen. Unter dem Reiter 'Services' ist in der Liste ein Punkt 'LDAPv3' vorhanden. Ist der Reiter nicht zu sehen, kann er ueber den Button 'Advanced Setting' sichtbar gemacht werden. Durch einen Doppelklick auf den 'LDAPv3'-Eintrag gelangt man nun zur LDAP-Serverliste.

Durch einen Klick auf den Button 'New...' kann man einen Server in die Liste aufnehmen. Im darauf folgenden Dialog gibt man den Servernamen ein, setzt die Haekchen bei 'Encrypt using SSL' und 'Use for authentication' und klickt dann auf 'Continue'.

Das verwendete Template ist 'RFC 2307 (UNIX)' und die Searchbase entspricht der 'base'-Option in der ldap.conf. Sind die Benutzerdaten nicht anonym lesbar, werden im naechsten Schritt die Autentifizierungsdaten eines Benutzers mit den entsprechenden Rechten verlangt.

Nach einem weiteren Klick auf 'Continue' werden die eingegebenen Daten ueberprueft und sollte alles korrekt eingegeben worden sind, wurde der Server erfolgreich in die Liste aufgenommen und der Vorgang kann mit 'OK' abgeschlossen werden.

Damit autofs funktioniert, sollte der Eintrag jedoch noch einmal editiert werden, da das default-Schema nicht dem auf den FB3-Servern verwendeten entspricht. Unter dem Reiter 'Search & Mappings' kann man saemtliche Attribute und Objektklassen nach eigenem Bedarf um-mappen, sowie die Basis-DNs fuer die Suche nach den jeweiligen Daten festlegen.

Unter den Punkten 'Automount' und 'AutomountMap' muss im Feld 'RecordName' jeweils 'automountMapName' durch 'ou' und 'automountKey' durch 'cn' ersetzt werden.

Bei Mac OS X ist es, anders als bei Linux, nicht meoglich, auf die lokale Mastermap /etc/auto.master zu verzichten. Es ist jedoch moeglich, die lokale Mastermap um Daten aus dem LDAP-Verzeichnis zu erweitern. Indem man z.B. eine Zeile '+auto.master' hinzufuegt, wird die Matsermap 'auto.master' vom LDAP-Server mit beruecksichtigt.

Alternativ kann man einzelne Maps aus dem LDAP-Verzeichnis beziehen und auch lokale erweitern.

/etc/auto.master (Beispiel)

#
# Automounter master map
#
+auto_master            # Use directory service
/net                    -hosts          -nobrowse,nosuid

ODER

/etc/auto.master (Beispiel)

#
# Automounter master map
#
/net                    -hosts          -nobrowse,nosuid
/home                   auto_home

/etc/auto_home (Beispiel)

+auto_home

Zum Schluss sollte man noch sicher stellen, dass der eingetragene LDAP- Server im 'Directory Utility' unter 'Search Policy' in der 'Authentication'-Liste eingetragen ist. Ist dies nicht der Fall, kann er ueber den '+'-Button hinzugefuegt werden.

Auf diese Weise kann man beliebig viele Server in die Liste eintragen.

Leider scheint es keine Meoglichkeit zu geben, Filter fuer die Suchbereiche anzugeben, oder den Zugriff auf einen Host nur bestimmten Benutzern zu erlauben.

4.4 Windows

Es ist leider nicht moeglich einen Windows-Client direkt an einen OpenLDAP- Server anzubinden. Aber man kann einen Samba-Server aufsetzen, der den LDAP-Server als Backend verwendet. Mit den unter Abschnitt 3. erwaehnten Samba-Attributen kann ein UNIX-Account im LDAP-Verzeichnis somit gleichzeitig als Samba-Account verwendet werden.

Eine Dokumentation zu Samba mit LDAP-Backend kann auf samba.org gefunden werden.

5. Verwaltung

Die Verwaltung der Daten im LDAP-Verzeichnis baut auf das alte, fuer NIS verwendete, System auf. Verschiedene Skripte stehen zum Teil im FB3- Dateisystem und zum anderen Teil auf bestimmten Hosts zur Verfuegung, um alle relevanten Daten einzusehen und gegebenenfalls zu veraendern.

In den folgenden Abschnitten werden die Verwaltungsmoeglichkeiten der verschiedenen Datengruppen ausgefuehrt und ein Vergleich zu den bisherigen Methoden gezogen.

5.1 Benutzer

Das Hinzufuegen und Entfernen von Benutzern ist fuer den Anwender praktisch unveraendert. Die Skripte 'adduser' und 'delete_user' stehen z.B. weiterhin zur Verfuegung und haben sich nur inhaltlich, aber nicht in der Funktion veraendert. Weiteres zu den Verwaltungsskripten spaeter.

5.1.1 Zugriffsbeschraenkung auf bestimmten Hosts

Da der Wunsch geaeussert wurde, auf bestimmten Hosts den Benutzerzugriff einzuschraenken, wurden dazu mehrere Moeglichkeiten ausgearbeitet, die in diesem Abschnitt erlaeutert werden.

5.1.1.1 PAM-Filter

Auf Systemen, die das pam_ldap-Modul von PADL (padl.com) verwenden, kann man ueber die entsprechende Konfigurationsdatei den Zugriff auf den Client mit Hilfe eines LDAP-Filters beschraenken. (siehe Abschnitt 4.1.1.1)

*Getestet unter Debian und Fedora *Prinzipiell moeglich unter Solaris (PAM-Modul muss uebersetzt und eingebunden werden) *Nicht moeglich unyer Mac OS X

5.1.1.2 Netgroup

Auf Systemen die Netgroups unterstuetzen und die Option 'compat' in der /etc/nsswitch.conf erlauben, kann mithilfe von Netgroups die Benutzerliste beeinflusst werden. Dabei ist es sowohl moeglich Netgroups als White- wie auch als Blacklist anzuwenden.

Beispiel fuer Whitelist: Moechte man nur den Benutzern, die in der Netgroup 'trusers' eingetragen sind, den Zugriff auf einen Host erlauben, muessen folgende anpassungen vorgenommen werden:

/etc/nsswitch.conf

passwd:         files compat
passwd_compat:  ldap

/etc/passwd

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
...
+@trusers
+::::::/sbin/nologin

Durch diese Einstellungen werden die Mitglieder der Netgroup 'trusers' in die passwd-Liste des Systems aufgenommen. Diese Methode laesst sich auch ohne Netgroup auf einzelne Benutzer anwenden. Die letzte Zeile sorgt dafuer, dass die restlichen Benutzer dem System bekannt bleiben.

/etc/passwd

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
...
+testuser1
+testuser2

Beispiel fuer Blacklist: Moechte man den Mitgliedern eine bestimmten Netgroup den Zugriff auf den Host verweigern, muessen folgende Anpassungen gemacht werden:

Die Datei /etc/nsswitch.conf wird wie im Whitelist-Beispiel angepasst.

/etc/passwd

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
...
-@ntrusers
+

Das einzelne '+' bindet alle LDAP-Benutzer in den passwd-Service ein, waehrend '-@ntrusers' alle Mitglieder der Netgroup 'ntrusers' davon ausschliesst. Das Aussschliessen von einzelnen Benutzern ist ebenfalls moeglich.

/etc/passwd

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
...
-testuser1
-testuser2
+

Ein LDIF-Eintrag einer solchen Netgroup koennte z.B. so aussehen:

dn: cn=trusers,ou=Netgroup,dc=informatik,dc=uni-bremen,dc=de
objectClass: nisNetgroup
objectClass: top
cn: trusers
nisNetgroupTriple: (-,testuser1,)
nisNetgroupTriple: (-,testuser2,)
nisNetgroupTriple: (-,testuser3,)

Dabei ist aber zu beachten, dass es bei LDAP, genauso wie bei NIS, zu Problemem bezueglich der Groesse der Netgroups kommt. Sollte daher eine Netgroup zu viele Mitglieder enthalten sollte sie aufgespalten werden.

Eine einfache Verwaltung aller Netgroups (auch der fuer z.B. trustedhosts) waehre z.B. ueber eine aehnliche Struktur, wie beim momentanen auto.home.d- Verzeichnis auf bob, moeglich.

*Getestet unter Debian und Solaris *Prinzipiell moeglich unter allen Systemen, die Netgroups unterstuetzen *Nicht moeglich unter Mac OS X

5.1.1.3 Modifizierter Replicaserver

Da es unter Mac OS X scheinbar nicht ohne weiteres Moeglich ist, den Hostzugriff zu begrenzen, ist hier moeglicherweise die einzige Moeglichkeit ein eigener Replicaserver, der nur die Benutzerdaten synchronisiert, die auf den angbebundenen Systemen verwendet werden sollen.

Die selbe Eischraenkung schein fuer Samba-Domains zu gelten. Eine weitere Einschraenkung bei Samba-Domain ist es, dass ein Accountobjekt nur eine Samba-SID aufnehmen kann und somit nur Mitglied in einer Samba-Domain zur Zeit sein kann.

Um dies zu umgehen koennte man z.B. einen Replicaserver einrichten, der alle Daten, ausser den Samba-SIDs repliziert. Die SIDs koennten dann per Skript eingefuegt werden.

5.1.1.4 Hierarchische Ablage von Benutzerobjekten

Da LDAP-Datenbanken hierarchisch organisiert sind, waehre es grundsaetzlich moeglich die Benutzerobjekte in einer nach z.B. Arbeitsgruppen gegliederten Baumstruktur abzulegen.

Indem man dann auf Clients nur jeweils einen untergeordneten Zweig als Suchbasis fuer Benutzerobjekte angibt, koennte der Zugriff auf einen Host dadurch unter praktisch allen Plattformen auf diesem Unterzweig begrenzt werden.

Da dieses System jedoch extrem unflexibel ist, ist der Verwaltungsaufwand relativ hoch. Wenn z.B. Benutzer verschiedenen Arbeitsgruppen angehoeren sollen oder oft unter ihnen wechseln, muessten Datensaetze mehrfach vorhanden sein, oder Verweise auf sie muessten gepflegt werden.

5.1.1.5 nss-Filter

Bei der SUN- und der PADL-nss_ldap-Lib kann man bei den Suchbasen fuer die verschiedenen Datengruppen einen Filter einstellen. Alle Accounts, die nicht auf diesen Filter zutreffen, werden in der entsprechenden Datengruppe nicht beruecksichtigt.

Erklaerungen dazu sind unter den Punkten 4.1.1.1 (nss_ldap-Lib von PADL) und 4.2.1 (Solaris ldapclient) und in den offiziellen Dokumentation der jeweiligen Systeme zu finden.

5.1.1.6 Zugriffsbeschraenkung unter Samba

Unter Samba gibt es mehrere Moeglichkeiten, eine bestimmten Gruppe von Benutzern den Zugriff zu erlauben, bzw. zu gewaehren. Da Samba nur die Accounts beruecksichtigt, die auch von den nss-Services der passwd- Datenbank zugeordnet werden, kann man schon durch die Systemeinstellungen der Maschine, auf der der Samba-Server laufen soll, die Liste der zu beruecksichtigenden Accounts einschraenken. (siehe z.B. Abschnitt 5.1.1.5)

Desweiteren besteht die Moeglichkeit mit den Direktiven 'valid users' und 'invalid users' den Zugriff fuer UNIX- und Netgroups zu erlauben bzw. verweigern. Weiteres dazu kann der Manpage zu smb.conf(5) entnommen werden.

5.1.2 Passwoerter

5.1.2.1 Passwoerter allgemein

Da die Passwoerter schon in der Antragsdatei gehasht sind, wird, wie bisher auch, beim Erstellen des Accounts nur das UNIX-Passwort, aber kein Samba- Passwort gesetzt. Soll der Account sich an einer Samba-Domain authentifizieren koennen, muss dieses nachtraeglich erstellt werden.

Zum Verwalten der Passwoerter stehen mehrere Moeglichkeiten zur Wahl. Auf Systemen die PAM verwenden, laesst sich ueber das passwd-Modul von PAM das passwd-Kommando so konfiguerieren, dass darueber sowohl das UNIX- als auch das Samba-Passwort im LDAP-Verzeichnis geandert werden kann. Ausserdem ist in den OpenLDAP-Client-Tools ein Programm 'ldappasswd' enthalten, das es ermoeglicht das UNIX-Passwort im LDAP-Verzeichnus zu veraendern. (siehe Abschnitt 2.2.4)

Da ldappasswd aber mit DNs arbeitet ist dieses Tool eher fuer Techniker, als fuer normale Benutzer geeignet.

Die 'smbldap'-Toolsammlung (http://www.iallanis.info/) enthaelt ein nuetzliches Perlskript 'smbldap-passwd' mit dem Komfortabel sowohl UNIX- als auch Samba-Passwoerter in einem Schritt geaendert werden koennen.

Desweiteren waere es auch ohne weiteres moeglich ein Web-GUI fuer normale Benutzer zur Verfuegung zu stellen, mit dem sie ihre Passwoerter aendern koennen.

Das manuelle Aendern eines Passwortes, z.B. per LDIF und ldapmodify, ist ebenfalls moeglich. Dabei kann das Passwort sowohl in Klartext, als auch als Hash in das LDAP-Verzeichnis geschrieben werden. Da der slapd mehrere Hashschemas fuer Passwoerter unterstuetzt, muss man bei einem gehashten Passwort angeben, welches Hashschema verwendet wird. Wird dies nicht gemacht, wird der Hash als Klartextpasswort identifiziert. Das Hashschema wird dabei in geschweiften Klammern ('{' und '}' ) gefolgt vom Hash selbst angegeben.

Soll die Authentifizierung der Benutzer allein ueber PAM ablaufen, so ist egal, welches Hashschema fuer die Passwoerter verwendet wird. Soll aber der shadow-Service verwendet werden, so _muessen_ die Passwoerter mit {crypt} gehasht sein.

Die unterstuetzten Hashschemas sind {CRYPT}, {MD5}, {SMD5}, {SSHA} und {SHA}.

Bei den folgenden LDIF-Beispielen, bei dem das Passwort des Benutzers 'testbenutzer' ueberschrieben wird, lautet das Passwort immer 'test':

dn: uid=testbenutzer,ou=stud,ou=People,dc=informatik,dc=uni-bremen,dc=de
changetype: modify
replace: userPassword
userPassword: test

ODER

dn: uid=testbenutzer,ou=stud,ou=People,dc=informatik,dc=uni-bremen,dc=de
changetype: modify
replace: userPassword
userPassword: {crypt}KcitZI/Pds2ks

ODER

dn: uid=testbenutzer,ou=stud,ou=People,dc=informatik,dc=uni-bremen,dc=de
changetype: modify
replace: userPassword
userPassword: {ssha}mnyna4WDb0XHC9GPpCG5gArcnBO9qoHp

ODER

dn: uid=testbenutzer,ou=stud,ou=People,dc=informatik,dc=uni-bremen,dc=de
changetype: modify
replace: userPassword
userPassword: {md5}CY9rzUYh03PK3k6DJie09g==

Diese LDIF-Daten koennten z.B. ldapmodify einfach in das LDAP-Verzeichnis uebernommen werden.

Aus Sicherheitsgruenden ist es natuerlich nicht zu empfehlen, Passwoerter in Klartext zu speichern. Davon abgesehen ist es praktisch jedem selbst ueberlassen, wie er seine Passwoerter hasht. Nur fuer die Verwendung von shadow-Passwoertern, wird man auf ein Schema ({crypt}) beschraenkt.

5.1.2.2 Passwoerter im FB3

Die momentane Regelung mit NIS sieht es vor, dass das Aendern der Passwoerter nur auf einem Passworthost erlaubt ist. Die Umstellung auf LDAP erlaubt es, dies per PAM auf jedem Host zu ermoeglichen.

Fuer die Uebergangsphase ist es vorgesehen, dass die Regelung mit dem Passworthost bestehen bleibt und die NIS-Passwoerter per Cronjob in das LDAP-Verzeichnis eingepflegt werden.

5.2 Benutzerdatenbank

Die urspruenglich in /home/userdb/data/user gelegenen zusaetzlichen Benutzerdaten sind von nun an in die Accountobjekte im LDAP-Verzeichnis integriert. Aus Kompatibilitaetsgruenden wird das alte Format aber weiterhin als readonly-Datei verfuegbar sein. Dafuer werden die entsprechenden Daten regelmaessig durch ein Skript aus dem LDAP-Verzeichnis exportiert.

Aenderungen an den userdb-Daten sind nur noch direkt im LDAP-Verzeichnis moeglich. Dazu kann man die entsprechenden Attribute entweder manuell veraendern oder das Web-GUI unter https://www.informatik.uni-bremen.de/ verwenden. Das Web-GUI entspricht dabei in seiner Funktionalitaet dem fuer die alte Userdatendatenbank verwendeten GUI.

Die Verwendung des GUIs ist dabei dem manuellen Editieren von Daten vorzuziehen, da es die Eingaben vor dem Schreiben in das Verzeichnis auf Gueltigkeit prueft, wodurch fehlerhafte Daten vermieden werden koennen.

Da die Userdatenbank im alten Format fuer Lesezugriffe zur Verfuegung steht, ergeben sich keine Aenderungen an rein lesenden Skripten, die auf die userdb-Daten zugreifen.

Eine Aufstellung aller veraenderten, entfallenden und neuen Skripten ist unter Punkt 5.5 zu finden.

Fuer die Ubergangsphase wird das alte System vorerst bestehen bleiben. Die Userdatenbankdaten werden dann per Cronjob regelmaessig in das LDAP- Verzeichnis eingepflegt.

5.3 Gruppen

An der Verwaltung der Benutzergruppen wird sich fuer den Anwender nichts aendern. Die Aenderungen bestehen nur darin, dass die Gruppen nun automatisch mit dem LDAP-Verzeichnis und nicht mehr mit NIS abgeglichen werden.

(Waehrend der Ubergangspahse wird dies von einem Cronjob erledigt)

5.4 Mountpoints

Auch an der Verwaltung der Mountpoints in /etc/informatik/auto.home.d/ auf bob wird sich von der Anwenderseite her nichts veraendern. Das Makefile wurde so angepasst, dass ein entsprechendes Skript ausgefuehrt wird, welches die Automountdaten mit dem LDAP-Server abgleicht und Aenderungen in das Verzeichnis uebertraegt.

(Waehrend der Ubergangspahse wird dies von einem Cronjob erledigt)

5.5 Zusammenfassung / Gegenueberstellung mit dem alten System

An dieser Stelle wird zu einen spaeteren Zeitpunkt eine Aufstellung aller zentralen Skripte folgen, die im Zuge der Umstellung von NIS auf LDAP veraendert werden. In der Uebergangsphase, in der NIS und LDAP parallel betrieben werden sollen, werden vorerst alle Daten aus NIS und der Userdatenbank mit per Cronjob ausgefuehrten Skripten in das LDAP- Verzeichnis eingepflegt.

Ausnahmen sind (bis jetzt) Gruppen und Mountpoints. Die entsprechende Skripte auf bob sind soweit angepasst, dass diese Daten direkt mit dem LDAP-Verzeichnis synchronisiert werden.

Die crongesteuerten Skripte sind auf bob und auf fidel zu finden:

bob

/services/ldap/bin.new/nisldapsync.pl

Synchronisiert die UNIX-Passwoerter aus /etc/informatik/passwd mit LDAP.

/services/ldap/bin.new/syncaccs.pl

Synchronisiert die Userdatenbank mit LDAP.

/services/ldap/bin.new/syncnetgroup.pl

Synchronisiert die Netgroups aus /home/nic/netgroup.informatik mit LDAP.

fidel

/etc/smb/smbpasswd_to_ldap.pl

Synchronisert die Sambapasswoerter mit LDAP.

LDAP Client (zuletzt geändert am 2010-05-28 11:16:25 durch nilssch)