Doménový řadič a další služby sítě – Adresářový server I
Tento článek je pokračováním k předchozím článkům (1,2), které popisují jak vybudovat Doménový řadič a další služby sítě.
Stavíme síť, která má více vzdálených poboček a chceme nabídnout uživatelům možnost přecházet z jednoho pracoviště na druhé. Abychom mu toto mohli nabídnout, je třeba, aby jeho uživatelský účet (jméno a heslo) byl dostupný napříč všemi pobočkami. Pokud k tomu přidáme ještě skutečnost, že pobočky jsou propojeny s centrálou například přes ADSL, tak nezbývá než všechny uživatelské účty uchovávat lokálně na pobočkových serverech. Pokud by tomu tak nebylo, pobočka by byla závislá na propojení s centrálou, a každý si zřejmě dokáže představit rozladění uživatele, který přijde do práce a zjistí že se nepřihlásí, protože někdo překopl kabel od ADSL a internet prostě nejde.
Uživatelé jsou v OS Linux standardně založeni do souboru /etc/passwd, hesla mají v šifrované podobě v souboru /etc/shadow. Z hlediska doménového řadiče je jméno a heslo pouze malá část potřebných informací, další – podstatně větší množství – si Samba uchovává v lokálním souboru. Samozřejmě takto zapsané informace se velmi špatně replikují na další servery (pobočky).
Sdílení informací o uživatelích
Pro záznam údajů o uživatelích využijeme adresářový server, do kterého je možné přistupovat protokolem LDAP. Uživatelské účty uložené v adresářovém serveru je možné jednoduše namapovat do operačního systému. Část účtů (ty systémové) bude tedy v /etc/passwd. Účty pro Doménu (tedy uživatele) pak budou v Adresářovém serveru a Sambu také napojíme na adresářový server, aby si mohla přečíst informace potřebné ke svému běhu. Jako software adresářového serveru použijeme OpenLDAP server, který je považován za Open Source referenční implementaci LDAP protokolu. Abychom dostali účty z jednoho adresářového serveru na všechny servery, je třeba zprovoznit replikaci v OpenLDAP. OpenLDAP server podporuje několik módů replikace informací na další OpenLDAP servery. V hledáčku našeho řešení jsou dvě možná nasazení – Multi-master a Syncrepl. Multi-master, jak název napovídá je typ replikace, kdy je každá replika serveru schopná zapisovat informace do adresářového serveru a tyto se pak replikují na ostatní. Při použití tohoto způsobu replikace mohou vznikat kolize, které by mohli vést k nekonzistenci dat. Jako příklad je možné uvést založení uživatele na pobočce, která je offline a založení uživatele se stejným UID na jiné pobočce. Po navázání spojení by došlo ke kolizi dat a replikace by nemohla být provedena, každý servery by měl jiný záznam k uživateli se stejným UID.
Replikace Syncrepl naproti tomu využívá pouze jeden „master“ proces, který umožňuje zápis. ostatní napojené slave servery se pak k tomuto procesu připojují a čtou z něj informace, které si replikují. Slave servery jsou určeny pouze pro čtení, případný požadavek na zápis je přesměrován na „master“ repliku, která zápis provede a tento zápis se pak zreplikuje opět na všechny slave servery. Díky tomuto mechanizmu může dojít k nekonzistenci dat na různých serverech (například v případě výpadku spojení a tedy neproběhnuté operaci smazání/vložení), ale tato nekonzistence se automaticky vyřeší po opětovném navázání spojení, kdy dojde k replikaci dat a „vyrovnání“ stavu serverů. Mechanizmus replikace Syncrepl tedy zajistí konzistenci dat přesně v souladu s našimi požadavky. Další výhodou je, že Syncrepl je řízen slave serverem, při přidání další pobočky není nutné měnit konfiguraci Master LDAP serveru. Pokud potřebujete podrobnější informace doporučuji pročíst dokumentaci: http://www.openldap.org/doc/admin24/replication.html
Instalace OpenLDAP serveru
OpenLDAP doporučuji instalovat ve verzi 2.4.x. Celé řešení sítě je postavené nad operačním systémem CentOS 6, kde je tato verze již jako výchozí, v Centos 5 je třeba najít zkompilované balíčky, nebo OpenLDAP zkompilovat. Nižší verze mají rozdílný způsob konfigurace (zápis konfiguračního souboru).
yum install openldap-servers db4 openldap-clients nss-pam-ldapd
Základní konfigurace OpenLDAP serveru
Pro základní zprovoznění OpenLDAP serveru potřebujeme konfigurační soubor /etc/openldap/slapd.conf. Jeden takový zde předkládám. Před použitím souboru je třeba:
- vygenerovat hesla pro parametr rootpw v sekci „database config“ a „database bdb“. Hesla vygenerujete příkazem slappasswd z konzole.
- ověřit zda schémata v sekci include existují, pokud ne (bude se týkat minimálně samba.schema), tak je tam zkopírovat. Soubor samba.schema je k nalezení nejlépe v adresáři který je součástí instalace Samby (/usr/share/doc/samba-X.X.X/LDAP/samba.schema)
- zkontrolovat zda existuje adresář /var/run/openldap/ a také /var/lib/ldap a zda mají správná práva. Pro oba adresáře je vlastníkem a skupinou ldap:ldap a práva 700 pro /var/lib/ldap a práva 755 pro adresář /var/run/openldap/
# /etc/openldap/slapd.conf # LDAP Master database config rootpw {SSHA}LAelnq/uV3245ddgGFD45sdss11HMBgAoW loglevel 4 include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/samba.schema modulepath /usr/lib64/openldap moduleload back_hdb.la moduleload syncprov.la moduleload back_monitor.la moduleload back_ldap.la pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args database bdb suffix "dc=bcvsolutions,dc=cz" rootdn "cn=Manager,dc=bcvsolutions,dc=cz" rootpw {SSHA}fN2u333454rsaaaDFDSR2YayCFFGGMc1juo9hcw directory /var/lib/ldap # Indices to maintain index objectClass eq index cn pres,sub,eq index sn pres,sub,eq index uid pres,sub,eq index displayName pres,sub,eq index uidNumber eq index gidNumber eq index memberUID eq index sambaSID eq index sambaPrimaryGroupSID eq index sambaDomainName eq index default sub # ulozeni checkpointu bud po 1024KB, nebo po 5ti minutach checkpoint 1024 5 cachesize 10000 idlcachesize 10000 # syncprov specific indexing index entryCSN eq index entryUUID eq # syncrepl Provider for primary db overlay syncprov syncprov-checkpoint 1000 60 database monitor
Po uložení statického konfiguračního souboru do /etc/openldap/slapd.conf je třeba vygenerovat tuto do dynamického formátu „cn=config“. Zde se trochu pozastavím nad otázkou proč? Původně byla konfigurace OpenLDAP statická, tedy jeden konfigurační soubor. V případě provedené změny pak bylo nutné adresářový server restartovat. Což při velké databázi a velkém počtu přístupů, které budou odepřeny není to co by si administrátor serveru přál. Od verze OpenLDAP 2.3 byla přestavena možnost dynamické konfigurace, ve verzi 2.4 je ve spouštěcích scriptech tato jako výchozí, nicméně je možné použít i statický soubor. Je velmi pravděpodobné, že v další verzi bude možnost statického konfiguračního souboru odstraněna, proto doporučuji použití nového způsobu konfigurace. Teď si tedy možná kladete otázku, proč sem dávám statický soubor konfigurace a není zde již nová dynamická konfigurace? Protože dynamickou konfiguraci vygenerujeme ze statického souboru dle postupu:
cd /etc/openldap; rm -rf slapd.d;mkdir slapd.d; slaptest -f slapd.conf -F slapd.d chown -R ldap:ldap slapd.d
První spuštění adresářového serveru
Pokud máme vygenerováno, můžeme server poprvé spustit. Vzhledem k tomu, že není založena databáze, tak spuštěním přes init script skončí chybou. Vygenerování databáze je možné iniciovat spuštěním slapd v debug režimu:
slapd -d -1
jakmile příkaz spustíte, uvidíte výstup debug režimu, který se po krátké chvíli zastaví. Přes ctrl+c pak debug ukončíte, k dalšímu spouštění pak použijete klasický /etc/init.d/ldap start.
Po prvním spuštění v debug režimu je nastavit správně práva na vytvořené soubory:
chown -R ldap:ldap /var/lib/ldap/
Jakmile pak adresářový server spustíte, přes příkaz netstat je možné ověřit zda adresářový server poslouchá na portu 389:
netstat -tpaun| grep 389 tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 1166/slapd tcp 0 0 :::389 :::* LISTEN 1166/slapd
Co když to nefunguje?
Různých nefunkčností může být celá řada. Většina chyb je spojená se špatným konfiguračním souborem, tedy ke spuštění adresářového serveru většinou ani nedojde. Ladění takové chyby je možné z logu adresářového serveru, případně spuštěním v debug režimu. Debug režimů existuje celá řada, kompletní seznam je zde: http://www.openldap.org/doc/admin24/runningslapd.html. Za ty podstatné zmíním level 64, který by měl odhalit chybu v konfiguraci a pak level 256, který vypisuje výsledky položených dotazů. Je tedy velmi užitečný i při ladění koncové aplikace napojené na adresářový server.
Spuštění v debug režimu pak probíhá takto. Zde je debug level 4:
/usr/sbin/slapd -d 4 -h ldap:/// -u ldap
Vzhledem k rozsáhlosti problematiky adresářového serveru je tento článek malým úvodníkem. Další články věnované replikaci, zabezpečení přenosu dat přes ssl, zabezpečení dat v adresářovém serveru obecně a vlastní konfiguraci Samba-LDAP budou následovat…