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., 15: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