Portál AbcLinuxu, 6. června 2025 17:17


Dotaz: OpenLDAP - multimaster synchronizace nefunguje jak jsem ocekaval

19.1.2011 14:43 Honza
OpenLDAP - multimaster synchronizace nefunguje jak jsem ocekaval
Přečteno: 638×
Odpovědět | Admin
Dobry den kolegove,

zatim pokusne mam rozjetou aktivni master-master replikaci v OpenLDAPu. Narazil jsem ale na dva problemy:

1. oba stroje na sebe vidi a vse je jak ma. Kdyz ale soucasne (skriptem) vytvorim vetsi mnostvi uzivatelu na mastru A i na mastruB tyto se nezesynchronizuji tak jak by jeden ocekaval - tedy se udaje "nezmerguji" ale nektere se zapisi, jine ne (prijde mi ze se to deje nahodne) a databaze pak zustanou NEkonzistentni. Cili na jednom masteru jsou udaje takove a na druhem makove obecne ale jine.

2. stroje na sebe nevidi - je mezi nimi prerusene spojeni. Opet vytvorim na jedne strane 100 uzivatelu (treba) a na duhe taky (zkousel jsem tvorit je soucasne i nesoucasne) a vysledne chovani je stejne jako v bodu 1.

Co mi unika? diky moc
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.1.2011 19:33 timeos | skóre: 32
Rozbalit Rozbalit vše Re: OpenLDAP - multimaster synchronizace nefunguje jak jsem ocekaval
Odpovědět | | Sbalit | Link | Blokovat | Admin
byt na vasom mieste tak si otvorim openldap logy a pracne pozeram uspesnost akcii zapisu replikovanych zaznamov a na zaklade toho vyvodim nejaky dosledok. viete, kedy sa ktory zaznam vytvori v poradi a podla toho dokazete pomerne slusne zistit kde je problem a preco sa nezapisal na druhy ldap master a pod. nic rozumnejsie ma nenapada, lebo podla mna toto je funkcnost, ktora by mala byt samozrejma.
19.1.2011 19:51 none
Rozbalit Rozbalit vše Re: OpenLDAP - multimaster synchronizace nefunguje jak jsem ocekaval
Odpovědět | | Sbalit | Link | Blokovat | Admin
Oba postupy jsem pri nasazeni OpenLdapu v konfiguraci n-way multimaster (ctyri servery) testoval a funguje to tak jak ocekavas. Popisovane problemy na me pusobi tak, ze servery nemas spravne nakonfigurovane a mozna uz na zacatku rozsynchronizovane.

Vyzrajes na to tak, ze oba servery stopnes, z druheho serveru uplne smazes konfiguraci i databazi a konfiguraci (/etc/openldap) prekopirujes z prvniho na druhy (i presto, ze je konfigurovan pres strom ldapu cn=config). Pak upravis ID na druhem serveru a spustis prvni server a potom druhy. Pekne se syncnou a pak se ti tvoje testy povedou. Dej vedet.
20.1.2011 14:28 Honza
Rozbalit Rozbalit vše Re: OpenLDAP - multimaster synchronizace nefunguje jak jsem ocekaval
Muzu nekoho pozadat, zda muze ukazat funkcni konfiguraci? Staci slapd.conf

Diky
20.1.2011 16:54 none
Rozbalit Rozbalit vše Re: OpenLDAP - multimaster synchronizace nefunguje jak jsem ocekaval
Zdravim,

