Hlavní navigace

Náhrada New Technology PDC za Samba PDC (2)

15. 7. 2004
Doba čtení: 11 minut

Sdílet

V druhém dílu, popisujícím postavení domény pod Sambou, se podíváme na konfiguraci Samby nad LDAPem.

Úvodem – co se nevešlo minule

Sambu nelze integrovat do domény/AD domény s Windows PDC jako BDC. Samba se neumí chovat jako plnohodnotný BDC – nepodporuje zatím všechna RPC volání, která jsou pro tuto činnost vhodná. Samba nahrazuje replikaci uživatelské DB přes RPC mechanismy replikací přes LDAP. Ze stejného důvodu nelze provozovat kombinaci Samba PDC/Win BDC.

Teoreticky by bylo možné nechat LDAPovské uživatele z AD LDAPu přistupovat na unixovské/linu­xovské stroje se stejným loginem, nevím, jak by to bylo s heslem – Windows mají nativně jiný formát hashe hesla a není mi známo, jestli je možné ukládat do AD hash hesla ve formátu podporovaném na unix/linux systémech.

Lightweight Directory Access Protocol

LDAP umožňuje uchovávat uživatele ve stromech. Představme si hypotetickou organizaci, která má oddělení A, B a C a marketingové oddělení. Struktura této organizace v LDAP stromu může tedy vypadat následovně:

hyp_organizace
  |
  |-- oddeleniA
  |-- oddeleniB
  |-- oddeleniC
  |-- marketing

V LDAPu je možné replikovat jednotlivé podstromy, takže například na poštovní server pro oddělení A můžeme dostat jenom zaměstnance, kteří jsou zařazeni do oddeleniA. Ukládání do stromové struktury je vhodné pro větší organizace, v našem příkladu si vystačíme s jednou složkou.

LDAP neumí distribuovaně zakládat uživatele. Replikace probíhá vždy mezi master serverem a slave serverem, slave servery obsahují read-only repliku masteru.

K uživatelům v LDAP stromu je možné přikládat další jejich atributy, takže v LDAPu můžete mimo standardního loginu a hesla evidovat též telefon, velikost bot, délku vlasů a další pro vás zajímavé atributy…jenom si pro ně musíte vytvořit patřičné schéma.

Migrace do LDAPu

Jediný dle mého názoru použitelný LDAP server je slapd. Nainstalujeme ho tedy:

root@pdc:~$ apt-get install slapd ldap-utils

Přidáme do LDAPu definici SambaAccount – soubor /usr/share/doc/sam­ba-doc/ examples/LDAP/sam­ba.schema.gz rozbalit (gunzip) a překopírovat do /etc/ldap/sche­ma/samba-schema, změnit konfigurák ldapu. Do souboru /etc/ldap/slap­d.conf přidáme řádku:

include /etc/ldap/schema/samba.schema

Přidáme do LDAPu základní třídy. POZOR: pokud používáme slapadd|slapmodify, je potřeba slapd zastavit! Jinak se nedivte, že LDAP chodí nějak divně a slapcat ukazuje něco jiného než ldapsearch.

root@pdc:~$ /etc/init.d/slapd stop

Přidáme základní LDAP uživatele (manager,.. – slouží pro správu účtů):

root@pdc:~$ slapadd -v -l ldif-base

Hash hesla je možné generovat slappasswd. Je vhodné ho změnit.

Přidat základní skupiny:

root@pdc:~$ slapadd -v -l ldif-groups

Přidáme uživatele migrací z tdbsamu:

Přepíšeme v /etc/samba/smb.conf konfiguraci na ldap:

passdb backend = ldapsam:ldap://localhost

Pdbedit používá pro import funkce Samby, která na oplátku přidává uživatele do LDAPu prostřednictvím skriptů zadaných v add user script apod. Tyto skripty (psané v Perlu) je možné najít na samba.idealx.org pod názvem smbldap-tools. Mně se ovšem verze 0.8.4 moc neosvědčila, takže jsem byl nucen skripty mírně upravit – naleznete je v přiloženém tgz. Do /etc/samba/smb.conf tedy přidáme též:

