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…