Instalacja i konfiguracja OpenLDAP
Instalacja i podstawowa konfiguracja usługi katalogowej LDAP (OpenLDAP) na Ubuntu:
drfugazi@charr:~% sudo aptitude install slapd ldap-utils
Opis wzorowany jest na angielskim opisie dla Karmic Koala na HowtoForge. Ja jestem przyzwyczajony do konfigurowania LDAPa w pliku slapd.conf
, ale to stara szkoła. Tutaj dostajemy możliwość dynamicznej konfiguracji bez konieczności restartu serwera LDAP.
cd /etc/ldap
Na początek proponuję dodać kilka schematów, zwierających klasy obiektów, które będą przydatne później:
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif
Jeśli Wam się nie uda dodanie z powodu niewystarczających uprawnień, to przełączcie się na roota poleceniem sudo su -
Teraz należy załadować moduł bazy danych i utworzyć bazę, polecam użycie bazy Berkeley (bdb lub hdb), tworzymy plik db.ldif z zawartością jak poniżej, oczywiście zastępujemy example.com
swoją nazwą domeny i wpisujemy własne hasło do olcRootPW
:
# Load dynamic backend modules
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
olcModuleload: {0}back_hdb
# Create the database
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=example,dc=com
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW: example
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcDbIndex: uid pres,eq
olcDbIndex: cn,sn,mail pres,eq,approx,sub
olcDbIndex: objectClass eq
Zapisujemy ten plik jako db.ldif i ładujemy moduł i inicjalizujemy bazę w LDAP:
ldapadd -Y EXTERNAL -H ldapi:/// -f db.ldif
Tworzymy bazowy DN oraz konto administratora, aby wygenerować zaszyfrowane hasło należy użyć polecenia slappasswd
, zawartość base.ldif
:
dn: dc=example,dc=com
objectClass: dcObject
objectclass: organization
o: example.com
dc: example
description: My LDAP Root
dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
userPassword: {MD5}Gnmk1g3mcY6OWzJuM4rlMw==
description: LDAP administrator
Oczywiście tak jak poprzednio example.com
oraz wszystkie wystąpienia example
i com
zastępujemy naszą własną nazwą, jeśli domena ma więcej niż dwa człony, to można oczywiście dodać kolejny domain component
(dc=…)
Zapisujemy plik base.ldif
i dodajemy go do LDAPa poleceniem:
ldapadd -Y EXTERNAL -H ldapi:/// -f base.ldif
Część dotyczącą modyfikacji wbudowanych ACLi, możemy sobie na razie odpuścić, ale trzeba zabezpieczyć hasła:
vi acl.ldif
Zawartość pliku acl.ldif
:
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=example,dc=com" write by anonymous auth by self write by * none
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=example,dc=com" write by * read
Uwaga: w tutorialu na HowtoForge brakuje linii changetype: modify
, bez niej polecenie:
ldapadd -Y EXTERNAL -H ldapi:/// -f acl.ldif
skończy się zapewne takim komunikatem:
ldap_add: Undefined attribute type (17)
additional info: add: attribute type undefined
zatem w moim opisie jest już dołożona.
Podstawową konfigurację LDAPa mamy więc z głowy, teraz przydało by się jakieś narzędzie do zarządzania.
Ja osobiście używam dwóch: Eclipse czy też Apache Directory Studio na kliencie oraz phpLDAPadmin po stronie serwera. Do tego ostatniego nawet kiedyś popełniłem tłumaczenie, więc posiada Polski interfejs.
Myślę, że na początek phpLDAPadmin (w skrócie PLA) w zupełności wystarczy, Eclipse z modułem do LDAPa warto zainstalować jak się chce operować bezpośrednio z klienta na katalogu, ale to też wymaga przepuszczenia odpowiednich portów (389 lub 636) na firewallu. Przy PLA nie otwieramy portu, więc nawet jak w początkowej fazie nie mamy dobrze skonstruowanych ACLi to nikt się nam nie wepnie i nie wyciągnie danych z katalogu.
Instalacja na Ubuntu nie powinna przysporzyć problemu, jeśli mamy już uruchomioną usługę HTTP to powinno wystarczyć:
sudo aptitude install phpldapadmin
Po zainstalowaniu powinniśmy dostać się do interfejsu PLA pod adresem: http://example.com/phpldapadmin (oczywiście example.com jak zwykle trzeba zamienić na nazwę naszej domeny).
Konfiguracja PLA znajduje się w pliku /etc/phpldapadmin/config.php
i domyślnie jako serwer LDAP skonfigurowany jest localhost
, to w większości wypadków będzie poprawne, natomiast warto/trzeba zmienić dwie linie, żeby uniknąć kłopotów:
$servers->setValue('server','base',array('dc=example,dc=com'));
$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');
W pierwszej linii ustawiamy bazowy DN, bo PLA nie zawsze potrafi go dobrze wyciągnąć, w drugiej ułatwiamy sobie logowanie, żeby za każdym razem nie poprawiać nazwy użytkownika. Z doświadczenia polecam też wyłączenie szablonów wyświetlania/edycji wpisów, bo bywa to wkurzające, ale to już wg uznania, różnicę zobaczycie po takiej zmianie:
/* Just show your custom templates. */
$config->custom->appearance['custom_templates_only'] = true;