delete user script = {cesta k smbldap-tools}/smbldap-userdel '%u'
add user script = {cesta k smbldap-tools}/smbldap-useradd -a -g 201 -n -m -s /bin/false '%u'
delete user from group script = {cesta k smbldap-tools}/smbldap-groupmod -x '%u' `echo "%g"|sed "s/ /_/g"`
add group script = {cesta k smbldap-tools}/smbldap-groupadd `echo "%g"|sed "s/ /_/g"`
delete group script = {cesta k smbldap-tools}/smbldap-groupdel `echo "%g"|sed "s/ /_/g"`
add user to group script = {cesta k smbldap-tools}/smbldap-groupmod -m '%u' `echo "%g"|sed "s/ /_/g"`
add machine script = {cesta k smbldap-tools}/smbldap-useradd -w -s /bin/false '%u' 

Pro funkčnost smbldap-tools je třeba do souboru smbldap_bind.conf vyplnit odkazy na master a slave LDAP servery.

Přidáme do /etc/samba/smb.conf následující řádky, říkající, jak se má samba k ldapu přihlásit a kde najde uživatele, skupiny a počítače:

ldap admin dn = "cn=Manager,dc={moje},dc=cz"
ldap delete dn = No
ldap suffix = dc={moje},dc=cz
ldap machine suffix = ou=Computers
ldap group suffix = ou=Groups
ldap user suffix = ou=People
ldap passwd sync = Yes

POZOR: Pořadí suffixu je důležité zachovat, respektive je nutné mít ldap suffix = … jako první (pokud by byl až za ldap user suffix, uživatelé etc. by se hledali ve skupině People atd. pod rootem, kde nejsou).

Heslo pro uživatele Manager je třeba zapsat do Samby:

root@pdc:~$ smbpasswd -w "{heslo}"

Uživatel Manager musí mít v ldapu právo na zápis kamkoliv, tedy i do hesel uživatelů. To zajistí následující řádky v /etc/ldap/slap­d.conf:

# These access lines apply to database #1 only
access to attribute=userPassword
        by dn="cn=Manager,dc={moje},dc=cz" write
        by anonymous auth
        by self write
        by * none

# The admin dn has full write access
access to *
        by dn="cn=Manager,dc={moje},dc=cz" write
        by * read

umístěné na správném místě (pod definicí suffixu dc={moje},dc=cz).

Je třeba pustit ldap:

root@pdc:~$ /etc/init.d/slapd start

Následně odmigrovat (Verbose – vypiš, co děláš, Import, Export)

root@pdc:~$ pdbedit -v -i tdbsam -e ldapsam

Pokud migrace nefungovala tak, jak by měla (což je snad záležitost pouze rc1), je třeba změnit údaje o účtech. Je třeba dopsat sambaSid a doplnit věci nutné pro UNIXový (POSIX) účet. Musí se nastavit gidNumber, homeDirectory, loginShell, objectClass: posixAccount, sambaDomainName, sambaHomeDrive, sambaHomePath, sambaProfilePath a uidNumber. K tomu je skript tdb_to_posix_ldap. V něm je třeba přepsat text ve složených závorkách. Volání:

root@pdc:~$ ldapcat -x "objectClass=account" | ./tdb_to_posix_ldap > users1
root@pdc:~$ ldapmodify -W {heslo} -x -D "cn=Manager,dc={moje},dc=cz" -f users1 

LDAP

Uchovává informace o uživatelích. Údaje jsou uchovávány ve stromové struktuře. Nejvýše je hlavní doména, pod ni je možné zařazovat poddomény a do nich uživatele, skupiny a počítače a další poddomény. Pracuje na objektovém základě – každému záznamu lze přiřadit několik tříd atributů. Například k account, což je standardní třída pro účet obsahující login name a plné jméno, lze přiřadit sambaAccount pro účet v Sambě a posixAccount pro posixový (UNIX) účet.

LDAP umožňuje replikaci jednotlivých podstromů.

Nástroje pro správu LDAP databáze uživatelů