pochybuju, ze ti to v tehle forme k necemu bude. OpenLdap se nekonfiguruje pomoci ldap.conf souboru, ale prostrednictvim samostatne konfiguracni datatabaze cn=config. Vyhod je plno, mezi hlavni patri napriklad moznost zmeny konfigurace za behu serveru (nektera nastaveni jdou, nektera nejdou) a take moznost replikace konfigurace (kazda zmena konfigurace se projevi na vsech serverech). Prikladam export sve cn=config databaze pomoci 'slapcat' ze ktereho jsem musel rucne odstranit vsechny citlive udaje, predpokladam, ze tam po me zbyly nejake syntakticke chyby a zadne citlive udaje ;).
dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/slapd/slapd.args
olcLogLevel: 256
olcPidFile: /var/run/slapd/slapd.pid
olcServerID: 1 ldap://first.domain.tld
olcServerID: 2 ldap://second.domain.tld
olcServerID: 3 ldap://thirst.domain.tld
olcTLSCACertificateFile: /etc/ldap/server.pem
olcTLSCertificateFile: /etc/ldap/server.pem
olcTLSCertificateKeyFile: /etc/ldap/server.pem
olcToolThreads: 1

dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModuleLoad: {0}back_hdb
olcModuleLoad: {1}refint
olcModuleLoad: {2}syncprov
olcModuleLoad: {3}memberof
olcModulePath: /usr/lib/ldap

dn: olcBackend={0}hdb,cn=config
objectClass: olcBackendConfig
olcBackend: {0}hdb

dn: olcDatabase={-1}frontend,cn=config
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: {-1}frontend
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break
olcAccess: {1}to dn.exact="" by * read
olcAccess: {2}to dn.base="cn=Subschema" by * read
olcSizeLimit: 500

dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break
olcMirrorMode: TRUE
olcRootDN: cn=admin,cn=config
olcRootPW: {SSHA}asdfasdfasdfasdf
olcSyncrepl: {0}rid=1 provider=ldap://first.domain.tld binddn="cn=admin,cn=config" bindmethod=simple credentials=password searchbase="cn=config" type=refreshAndPersist retry=
"5 5 300 5" timeout=1
olcSyncrepl: {1}rid=2 provider=ldap://second.domain.tld binddn="cn=admin,cn=config" bindmethod=simple credentials=password searchbase="cn=config" type=refreshAndPersist retry
="5 5 300 5" timeout=1
olcSyncrepl: {2}rid=3 provider=ldap://thirst.domain.tld binddn="cn=admin,cn=config" bindmethod=simple credentials=password searchbase="cn=config" type=refreshAndPersist retry
="5 5 300 5" timeout=1

dn: olcOverlay={0}syncprov,olcDatabase={0}config,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: {0}syncprov

dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=domain2,dc=tld" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=admin,dc=domain2,dc=tld" write by users read by * auth
olcDbCheckpoint: 512 30
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
olcDbIndex: objectClass eq
olcDbIndex: entryUUID eq
olcDbIndex: entryCSN eq
olcDbIndex: memberOf eq
olcDbIndex: uid eq
olcLastMod: TRUE
olcMirrorMode: TRUE
olcRootDN: cn=admin,dc=domain2,dc=tld
olcRootPW: {SSHA}sdfasdfasdfasdfasdf
olcSuffix: dc=domain2,dc=tld
olcSyncrepl: {0}rid=1 provider=ldap://first.domain.tld binddn="cn=admin,dc=domain2,dc=tld" bindmethod=simple credentials=password searchbase="dc=domain2,dc=tld" type=refresh
Only interval=00:00:00:10 retry="5 5 300 5" timeout=1
olcSyncrepl: {1}rid=2 provider=ldap://second.domain.tld binddn="cn=admin,dc=domain2,dc=tld" bindmethod=simple credentials=password searchbase=" dc=domain2,dc=tld" type=refres
hOnly interval=00:00:00:10 retry="5 5 300 5" timeout=1
olcSyncrepl: {2}rid=3 provider=ldap://thirst.domain.tld binddn="cn=admin,dc=domain2,dc=tld" bindmethod=simple credentials=password searchbase="dc=domain2,dc=tld" type=refres
hOnly interval=00:00:00:10 retry="5 5 300 5" timeout=1

