LDAP - instalacja i bezpieczeństwo

Bardzo dynamiczy rozwój Internetu, stawia coraz wyższą poprzeczkę twórcom narzędzi pozwalających dotrzeć nam do szukanej informacji czy kontaktu z innymi. Jedną z takich usług są tzw. usługi katalogowe. Ostatnio dominującym wśród standardów przeznaczonych do obsługi zasobów danych o charakterze katalogowym stał się serwer LDAP (Lightweight Directory Access Protocol).

20.9.2004 16:00 | Marek Chrobak | přečteno 34688×

Bardzo dynamiczy rozwój Internetu, stawia coraz wyższą poprzeczkę twórcom narzędzi pozwalających dotrzeć nam do szukanej informacji czy kontaktu z innymi. Jedn ą z takich usług są tzw. usługi katalogowe. Ostatnio dominującym wśród standardów przeznaczonych do obsługi zasobów danych o charakterze katalogowym stał się serw er LDAP (Lightweight Directory Access Protocol), który dostarczając uniwersalną bazę danych oraz interfejs dostępowy wykorzystujący protokół TCP/IP, stanowi wygod ną infrastrukturę dla oferowanych usług sieciowych. Istotną własnością systemów działających w oparciu o protokół LDAP jest dobra skalowalność i możliwość dostoso wania schematu bazy do naszych potrzeb.

Chciałbym Wam przybliżyć zasadę działania LDAP-a i pokazać w jaki sposób stworzyć własną bazę w oparciu o ten serwer.
A więc zacznijmy od początku. Musimy mieć wersję instalacyjną. Możemy ją ściągnąć ze strony http://www.openldap.org/software/download/. Sam proces kompilacji i instalacji jest stosunkowo prosty. Wystarczy, że wykonamy następujące polecenia:

tar xvzf openldap-VERSION.tgz
cd openldap-VERSION
./configure --enable-ldap --enable-ldbm
make depend
make
make test
make install

Teraz zostaje nam już tylko edytowanie pliku konfiguracyjnego bazy /usr/local/etc/openldap/slapd.conf. Przykładowy plik konfiguracyjny może wyglądać następująco:

include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
database ldbm
suffix "o=FIRMA,c=pl"
rootdn "cn=Manager,o=FIRMA,c=pl"
rootpw naszehaslo
directory /usr/local/var/openldap-data
pidfile /usr/local/var/slapd.pid
argsfile /usr/local/var/slapd.args
index objectClass eq

Skonfigurowaną bazę uruchamiamy poleceniem /usr/local/libexec/slapd.
Zanim przystąpimy do dalszej konfiguracji, musimy najpierw utworzyć w bazie tzw. rekord główny. Może to być wpis określający organizację lub domenę. Kolejne rekor dy będą znajdować się poniżej. Każdy następny rekord dodajemy wykonując polecenie:

ldapadd -f naszplik -D 'cn=Manager,o=FIRMA,c=pl' -w naszehaslo

gdzie -f nasz_plik wskazuje skrypt do tworzenia bazy i podstawowych danych. Kolejny parametr -D określa nazwę użytkownika mającego dostęp do zapisu w bazie, za ś opcja -w nasze_haslo jest hasłem użytkownika. Proponuję stworzyć dwa pliki konfiguracyjne o nazwach organs.ldap, który będzie zawierał informacje o strukturze b azy oraz users.ldap. Przykładowe pliki powinny wyglądać następująco:

-----------organs.ldap-----------

dn: o=FIRMA,c=pl
o: FIRMA
objectclass: organization
description: Firma Sp. z o.o.

dn: ou=Ksiegowosc,o=FIRMA,c=pl
objectclass: organizationalUnit
ou: Ksiegowosc
description: Ksiegowosc

dn: ou=Pracownicy,o=FIRMA,c=pl
objectclass: organizationalUnit
ou: Pracownicy
description: Pracownicy

-----------organs.ldap-----------



-----------users.ldap-----------

dn: cn=Jan Kowalski,ou=Pracownicy,o=FIRMA,c=pl
objectclass: person
objectclass: inetorgperson
sn: Kowalski
cn: Jan Kowalski
gn: Jan title: Administrator
homePhone: +48332220099
mobile: +48601223344
mail: j.kowalski@firma.net

