ABSTRACT: LDAP wird ueberblicksartig erklaert. AUDIENCE: junior admin SYSTEM: any unix SECTION: basic unix commands AUTHOR: mond COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt in groesseren netzwerken ergibt sich oft das problem dass man an zentraler stelle login namen, telefonnummern, zugriffs rechte, passwoerter, email addressen, etc, etc.. speichern will und diese informationen sollen von verschiedensten system aus erreichbar sein. die loesung fuer solch ein problem stellt ein "directory service" dar. ein verzeichnissdienst. proprietaere loesungen dafuer gibt es von verschiedensten herstellern. z.b. novell oder microsoft. aber gerade dieser bereich ist hoechst sensibel da man mit einem proprietaern directory service ein ein sehr tiefes abhaengigkeitsverhaeltniss geraet. eine offene, standartisierte alternative zu proprietaeren directory services die sich immer mehr durchsetzt ist LDAP. LDAP steht fuer "light-weighted directory access protokoll" und ist der kleine bruder von X500. X500 ist ein sehr komplexes und kompliziertes directory system dass sich kaum durchsetzt. LDAP schraenkt die funktionen auf das noetigste ein und ist dafuer leichter verstaendlich und praxisgerechter. LDAP stellt erlaubt eine baumartige hirarchie an eintraegen. jeder eintrag hat einen eindeutigen namen. der eindeutige name wird "dn" (distinguished name) gennant. z.b.: "cn=der pate, o=Mafia, c=IT" obiger eintrag wuerde z.b. zu einer person namens "der pate" aus dem land (country, c=) italien bezeichnen der zu einer organisation (o=) Mafia gehoeren wuerde. (die namen sind hier natuerlich frei erfunden) jeder eintrag kann verschiedenste attribute haben. email addresse, passwoerter, telefonnummern, etc..etc.. man kann sich auch eigene attribute definieren. welche attribute ein eintrag haben kann wird durch ein attribut namens "objectClass" festgelegt. zu jeder "objectClass" gehoeren verschiedene attribute. ein attribut kann auch mehrere werte haben und somit ein eintrag auch mehreren objectClass angehoeren. neben der hirarchie die einteilt in c= (country) o= (organisation) darunter koennte man z.b. ou= (organisational unit) haben. und darin verschiedene eintraege die z.b. anhand von cn= oder uid= eintraegen unterschieden werden. ou muessen natuerlich nicht wirklich abteilungen sein. man koennte z.b. eine ou=schueler und eine ou=lehrer und eine ou=drucker haben. anstelle der c=, o=, ... hirarchie verwendet man heute meist eine hirarchie die sich an internet domain namen orientiert. man verwendet dabei das attribut dc (domain context). z.b.: dn: uid=maxmeier,dc=irgendwo,dc=at objectclass: posixAccount uid: maxmeier cn: max meier cn: max a. meier uidNumber: 1007 gidNumber: 120 homeDirectory: /home/maxmeier userPassword: {crypt}gH89kO.kLrewn die hintereinandergereiten dc= eintraege representieren den domain namen. hier z.b. irgendwo.at obiger eintrag hat den type "posixAccount" der in etwa das /etc/passwd file ersetzt und den die meisten programme voraussetzen die ein login auf einem unix system via ldap erlauben. eine uebersicht ueber die gebraeuchlichsten objectclassen findet man auf: http://ldap.akbkhome.com/ z.b die objectClass namens "person" mit der man personen beschreibt.. davon gibt es unterklassen. z.b. "netOrgPerson" die eine person beschreibt die mit einem unternehmen in verbindung steht. oder eine "residentialPerson" die eher auf den wohnort bezogen ist. dann gibt es z.b. noch schemas (so nennt man die einteilung in object klassen) fuer dinge wie * device (hat z.b. attribute wie "serialNumber" und "owner" * ipNetwork * ipHost ..... und wenn man kein passends schema findet kann man sich natuerlich ein eigenes anlegen. welche software setzt man fuer LDAP ein? ======================================= neben komerziellen ldap systemn und ldap gateways fuer echte X.500 systeme wird vorallem openldap (http://www.openldap.org/) eingesetzt. die konfiguration erfolgt im file slapd.conf (z.b in /etc/openldap/slapd.conf) dort kann man die schemas angeben die man verwenden will (man inkludiert fuer jedes schema entsprechende files die das schema beschreiben). weiters legt man die "baseDN" fest. also ab wo in der directory hirarchie man gueltig sein will. z.b.: dc=blabla,dc=irgendwo,dc=at weiters zugriffsrechte: wer welche attribute auf welchen teilen des baumes abfragen oder aendern darf. die daten selbst kann openldap in einer internen datebank speichern oder auf einen SQL server weiterleiten. zum zwecke eines backups kann man sich mit dem tool ldbmcat in einem ascii text format ausgeben lassen. (das format ist genormt und heisst LDIF (fuer "LDAP Directory Interchange Format")) weiters gibt es ein programm namens slurpd mit dem man ein ldap verzeichniss auf einen backup server replizieren kann. faellt einer der ldap server aus kann der andere die anfragen beantworten. laeuft openldap so lauescht es auf port 389 nach anfragen von LDAP client programmen die auf dieses directory zugreifen wollen. * wichtige clients sind: o gq (grafischer gnome client) o java ldap browser ( http://www.iit.edu/~gawojar/ldap/ ) o web2ldap web basierter ldap browser o kldap (KDE ldap brwoser) ... * programme die es ermoeglich sich auf ldap zu authentisieren gibt es fuer o squid (ein http cache daemon) o apache o pam (pam ist das "plugable authentication module") damit kann man logins auf unix auf verschiedneste arten umleiten. hier eben auf einen LDAP server. o radius (ein protokoll das vorallem zur authentisierung von dialin usern verwendet wird. programme hier sind openradius und freeradius) .... * client programme die in irgend einer form ldap benutzen koennen (z.b. fuer addressbuecher von email clients oder browsereinstellungen etc.. gibt es extrem viele.. z.b.: netscape, pine, outlook (kein mailprogramm sondern ein sicherheitsrisiko), mutt (mit einem externen perl script), .. * fuer programmierer gibt es schnittstelln zu vielen sprachen: o perl (Net::LDAP) o python o C, C++ o java o PHP es ist somit licht eigene anwendungen mit LDAP unterstuetzung auszustatten. die grenzen von LDAP ==================== bei allen moeglichkeiten die LDAP bietet sollte man allerdings auch die grenzen sehen. in LDAP kann man vielerlei daten speichern aber LDAP ist keine relationale datenbank. man sollte sich also ueberlegen ob manche daten nicht besser in einer SQL datenbank aufgehoben sind. vorallem wenn es um komplexe verknuepfungen bei abfragen geht ist dort eine echte datenbank sicher schneller und flexibler. sicherheit beim zugriff auf LDAP ================================ normalerweise ist der LDAP zugriff unverschluesselt, was in sicherheitsrelevanten bereichen nicht gerade ideal ist. neuere versionen des LDAP protokolls koennen daher eine SSL (secure socekt layer) verschluesselung aushandeln. alternativ dazu kann man zu einem LDAP transparent ueber einen SSL channel connecten, wobei man zur unterscheidung ein anderes port verwendet (636). mehr ueber SSL lernen wir demnaechst. EXERCISES: * verwende gq oder einen anderen der LDAP clients um einen offenen LDAP server zu browsen. z.b ldap.openldap.org oder einen aus der liste auf: http://www.emailman.com/ldap/public.html http://www.keutel.de/directory/public_ldap_servers.html * installiere openldap und versuch mit einem der freien client zu connecten und einige eintraege anzulegen. REFERENCES: http://www.tldp.org/HOWTO/LDAP-HOWTO.html http://www.OpenLDAP.org/ http://ldapman.org/ http://ldap.akbkhome.com/ http://www.pinds.com/software/ldap-in-general http://www.yolinux.com/TUTORIALS/LinuxTutorialLDAP.html http://www.heise.de/ix/artikel/1997/08/118/ http://staff.pisoftware.com/bmarshal/publications/ldap_tut.html