dn: olcOverlay={0}refint,olcDatabase={1}hdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
olcOverlay: {0}refint
olcRefintAttribute: member
olcRefintAttribute: memberOf
olcRefintModifiersName: cn=admin,dc=domain2,dc=tld
olcRefintNothing: cn=admin,dc=domain2,dc=tld

dn: olcOverlay={1}syncprov,olcDatabase={1}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: {1}syncprov

dn: olcOverlay={2}memberof,olcDatabase={1}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: {2}memberof
A jeste varovani na zaver. Pokud uz se ti to podari copypastovat a oeditovat tak, aby to odpovidalo tvym predstavam, tak si dej pozor a nestav na tom zadne reseni do doby, nez tomu budes rozumnet. LDAP je infrastrukturalni zalezitost na ktere stoji obvykle rada dalsich sluzeb. Jeji neznalosti si zadelavas na problemy. Pokud uz chces LDAP provozovat a nerozumnet mu, tak doporucuju pouzit treba Red Hat Directory Server (resp. CentOS), ktery ma klikatko a je to easy. Podobne treba 389 z Fedory.

Enjoy!
20.1.2011 17:38 Honza
Rozbalit Rozbalit vše Re: OpenLDAP - multimaster synchronizace nefunguje jak jsem ocekaval
Diky moc. Pouzivam slapd.conf a pak to prelozim do cn=config. Prijde mi to lehci pro editovani. Koukam, ze replikujes pod adminem. Ja prave nevim, zda mam dobre ACL, protoze replikuji pod extra uzivatel (je to asi bezpecnejsi). Replikace mi celkem fungujem, ale zase si napriklad uzivatel nemuze menit heslo. Kdyz se podivas na moji konfiguraci, myslis ze mam ty ACL dobre ?

Pripadne co tam je jeste spatne.

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/ppolicy.schema
include		/etc/openldap/schema/isl.schema

# Define global ACLs to disable default read access.

# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral	ldap://root.openldap.org

pidfile		/var/run/slapd/slapd.pid
argsfile	/var/run/slapd/slapd.args

modulepath	/usr/lib/openldap/modules

access to *
	by dn.exact="uid=mumla,ou=people,dc=stb,dc=acr" write
	by * read

access to dn.base=""
        by * read

access to dn.base="cn=Subschema"
        by * read

access to attrs=userPassword,userPKCS12
        by self write
        by * auth

access to attrs=shadowLastChange
        by self write
        by * read

access to *
	by self write
        by * read

loglevel sync stats

TLSCertificateFile /etc/ssl/servercerts/servercert.pem
TLSCACertificatePath /etc/ssl/certs/
TLSCertificateKeyFile /etc/ssl/servercerts/serverkey.pem

database	config
rootdn		cn=config
rootpw		"{ssha}password"

database	monitor
rootdn		cn=monitor
rootpw		"{ssha}password"	

database	bdb
suffix		"dc=stb,dc=acr"
rootdn		"cn=Administrator,dc=stb,dc=acr"
rootpw		"{ssha}password"

directory	/var/lib/ldap/stb

checkpoint 256 5
cachesize 10000

overlay ppolicy
ppolicy_default "cn=default,ou=Policies,dc=stb,dc=acr"
ppolicy_hash_cleartext
ppolicy_use_lockout

ServerID 1 ldap://cz-250-35
ServerID 2 ldap://cz-250-36

syncrepl rid=001
  provider=ldap://cz-250-35
  uri=ldap://cz-250-35
  binddn="uid=mumla,ou=people,dc=stb,dc=acr"
  bindmethod=simple
  credentials=password
  searchbase="dc=stb,dc=acr"
  type=refreshAndPersist
  starttls=yes
  tls_reqcert=never
  retry="5 5 300 5"
  timeout=1