dn: cn=Wojciech Brzozowski,ou=Ksiegowosc,o=FIRMA,c=pl
objectclass: person
objectclass: inetorgperson
sn: Brzozowski
cn: Wojciech Brzozowski
gn: Wojciech title: Fabrykant
homePhone: +48322009988
mobile: +48505334488
mail: w.brzozowski@firma.net

-----------users.ldap-----------



W przykładzie określamy rekordy dla Jana Kowalskiego oraz Wojciecha Brzozowskiego. Standardowo każda osoba powinna należeć do klasy person, która wymaga określ enia atrybutów cn (commonname/nazwa zwyczajowa) oraz sn (surname/nazwisko), które są zdefiniowane w core.schema. Użyliśmy także atrybutu gn (givenname/imię) zawar tego w klasie inetOrgPerson. I tak po wykonaniu następujących poleceń:

mamy utworzoną bazę z wprowadzonymi dwoma rekordami.
Jeśli chcemy sprawdzić czy nasze dane znalazły się w bazie uruchamiamy polecenia:

ldapadd -f orgs.ldap -D 'cn=Manager,o=FIRMA,c =pl' -w nasze_haslo
ldapadd -f users.ldap -D 'cn=Manager,o=FIRMA,c=pl' -w nasze_haslo

ldapsearch -b "ou=Pracownicy,o=FIRMA,c=pl" cn=*

Teraz zajmiemy się bezpieczeństwem. Pod pojęciem bezpieczeństwa bazy LDAP będę tu rozumiał dwa zasadnicze czynniki: prawa dostępu oraz szyfrowanie transmisji. OpenLDAP posiada rozbudowany mechanizm kontrolujący prawa dostępu. Postać ogólną pojedynczej definicji ACL (Access Control Limit - Limit kontroli dostępu) określa następujący schemat:

access to [obiekt] by [użytkownik] [poziom dostępu]

Poszczególne składowe określone w nawiasach kwadratowych określają:

Jak widać na tym przykładzie każdy następny poziom dostępu posiada uprawnienia poprzednika. Czyli użytkownik otrzymujący poziom read, otrzymuje także search, compare, auth.
Oto kilka przykładowych list kontroli dostępu do OpenLDAP:

Jednak taki poziom zabezpieczeń jest bardzo prymitywny w dzisiejszych czasach, skoro istnieje możliwość podsłuchania transmisji i przechwycenia przesyłanych da nych. Aby zwiększyć poziom zabezpieczeń możemy użyć połączenia szyfrowanego SSL. Skorzystajmy z biblioteki OpenLDAP z Open SSL dzięki opcjom:

Dodatkowo możemy użyć następujących parametrów:

Taka definicja opcji pozwala na korzystanie z protokołu TLS na standardowym porcie ldap (389/tcp). Uruchomienie OpenLDAP działającego na porcie ldaps (636/tcp) jest dopiero możliwe po uruchomieniu bazy z opcjami:

/usr/libexec/slapd -h 'ldap:/// ldaps:///'

Dzięki temu demon może nasłuchiwać na wszystkich adresach przypisanych do serwera na portach ldap i ldaps. Definicja adresu, na jakim ma nasłuchiwać powinien w yglądać:

/usr/libexec/slapd -h 'ldap://192.168.0.1/ ldaps://192.168.0.1/'

I to by było wszystko na temat bezpieczeństwa w OpenLDAP. Istnieje oczywiście wiele możliwości zabezpieczenia serwera, lecz jest ich tak wiele, że o tym innym razem.

Do mitów należy opinia, że LDAP stosuje się tam gdzie liczbę użytkowników określa się w tysiącach. Usługi katalogowe LDAP można stosować "wszędzie i praktyczni e do wszystkiego". Mam nadzieję, że artykuł ten przybliżył Wam zagadnienia związane z instalowaniem i korzystaniem z serwera LDAP i dzięki niemu zaczniecie korzys tać z tego serwera usług katalogowych.

Autor: Marek Chrobak, 17-09-2004

Online verze článku: http://www.linuxsoft.cz/article.php?id_article=415