LDAP

A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
24. sor: 24. sor:
 
* '''Abandon''': megkezdett művelet megszakítása
 
* '''Abandon''': megkezdett művelet megszakítása
 
* '''Unbind''': ez viszont már a kapcsolat bontását jelenti (nem a bind ellentettje)
 
* '''Unbind''': ez viszont már a kapcsolat bontását jelenti (nem a bind ellentettje)
* NB1: egy LDAP kapcsolat során egy kliens '''több kérést''' küldhet a szervernek, és a kérések között nem kötelessége megvárni a szerver válaszát (enélkül az abandon értelmét is veszítené).
+
* NB1: egy LDAP kapcsolat során egy kliens '''több kérést''' küldhet a szervernek, és a kérések között nem kötelessége megvárni a szerver válaszát (enélkül az abandon értelmét is veszítené)
 
* NB2: a szerver semmilyen '''sorrendiséget nem garantál''' egy válaszon belül az abban szereplő címszavakra, az attribútumaikra, többértékű attribútum esetén az értékekre
 
* NB2: a szerver semmilyen '''sorrendiséget nem garantál''' egy válaszon belül az abban szereplő címszavakra, az attribútumaikra, többértékű attribútum esetén az értékekre
 
* NB3: igen, tényleg '''hiányzik a tranzakció-kezelés'''
 
* NB3: igen, tényleg '''hiányzik a tranzakció-kezelés'''
  +
  +
=== Mi az LDIF? ===
  +
* LDIF: '''LDAP Data Interchange Format'''
  +
* sima szöveges leírása egy vagy több LDAP címszó kiválasztott attribútumainak
  +
* RDBMS adminok gondoljanak egy SQL dump-ra (mivel gyakorlatilag egy '''dump''' egy keresés eredményeiről)
  +
<pre>
  +
dn: cn=wheel,ou=Group,dc=42,dc=hu
  +
cn: wheel
  +
gidNumber: 9999
  +
objectClass: posixGroup
  +
objectClass: top
  +
memberUid: balazs
  +
</pre>
  +
* ez egy wheel nevű csoport leírása
  +
* NB1: az attribútumok neveiben nem különböztetjük meg a kis- és a nagybetűt ('''case insensitive''')
  +
* NB2: az '''objectClass''' attribútum értékei olyan osztályok, melyek a sémában leírják az adott címszó kötelező és opcionális attribútumait, illetve azok formátumát
  +
* NB3: az RDN-t nem elegendő a DN-ben feltüntetni
  +
* NB4: ez '''nem egy objektum''', mert semmilyen műveletet nem társíthatunk hozzá
   
 
=== Mi az LDAP URL? ===
 
=== Mi az LDAP URL? ===
44. sor: 62. sor:
   
 
=== Hogyan keressünk az LDAP segítségével? ===
 
=== Hogyan keressünk az LDAP segítségével? ===
* mivel az LDAP-ot címtárak elérésére fejlesztették, legjobban a '''kereséseket támogatja''' (igazából minden más igen körülményes benne)
+
* mivel az LDAP-ot címtárak elérésére fejlesztették, legjobban a '''kereséseket támogatja''' (igazából minden más igen körülményes vele)
 
* telepítsünk egy LDAP klienst - Debian alatt az '''ldap-utils''' csomag tartalmazza az OpenLDAP kliensoldali segédprogramjait
 
* telepítsünk egy LDAP klienst - Debian alatt az '''ldap-utils''' csomag tartalmazza az OpenLDAP kliensoldali segédprogramjait
  +
* mivel a legtöbb LDAP kliens implementáció az RFC-ben leírt URL formátumot nem támogatja, gyorsan felejtsük el a fentebb ismertetetteket és nézzünk utána a manual-ban a paraméterezésnek
  +
<pre>
  +
$ ldapsearch -LLL \
  +
-H ldaps://localhost/ \
  +
-b 'ou=People,dc=42,dc=hu' \
  +
-s sub \
  +
-x \
  +
'(&(objectClass=inetOrgPerson)(uid=balazs))' \
  +
