[CD] ldap basics

cd@mailman.sil.at cd@mailman.sil.at
Sat, 27 Apr 2002 15:01:13 +0200


ABSTRACT: LDAP wird ueberblicksartig erklaert.

AUDIENCE: junior admin
SYSTEM:   any unix
SECTION:  basic unix commands
AUTHOR:   mond <fs@sil.at>
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 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 atribute haben. email addresse,
  passwoerter, telefonnummern, etc..etc.. man kann sich auch eigene atribute
  definieren. welche atribute ein eintrag haben kann wird durch ein atribut
  namens "objectClass" festgelegt. zu jeder "objectClass" gehoeren
  verschiedene atribute. ein atribut 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 atribut 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/