Pro správu uživatelů uložených v LDAPu jsou vám k dispozici následující nástroje:

  • gq – prohlížení záznamů, editace stromu. Nutno pouštět z X Windows, případně na dálku přes port forwarding.
  • webmin-ldap-useradmin – poměrně slušný nástroj pro správu účtů.
  • skripty – ldapsamba-passwd.pl a další
  • teoreticky NT manager – nezkoušeno.
  • ldapsearch, ldapmodify a další programy z ldap-utils – ldapsearchem si vyberete záznamy, se kterými chcete pracovat, textové soubory s LDAP záznamy upravíte v textovém editoru nebo v libovolném programovacím jazyku a změny v textových souborech promítnete pomocí ldapmodify zpět do ldapu.

Nejlépe z nich vychází webmin, doplněný gq nebo ruční editací pro řešení sporných věcí. Webmin je třeba konfigurovat a je nutné říci, že se má používat sambaSamAccount pro samba účet (samba 2.2.x používala sambaAccount – děje se tak kdesi v nastavení webminu).

Replikace LDAPu

O replikaci LDAPu se stará slurpd. Změnu dat lze provést pouze na master LDAP serveru. Pokud se snažíme o změnu dat na slave LDAP serveru, jsme odkázáni na master server. Démon slurpd pak distribuuje všechny změny z master LDAP serveru na slave LDAP servery (popis).

Postup instalace repliky:

  • nainstalovat ldap i na budoucí BDC
  • ujistit se, že se bude pouštět slurpd (/etc/default/slapd musí mít SLURPD=auto nebo on)
  • překopírovat obsah /etc/ldap na slave server
  • do konfigurace master LDAP databáze přidat (pod directory {adresář s DB}):

    replica host={host pro repliku}
       binddn="cn=Replicator,dc={moje},dc=cz"
       bindmethod=simple credentials={replicatorove heslo}
    
    # Where to store the replica logs for database #1
    replogfile      /var/lib/ldap/replog

    Položku replica je možné přidávat vícekrát dle libosti. Pod binddn je název účtu, pod kterým bude slurpd přistupovat ke slave LDAP serverům. Kvůli funkčnosti je třeba používat speciální účet, nikoliv účet Managera. Soubor .slapd.conf by měl být rw pro roota, jinak pro nikoho – je v něm heslo do repliky LDAPu. Položka replica se na slave serveru samosebou nevyskytuje. Je třeba si uvědomit, že slave slapd odkazuje na master LDAP až v okamžiku, kdy se přihlásíte jako uživatel s read-only oprávněním a chcete měnit nějaký záznam. Je proto vhodné, aby write přístup na slave LDAP měl pouze a jedině replikační mechanismus, jiní (včetně Managera, pod kterým se hlásí Samba) by měli mít maximálně read-only přístup.

  • nastavit přístupová práva k LDAPu na slave – v /etc/ldap/slap­d.conf musí být:

    access to attribute=userPassword
        by dn="cn=admin,dc={moje},dc=cz" write
        by dn="cn=Replicator,dc={moje},dc=cz" write
        by anonymous auth
        by * none
    
    access to attribute=sambaLMPassword,sambaNTPassword
        by dn="cn=Manager,dc={moje},dc=cz" read
        by dn="cn=Replicator,dc={moje},dc=cz" write
        by dn="cn=Replicator,dc={moje},dc=cz" read
        by self read
        by * none
    
    access to *
        by dn="cn=Replicator,dc={moje},dc=cz" write
        by * read
  • stopnout slapd na masteru

    root@pdc:~$ /etc/init.d/slapd stop
  • překopírovat obsah /var/lib/ldap z masteru na slave – za podmínky, že běží ssh:

    root@pdc:~$ scp -r /var/lib/ldap bdc:/var/lib/ldap
  • spustit slapd na slave serveru a vyzkoušet jeho funkčnost (ldapsearch -x ..)

    root@bdc:~$ /etc/init.d/slapd start
    root@bdc:~$ ldapcat -x
  • spustit slapd na masteru

    root@pdc:~$ /etc/init.d/slapd start
  • vyzkoušet replikaci třeba tak, že něco změníme v LDAPu na masteru a poté se pomocí ldapsearch podíváme, jestli se nám změna dostala i na slave.

/etc/samba/smb.conf je na BDC stejné jako na PDC až na:

domain master = No
passdb backend = ldapsam:ldap://{adresa na slave ldap server} ldap://{adresa na master ldap server} 