mail \
  +
| grep '^mail:'
  +
mail: ifj.fulop.balazs@42.hu
  +
</pre>
  +
* '''-LLL''': a legszűkszavúbb, kommentmentes LDIF formátumot kérjük
  +
* '''-H''': LDAP URI megadása (nem URL!)
  +
* '''-b''': a keresés kiindulópontja
  +
* '''-s''': a keresés hatóköre
  +
* '''-x''': SASL nélkül kapcsolódunk
  +
* '''filter''': minden szűrő zárójelek között, logikai operátorok prefix jelöléssel
  +
* '''attribútumok''': egyszerűen, szóközzel elválasztva
  +
* a végén azért áll egy grep, mert a parancs kimenete tartalmazza a DN-t, amire most nem volt szükség
  +
  +
=== Végülis mikor jó ez az egész? ===
  +
* ha az adatbázisműveletek döntő többsége keresés jellegű '''ÉS'''
  +
* nincs szükség tranzakciókra '''ÉS'''
  +
* nincs szükség idegen kulcsokra és komoly kényszerekre (constraint) '''VAGY'''
  +
* ha marhára unatkozunk

A lap 2007. december 2., 16:28-kori változata

Tartalomjegyzék

1 Mi az LDAP?

  • LDAP: Leightweight Directory Access Protocol
  • L, mint pehelysúlyú: az X.500 kódnevű protokollcsalád könnyített változata. Az eredeti X.500-at az OSI hálózati modelljére tervezték, így a való életben nem sűrűn találkozhatunk vele.
  • D, mint címtárszolgáltatás: elsősorban egy számítógépes hálózat felhasználóit és erőforrásait tartalmazó adatbázis közvetítésére szolgál
  • A, mint elérés: támogatja az adatok frissítését, törlését, beszúrását és lekérdezését
  • P, mint az elektronikus kommunikáció egyik nyelve: egy TCP/IP felett megvalósított bináris protokoll

2 Miből áll egy LDAP-on elérhető címtár?

  • a címtár egy fa (directory tree), azaz egy gyökér csomóponttal rendelkező körmentes gráf
  • a gráf csomópontjai a címszavak (entries), melyeknek sémától függően vannak kötelező és opcionális attribútumaik
  • minden csomópont rendelkezik egy kitüntetett attribútummal, amely azonosítja a csomópontot a vele egy szinten, közös szülőtől származó csomópontok között - ez az RDN (relative distinguished name)
  • a csomópontból a gyökérbe vezető út RDN-jei kiadják a csomópont megkülönböztető nevét - ez a DN (distinguished name)
  • az attribútumok lehetnek többértékűek (ezt is a séma határozza meg)

3 Milyen műveleteket engedélyez az LDAP?

  • Start TLS: titkosítás nélkül indított csatornán titkosított kommunikáció kezdeményezése - ritkán használt, amióta támogatott az SSL feletti LDAP
  • Bind: autentikáció - bizony nem a csatlakozás, az anoním keresések enélkül működnek
  • Search: keresés - lásd később
  • Compare: összehasonlítás - nem egy attribútum értékét kérdezzük le, hanem elküldünk egy értéket és megkérdezzük, hogy azzal (vagy annak a jelszó hash-ével ;-)) egyezik-e
  • Add: új címszó hozzáadása
  • Delete: címszó törlése
  • Modify entry: címszó attribútumlistájának módosítása
  • Modify DN: címszó átnevezése - ez nekem OpenLDAP alatt csak levél típusú csomópontra működött, és annál is csak RDN-re
  • Abandon: megkezdett művelet megszakítása
  • Unbind: ez viszont már a kapcsolat bontását jelenti (nem a bind ellentettje)
  • NB1: egy LDAP kapcsolat során egy kliens több kérést küldhet a szervernek, és a kérések között nem kötelessége megvárni a szerver válaszát (enélkül az abandon értelmét is veszítené)
  • NB2: a szerver semmilyen sorrendiséget nem garantál egy válaszon belül az abban szereplő címszavakra, az attribútumaikra, többértékű attribútum esetén az értékekre
  • NB3: igen, tényleg hiányzik a tranzakció-kezelés

