• Bez kategorii

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 -i

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;

Czas na zalogowanie się do phpLDAPadmina i obejrzenie naszego katalogu, dla tych, którzy mają niewielkie doświadczenie z usługami katalogowymi na początek polecam obejrzenie schematu i klasy inetOrgPerson, na tej klasie lub pochodnych często budowane są książki adresowe.

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;

Czas na zalogowanie się do phpLDAPadmina i obejrzenie naszego katalogu, dla tych, którzy mają niewielkie doświadczenie z usługami katalogowymi na początek polecam obejrzenie schematu i klasy inetOrgPerson, na tej klasie lub pochodnych często budowane są książki adresowe.

Może Ci się również spodoba

Dodaj komentarz