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