syncrepl rid=002
  provider=ldap://cz-250-36
  uri=ldap://cz-250-36
  binddn="uid=mumla,ou=people,dc=stb,dc=acr"
  bindmethod=simple
  credentials=password
  searchbase="dc=stb,dc=acr"
  type=refreshAndPersist
  starttls=yes
  tls_reqcert=never
  retry="5 5 300 5"
  timeout=1

mirrormode TRUE

overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100

limits dn.exact="uid=mumla,ou=people,dc=stb,dc=acr"
   size=unlimited time=unlimited

index objectClass,uidNumber,gidNumber	eq
index uid				eq,subinitial
index member,cn,memberUid		eq
index entryCSN,entryUUID		eq

20.1.2011 18:02 Honza
Rozbalit Rozbalit vše Re: OpenLDAP - multimaster synchronizace nefunguje jak jsem ocekaval
Tak tu zmenu hesla jsem uz vyresil. V konfiguraci jsem opravil
access to *
	by dn.exact="uid=mumla,ou=people,dc=stb,dc=acr" write
	by self write
	by * read

A tohle zakomentoval

#access to *
#	by self write
#        by * read
20.1.2011 19:03 timeos | skóre: 32
Rozbalit Rozbalit vše Re: OpenLDAP - multimaster synchronizace nefunguje jak jsem ocekaval
ak to chcete pouzivat produkcne, tak sa urcite tym ACLkam povenujte trocha viac. Vasa konfiguracia ma daleko od nepriestrelnej, skvor by som ju nazval katastrofalnu. Ja len dufam ze si to uvedomujete :)
21.1.2011 10:47 Honza
Rozbalit Rozbalit vše Re: OpenLDAP - multimaster synchronizace nefunguje jak jsem ocekaval
Byl to jen priklad z Default (viz priklady v dokumentaci)

Predokladam, ze ACL od kolegy nahore jsou lepsi ?

Access to attrs=userPassword,shadowLastChange 
   by self write 
   by anonymous auth 
   by dn="cn=admin,dc=domain2,dc=tld" write 
   by * none

Access to dn.base="" 
   by * read

Access to * 
   by self write 
   by dn="cn=admin,dc=domain2,dc=tld" write 
   by users read 
   by * auth