4 Mi az LDIF?

  • LDIF: LDAP Data Interchange Format
  • sima szöveges leírása egy vagy több LDAP címszó kiválasztott attribútumainak
  • RDBMS adminok gondoljanak egy SQL dump-ra (mivel gyakorlatilag egy dump egy keresés eredményeiről)
dn: cn=wheel,ou=Group,dc=42,dc=hu
cn: wheel
gidNumber: 9999
objectClass: posixGroup
objectClass: top
memberUid: balazs
  • ez egy wheel nevű csoport leírása
  • NB1: az attribútumok neveiben nem különböztetjük meg a kis- és a nagybetűt (case insensitive)
  • NB2: az objectClass attribútum értékei olyan osztályok, melyek a sémában leírják az adott címszó kötelező és opcionális attribútumait, illetve azok formátumát
  • NB3: az RDN-t nem elegendő a DN-ben feltüntetni
  • NB4: ez nem egy objektum, mert semmilyen műveletet nem társíthatunk hozzá

5 Mi az LDAP URL?

  • ha egy protokoll nem támogatja az URL-t (unified resource locator) az erőforrások (jelen esetben címszavak) azonosítására, akkor sokkal nehezebb eladni a menedzsmentnek
  • csomópontok egy halmazát lehet vele kiválasztani
proto://host:port/DN?attributes?scope?filter?extensions
  • proto: ldap, vagy ldaps (LDAP+SSL)
  • host: DNS név vagy IP cím
  • port: port szám, opcionális (alapértelmezés ldap esetén 389, ldaps esetén 636)
  • DN: a keresés kiindulópontjának megkülönböztető neve
  • attributes: meglepő módon az attribútumok listája, opcionális
  • scope: base, ha pontosan egy címszót keresünk; one, ha a DN-ben megadott csomópont közvetlen gyermekei között keresünk; sub, ha egy részfában keresünk - NB: az, hogy melyik az alapértelmezés, implementáció-függő; opcionális
  • filter: ez egy keresési szűrő (lásd később), opcionális
  • extensions: minden, ami az RFC-ből kimaradt (ja igen, opcionális)

6 Hogyan keressünk az LDAP segítségével?

  • mivel az LDAP-ot címtárak elérésére fejlesztették, legjobban a kereséseket támogatja (igazából minden más igen körülményes vele)
  • telepítsünk egy LDAP klienst - Debian alatt az ldap-utils csomag tartalmazza az OpenLDAP kliensoldali segédprogramjait
  • mivel a legtöbb LDAP kliens implementáció az RFC-ben leírt URL formátumot nem támogatja, gyorsan felejtsük el a fentebb ismertetetteket és nézzünk utána a manual-ban a paraméterezésnek
$ ldapsearch -LLL                                         \
             -H ldaps://localhost/                        \
             -b 'ou=People,dc=42,dc=hu'                   \
             -s sub                                       \
             -x                                           \
             '(&(objectClass=inetOrgPerson)(uid=balazs))' \
             mail                                         \
  | grep '^mail:'
mail: ifj.fulop.balazs@42.hu
  • -LLL: a legszűkszavúbb, kommentmentes LDIF formátumot kérjük
  • -H: LDAP URI megadása (nem URL!)
  • -b: a keresés kiindulópontja
  • -s: a keresés hatóköre
  • -x: SASL nélkül kapcsolódunk
  • filter: minden szűrő zárójelek között, logikai operátorok prefix jelöléssel
  • attribútumok: egyszerűen, szóközzel elválasztva
  • a végén azért áll egy grep, mert a parancs kimenete tartalmazza a DN-t, amire most nem volt szükség

7 Végülis mikor jó ez az egész?

  • ha az adatbázisműveletek döntő többsége keresés jellegű ÉS
  • nincs szükség tranzakciókra ÉS
  • nincs szükség idegen kulcsokra és komoly kényszerekre (constraint) VAGY
  • ha marhára unatkozunk
Személyes eszközök