LDAP (hodně zjednodušeně)

LightweightDirectoryAccessProtocol
lehkýadresářpřístupprotokol
lehký protokol pro přístup k adresáři
protokol pro přístup k lehkému adresáři
protokol pro lehký přístup k adresáři
# vrchol stromu
dn: o=mojefirma
objectClass: top
objectClass: organization
o: mojefirma

dn: ou=Uzivatele,o=mojefirma
objectClass: organizationalUnit
description: Uzivatele v MeFirme
ou: Uzivatele

dn: uid=pelikan,ou=Uzivatele,o=mojefirma
objectclass: inetOrgPerson
objectclass: organizationalPerson
objectclass: person
objectclass: posixAccount
objectclass: shadowAccount
uid: pelikan
cn: Martin
sn: Pelikan
loginshell: /bin/false
uidnumber: 1000
gidnumber: 100
homedirectory: /home/pelikan
userpassword: {CRYPT}$salt$osoleny_hash

dn: ou=Skupiny,o=mojefirma
objectClass: organizationalUnit
description: {0}Vic atributu k 1 typu.
description: {1}Usporadani treba takto.
description: {2}Nebo jak chcete.
ou: Skupiny

dn: cn=admini_IS,ou=Skupiny,o=mojefirma
objectClass: top
objectClass: posixGroup
cn: admini_IS
gidNumber: 1000
memberUid: pelikan
memberUid: novakova
# vrchol stromu
dn: o=mojefirma
objectClass: top
objectClass: organization
o: mojefirma

dn: ou=admini_IS,o=mojefirma
objectClass: organizationalUnit
description: admini inf. systemu
ou: admini_IS

dn: uid=pelikan,ou=admini_IS,o=mojefirma
objectclass: inetOrgPerson
objectclass: organizationalPerson
objectclass: person
objectclass: posixAccount
objectclass: shadowAccount
uid: pelikan
cn: Martin
sn: Pelikan
loginshell: /bin/false
uidnumber: 1000
gidnumber: 100
homedirectory: /home/pelikan
userpassword: {CRYPT}$salt$osoleny_hash

Proč ne "lehký protokol"?

...ne, není to lightweight protocol...

Lehký adresář?

Spíš lightweight directory pinned down by heavyweight policy.

Lehký přístup?

# pkg_add -iv openldap-client
# ldapsearch query
výstup
# ldapsearch -WxD binddn query
výstup2
require_once("ldap.php");
$l = new ldap_connection(server, port);
$l->bind(dn, pass);
$l->search("ou=Skupiny, o=firma", "cn=*");

$g = new ldap_group();
foreach ($l->result as $i) {
	$g->read_properties($i);
	echo ($g);
}

Jaký LDAP server?

OpenLDAP

OpenBSD ldapd(8)

ve vývoji

389-ds

neznam

Active Directory, Red Hat Directory Server

pro odvážné...

OpenLDAP - architektura

Nastavení OpenLDAP - dříve

Nastavení OpenLDAP - dnes

Vytvoříme strom a naplníme našimi daty

Zadávání ne-ASCII stringů v base64

Chcete-li zadat hodnotu v Unicode nebo začínající dvojtečkou nebo mezerou, zadejte ji jako "typ:: hodnota-v-base64":

Pozor na konce řádků!
$ echo "cn:: `echo -n ' zacinam mezerou' | openssl enc -base64`"
cn:: IHphY2luYW0gbWV6ZXJvdQ==
$ echo "Cg==" | openssl enc -d -base64

$
## s balíkem base64
$ echo "hodnota" | base64 | base64 -d
hodnota
base64: invalid input
$ echo "Cg==" | base64 -d | hexdump
base64: invalid input
$ echo -n "Cg==" | base64 -d | hexdump
0000000 000a
0000001

Více informací samozřejmě v ldapadd(8), ldif(5).

Formáty hesel ještě jednou

Stejně jako přístupy k heslům si hlídejte jednoznačnost UID! TODO odkaz na moji fci

Pro zvídavé

+ (prefixová notace vyhledávacího filtru, -s scope)
+ příklady proti AD?
+ TLS a dopravení certifikátů ke klientům (v podstatě se neliší od návodu k Postfixu)

# vi /etc/relayd.conf
relay ldapgw {
        listen on 127.0.0.1 port 389
	forward with ssl to real.server port 636
}


- používejte slapd -d \? ## každé číslo znamená trochu něco jiného

Co teď?

Máme databázi uživatelů. Zbývá dořešit zabezpečení (access to... + případně TLS + konfigurace klientů) a navázat na ni systémové databáze passwd, shadow, group, ...

zpátky na stránku o NIS, NFS, AMD