[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/