ou=Pracownicy,dc=UCI,dc=PL - poddrzewo,
które zawierać będzie wpisy z danymi pracowników
cn=jerzy,ou=Pracownicy,dc=UCI,dc=PL - DN przykładowego wpisu
Struktura bazy wygląda zatem następująco:
Każdy wpis na poziomie ou=Pracownicy,dc=uci,dc=pl należy do klasy obiektów inetOrgPerson i posiada następujące atrybuty: cn, sn, title, organizationName, streetAddress, l, st, postalCode, mail, telephoneNumber .
Plik /etc/openldap/slapd.conf wygląda następująco:
# Dołączenie potrzebnych schematów
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
# Ustawienie poziomu logowania umożliwiającego śledzenie przetwarzania przez serwer ACL-i .
loglevel 384
# Definicja bazy, w której będą przechowywane adresy
database ldbm
suffix "dc=UCI,dc=PL"
rootdn "cn=root,dc=UCI,dc=PL"
rootpw {SSHA}f/n3fk8Oo5Y0Jcv/rxy/0/ntITzcqLOO
# Ustawienie prawa do czytania dla wszystkich dla poddrzewa o wierzchołku: ou=Pracownicy,dc=UCI,dc=PL
access to dn=".*,ou=Pracownicy,dc=UCI,dc=PL"
by * read
# Katalog, w którym zostanie umieszczona baza danych
directory /usr/local/openldap/var/openldap-ldbm
# Indeksy
index objectClass eq
dn: dc=UCI,dc=PL
objectClass: dcObject
objectClass: organization
o: Uczelniane Centrum Informatyczne
dc: UCI
dn: ou=Pracownicy, dc=UCI, dc=PL
ou: Pracownicy
objectClass: top
objectClass: organizationalUnit
dn: cn=jerzy,ou=Pracownicy,dc=UCI,dc=PL
cn: Jerzy Szymanski
sn: Szymanski
objectclass: inetOrgPerson
title: ml. programista
organizationName: PSU
streetAddress: Chopina 12/18
l: Torun
st: kujawsko-pomorskie
postalCode: 87-100
mail: Jerzy.Szymanski@uni.torun.pl
telephoneNumber: +48566113372
dn: cn=jan,ou=Pracownicy,dc=UCI,dc=PL
cn: Jan Kowalski
sn: Kowalski
objectclass: inetOrgPerson
title: st. programista
organizationName: PSU
streetAddress: Chopina 12/18
l: Torun
st: kujawsko-pomorskie
postalCode: 87-100
mail: Jan.Kowalski@uni.torun.pl
telephoneNumber: +48566113372
.......
Dalej w pliku występują kolejne wpisy dla poszczególnych osób.
/usr/local/openldap/bin/ldapadd -x -D "cn=root,dc=UCI,dc=PL" -w haslo -f adresy.ldif
Przed uruchomieniem ldapadd należy upewnić się czy w systemie jest uruchomiony proces slapd.
Niewątpliwą wadą aplikacji jest to, że w obecnej wersji nie jest możliwe dowiązanie do bazy LDAP inne niż anonimowe. Naraża to nasze dane adresowe na niebezpieczeństwo ujawnienia osobom niepowołanym.
Ponieważ pakiet Squirrelmail jest napisany w języku PHP, wystarczy więc rozpakować pakiet w katalogu dostępnym serwerowi WWW, np. w katalogu htdocs/squirrel . Dalszej konfiguracji dokonuje się w podkatalogu squirrel/config. Korzystając z umieszczonego tam przykładowego pliku konfiguracyjnego config_default.php należy w tym katalogu utworzyć własny plik konfiguracyjny o nazwie config.php. Włączenie możliwości korzystania z bazy LDAP polega na umieszczeniu w tym pliku co najmniej jednego wpisu postaci:
$ldap_server[nr] = array(
'host' => 'Adres serwera LDAP',
'base' => 'Podstawowy DN bazy',
'name' => 'Opis książki adresowej',
'port' => 'Nr portu serwera LDAP',
'charset' => 'Symbol standardu kodowania znaków przez serwer LDAP',
'maxrows' => 'Maksymalna ilość wierszy w wynikach wyszukiwania'
);
W przypadku naszej testowej bazy danych zakładając, że serwer LDAP pracuje na komputerze lokalnym, konfiguracja może wyglądać następująco:
$ldap_server[0] = array(
'host' => 'localhost',
'base' => 'dc=Pracownicy,dc=UCI,dc=PL',
'name' => 'Baza adresów',
'port' => '389',
'charset' => 'utf-8',
'maxrows' => '30'
);
W miejscu nr wpisujemy kolejno od 0 numery serwerów LDAP (w przypadku,
gdy chcemy korzystać z większej ilości serwerów) i
zapisujemy dla nich oddzielne konfiguracje wg powyższego schematu.
W typowej sytuacji, gdy serwer LDAP pracuje na porcie 389 oraz używa standardu kodowania znaków utf-8 i nie potrzebujemy ograniczeń co do maksymalnej ilości pozycji w wynikach wyszukiwania, wystarczy następująca konfiguracja
$ldap_server[0] = array(
'host' => 'localhost',
'base' => 'dc=Pracownicy,dc=UCI,dc=PL',
'name' => 'Baza adresów',
);
Aby wspomóc administratorów w tworzeniu i wprowadzaniu zmian w konfiguracji, w katalogu squirrel/config autorzy programu zamieścili prosty, lecz bardzo funkcjonalny skrypt konfiguracyjny conf.pl . Z pomocą tego skryptu można łatwo ustawić wszelkie opcje programu. Dodatkowo, konfigurując program skryptem, dla każdej wprowadzanej pozycji dostępny jest krótki opis jej przeznaczenia.
W rzeczywistości książka adresowa realizowana jest przez oddzielny moduł Horde o nazwie Turba . Moduł ten pozwala na dostęp do książki adresowej z poziomu dowolnej aplikacji dla środowiska Horde. Dostępną w nim książkę adresową łatwo można zintegrować z IMP-em w ten sposób, że z poziomu użytkownika widoczna jest ona jako jedna z pozycji w menu tego programu. Turba pozwala także na korzystanie z wielu książek adresowych umieszczonych na różnych serwerach LDAP. Jedną z jej zalet jest też to, że można wybrać atrybuty (np. imię, nazwisko, adres emailowy), według których możliwe będzie wyszukiwanie osoby w książce.
Istotną rzeczą jest to, że Turba pozwala na dowiązanie do bazy LDAP z podaniem DN-u użytkownika oraz hasła. Umożliwia to w połączeniu z odpowiednią konfiguracją praw dostępu do bazy na serwerze LDAP szczegółowe ustalenie praw dostępu z poziomu książki adresowej do danych umieszczonych na serwerze LDAP z dokładnością do poszczególnych atrybutów wpisów.
Reasumując, zalety książki adresowej Turba to:
Do poprawnego działania Horde wymagane jest, by moduł PHP dla serwera Apache skompilowany był z następującymi opcjami programu configure : --with-gettext --with-xml --with-mysql --with-ldap --with-imap .
Istnieje możliwość sprawdzenia, czy serwer WWW, PHP oraz Horde jest prawidłowo
skonfigurowane. Należy połączyć się przeglądarką z testową stroną Horde:
http://nazwa_naszego_serwera_WWW/horde/test.php.
Strona ta poinformuje nas czy posiadamy poprawnie skonfigurowane środowisko
do pracy Horde.
Moduł Turba odpowiada za obsługę książek adresowych, więc wszelkich wpisów związanych z testową bazą danych dokonujemy w jego plikach konfiguracyjnych - katalog turba/config.
Definicji książek dokonujemy w pliku turba/config/sources.php . Wpis dla pojedyńczej książki adresowej LDAP w tym pliku dla testowej bazy danych może wyglądać następująco:
$cfgSources['ldap_abook'] = array(
'title' => 'książka LDAP',
'type' => 'ldap',
'params' => array(
'server' => 'localhost',
'port' => 389,
'root' => 'ou=Pracownicy,dc=UCI,dc=PL',
'dn' => array('cn'),
'objectclass' => 'inetOrgPerson',
'objectclass' => 'top',
'filter' => ''
),
'map' => array(
'__key' => 'dn',
'name' => 'cn',
'email' => 'mail',
'alias' => 'sn',
'title' => 'title',
'workPhone' => 'telephonenumber',
'organizacja' => 'organizationname',
'miejscowosc' => 'l'
),
'search' => array(
'name',
'email',
'alias'
),
'strict' => array(
'dn'
),
'public' => true,
'readonly' => true,
'export' => false
);
Omówimy ważniejsze opcje na powyższym przykładzie.
W tablicy params podajemy parametry dotyczące serwera LDAP i opis
bazy z danymi.
W tablicy map specyfikujemy żądane atrybuty, które aplikacja ma wyświetlać
dla danego wpisu. Powyżej zażądano wyświetlania pól: cn, mail, sn, title,
telephoneNumber, organizationName, l.
Wszystkie atrybuty wpisów, rozpoznawane przez Turbę zdefiniowane są w pliku
turba/config/attributes.php . W powyższym przykładzie do listy zostały
dodane dwa dodatkowe pola: organizacja oraz miejscowosc
. Aby aplikacja zezwoliła na ich użycie, do pliku turba/config/attributes.php
został dodany następujący opis tych pól:
$attributes['organizacja'] = array(
'type' => 'text',
'desc' => _("Organization")
);
$attributes['miejscowosc'] = array(
'type' => 'text',
'desc' => _("City")
);
Następna tablica - search, zawiera nazwy atrybutów, dla których
żądamy by możliwe było wyszukiwanie wg nich osób w książce adresowej.
Za pomocą parametru public ustala się, czy definiowana książka jest
dostępna do czytania dla wszystkich.
Parametr readonly wskazuje, czy możliwe będzie zapisywanie danych do
książki.
W przypadku gdy chcemy, by dostęp do danych osobowych opierał się na DN użytkownika i haśle, należy parametr public ustawić na false oraz w tablicy params dodać następujące pozycje:
'bind_dn' => 'DN użytkownika',
'bind_password' => 'tajne_hasło',
Użyty tutaj DN powinien posiadać prawo do czytania danych z bazy LDAP. Wygodne jest tutaj utworzenie do tego celu specjalnego użytkownika, choć zachowując szczególną ostrożność można użyć do tego celu także DN-u "cn=root,dc=UCI,dc=PL ". W przypadku tym należy koniecznie ustawić opcję readonly na true, a w obu przypadkach należy pamiętać by plik turba/config/sources.php w systemie był dostępny do czytania wyłącznie dla użytkownika, z którego prawami pracuje serwer WWW.
Niedociągnięciem programu jest to, ze w tablicy map nie można używać dużych liter alfabetu w nazwach atrybutów wpisu, co jest powszechnie praktykowane w schematach LDAP. Np. w powyższym przykładzie zapisanie wartości workPhone jako telephoneNumber spowoduje, że przy opisie osoby, nr telefonu nie zostanie wyświetlony. Należy koniecznie użyć zapisu telephonenumber .
Następnie możemy dołączyć pozycję książki adresowej do menu programu IMP, umieszczając w pliku horde/imp/config/conf.php linijkę
$conf['menu']['apps'] = array('turba');
(przy założeniu, że moduł Turba został standardowo zarejestrowany w Horde pod nazwą "turba")
Uwagę zwraca również słaba dokumentacja dotycząca konfigurowania (oraz samych możliwości) wszelkich funkcji związanych z LDAP. Dotyczy to ponownie wszystkich omawianych komponentów Horde.
Konfiguracja nie nastręcza kłopotów. Wymagania programu to w zasadzie tylko
posiadanie zainstalowanej biblioteki GTK+ w wersji 1.2.6 lub wyższej. Jeśli
nie wymagamy dodatkowych własnych ustawień i mamy zainstalowany OpenLDAP,
po rozpakowaniu źródeł, możemy skonfigurować program poleceniem:
configure --prefix=/usr/local/sylphed --enable-ldap --disable-imlib --disable-gdk-pixbuf
Następnie kompilujemy kod programu poleceniem make oraz instalujemy skompilowany program za pomocą make install.