Pokud vypadne slave LDAP s BDC, nic podstatného se neděje, všichni se začnou přihlašovat na sambu s master LDAP. Po restartu slave LDAPu se databáze zesynchronizuje a vše bude fungovat jako před výpadkem. Pokud vypadne PDC, nebude možné dělat změny do databáze uživatelů, protože jsme přišli o master LDAP server. Pokud se bude jednat o dočasný výpadek, nic podstatného se neděje (přihlašování bude fungovat stále), pokud PDC odejde, je potřeba slave překonfigurovat na master a pořídit nový slave server.

Střílení trablů – Troubleshooting

Při odhalování chyb je zapotřebí nepropadat panice. Valná většina chyb je způsobena špatnou konfigurací a jejich příčina se dá snadno vysledovat. Obzvláště pomáhá zkoumat tyto systémové logovací soubory:

/var/log/syslog
/var/log/messages

Samba pak v defaultní konfiguraci loguje do adresáře /var/log/samba/. Logika logování je následující:

  • log.nmbd je log NMBD, tedy NetBIOS name serveru. Většinou takový stroj v doméně chcete mít a je rozumné ho provozovat na PDC nebo na BDC. V tomto článku není NMBD popisován.
  • log.smbd je log samotné velké Samby. Většinou v něm (až na chyby ve struktuře konfiguráku, zabraňující spuštění serveru) nenaleznete to, co byste chtěli.
  • log.{ip_adresa} obsahuje logy samby při přihlašování stanice do okamžiku, než je zjištěno její jméno. Většinou nezáživné čtení, pokud existují logy s názvem stanice, nečekejte, že zde naleznete něco rozumného.
  • log.{název} obsahuje logy ze stanice. Toto je místo, ze kterého se dá nejvíce vytěžit. Pokud máte stanici s netbiosím jménem aa, podívejte se na PDC, případně BDC do /var/log/samba/log­.aa.

Logování lze ovlivnit nastavením log level v smb.conf. Optimální pro nalezení většiny chyb je 2, v 5 se už většinou ztratíte. Jenom připomínám, že po změně log levelu je třeba Sambu restartovat.

LDAP loguje do souboru

/var/log/sladp

V /etc/ldap/slap­d.conf je vhodné nastavit správně log-level. Jedná se o bitmapu, mně se osvědčila hodnota 256:

loglevel        256

Jako poslední možnost je nutné zmínit Win event logy (tj. event logy pracovních stanic, ze kterých se připojujete). Jelikož v nich většinou chybí rozumné vysvětlení čísla chyby, je vhodné použít například google a nechat pokud možno v Grupách vyhledat číslo chyby + standardní text, například „samba PDC windows {verze}“. Tento postup ostatně funguje náramně dobře pro hlášky ze samba logů. Stačí vzít plný text hlášky, kde by mohla být popsána chyba, a obalený uvozovkami (a ochuzený o část s PID samba démonu a podobně) ho předhodit pro hledání.

Při čekání na chybu, o které víte, jak ji vyprodukovat (například nemůže se vám přihlásit do domény nová stanice), pomáhá tail -f na postižený soubor (zjistíte nejlépe z ls -lrt, posledně měněné log soubory obsahují informaci o tom, co se dělo naposledy).

HW nároky

PDC/BDC jsou poměrně nenáročné – PDC nám běží na 600MHz Pentiu, BDC dokonce na 300MHz Pentiu. Odezvy sice občas nejsou nic-moc (něco lze zlepšit tuningem LDAPu, viz přiložené konfigurační soubory), ale pro práci na síti s cca 50 uživateli jsou dané stroje dostačující.

Reference

Místo závěru

Tento článek se zabývá pouze převodem domény. Nejsou v něm tedy pořádně vysvětleny konfigurační obskurnosti a další radosti spojené s jejím provozem (zakládání účtů nových počítačů do LDAPu, cestovní profily, SIDy, …). Jim bych se chtěl věnovat v dalších dílech.

K článku naleznete přiložené konfigurační soubory. Ty je třeba před požitím protřepat, ale nemíchat – tedy je třeba v nich najít texty ve složených závorkách a nahradit je hodnotami z vaší konfigurace.

Přiložené soubory

Článek vznikl z původních materiálů firmy INTAX, s.r.o.