21.1.2011 10:51 Honza
Rozbalit Rozbalit vše Re: OpenLDAP - multimaster synchronizace nefunguje jak jsem ocekaval
Muzete pripadne vlozit nejaky ACL, ktery je funkcni (pro standartni pouziti, vcetne replikace) a je neprustrelne. Diky
21.1.2011 11:23 timeos | skóre: 32
Rozbalit Rozbalit vše Re: OpenLDAP - multimaster synchronizace nefunguje jak jsem ocekaval
Vseobecne sa to neda urcite napisat. Vzdy to zavisi od konkretneho pouzitia (fakt neviem ake je to standardne pouzitie), od toho na co ten adresar sluzi az po sluzby/demony/programy ktore don maju mat pristup (s nejakym ucelom) a definovat pravidla aj pre ne + replikacia v pripade ze je nasadena. Mojim cielom nebolo vas nejak poucovat ohladom bezpecnosti, len poukazat na to, ze to ACL bolo fakt na figu. V takom pripade si mohol uplne kazdy precitat uplne vsetko vratane hesiel bez akehokolvek stupna ochrany pristupu (je jedno na ktorej vrstve). Nic viac, nic menej. Navodov ako pisat spravne pravidla je kopec (vratane man slapd.access, roznych ukazkovych ACL az po OpenLDAP Software 2.4 Administrator's Guide zo stranok projektu openldap).
21.1.2011 11:58 Honza
Rozbalit Rozbalit vše Re: OpenLDAP - multimaster synchronizace nefunguje jak jsem ocekaval

Neberu to jako poucovani, jsem rad za kazdou radu.

Jen jsem myslel, ze existuje nejaky obecny nastaveni. Standartne (zjednodusene) se LDAP pouziva k jednotne sprave hesel, kdyz mam treba 5 serveru. Pak bych ocekaval nejaky default bezpecny nastaveni ACL. Je to jako kdyz nainstaluju cisty OS, tak mam pristup taky *celkem* bezpecny a neresim hned napriklad prenastaveni PAM atd.

Ale chapu, ze nastudovani je vdzy lepsi, aspon clovek chape souvislosti

21.1.2011 12:29 timeos | skóre: 32
Rozbalit Rozbalit vše Re: OpenLDAP - multimaster synchronizace nefunguje jak jsem ocekaval

Tak isto ako vy povazaujete za standardne pouzivanie LDAPu ako autentifikacneho adresara, tak ho moze niekto pouzivat ako adresar kontaktov, mailovych aliasov (pre postovy server), DNS resp DHCP zaznamov, alebo adresar pre objekty v ramci nejakeho programovacieho jazyka. Druhou podstatnou vecou pri pisani pravidiel je zvolena struktura adresara v zmysle jeho pouzitia. Podla toho musite vychadzat pri pisani pravidiel. Mozno sa vam zda na prvy pohlad pouzivanie LDAPu ako priehladne v zmysle toho, na co sa asi najcastejsie pouziva, opak je vsak pravdou (vidim to nielen na mojom pouziti, ale aj na pouzivani v inych prostrediach) a to su vsetko dovody, pre ktore tie pravidla standardne neexistuju ziadne v uvodnej konfiguracii.. preto ked si pozrete defaultny slapd.conf subor, vidite tam zakomentovane moznosti aspon tych najzakladnejsich pravidiel, ktore mozte pouzit, ale automaticky pouzivane (teda...okrem tych uplne najzakladnejsich).

Nieco podobne je aj vo firewallingu dajme tomu na smerovaci, kde neexistuju pravidla ziadne, lebo nik nevie ako to smerovanie a jeho bezpecnost chcete implementovat. Su sice skripty alebo nadstavby nad iptables, ale tie sa hodia len pre najbeznejsie pouzitie (neviem si predstavit wizardom nakonfigurovat smerovac s 5timi sietovymi interfejsmi). Pokial chcete spravit cokolvek nestandardne/netypicke/trocha komplikovanejsie, nemate sancu to jednoducho naklikat, treba si take pravidla napisat sam.

Toto su vsetko veci, cez ktore sa musite preluskat sam. Samozrejme nieje problem poradit v konkretnych veciach. To je nieco podobne ako ked sa tu na abclinuxu vymienaju konfiguraky samby (lebo niekto chcel vidiet nieco funkcne, rychlejsie, bezpecnejsie a pod) a aj tak je to vacsinou o nicom a vzdy to zavisi na konkretnom prostredi a nasadeni.

21.1.2011 15:52 Honza
Rozbalit Rozbalit vše Re: OpenLDAP - multimaster synchronizace nefunguje jak jsem ocekaval

Jeste bych mel jeden konkretni dotaz.

V me konfiguraci budou klienti pristupovat po public siti, ale replikace pujde po interni siti. Je toto nastaveni spravne ?

# slapd bezi s timto 
/usr/lib/openldap/slapd -h ldap://public-network ldap://interni-network

# konfigurace slapd.conf
ServerID 1 ldap://server1-interni-network
ServerID 2 ldap://server2-interni-network

syncrepl rid=001
  provider=ldap://server1-interni-network
  uri=ldap://server1-interni-network
  ...

syncrepl rid=002
  provider=ldap://server2-interni-network
  uri=ldap://server2-interni-network
  ...
22.1.2011 12:59 timeos | skóre: 32
Rozbalit Rozbalit vše Re: OpenLDAP - multimaster synchronizace nefunguje jak jsem ocekaval
Ak pod public-network a interni-network myslite konkretne IP adresy servera, ktore ma na svojich rozhraniach tak ano. ono kedykolvek si mozte overit ci na tych IP adresar slapd naozaj pocuva cez netstat.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.