Die vergangene Woche habe ich mich ein wenig mit OpenLDAP beschäftigt. Das ganze unter Debian.
Angefangen hat es mit einem Sarge-System und somit stand erstmal ein Upgrade auf etch an.
Bis auf ein paar Dependencies sah das dist-upgrade gut aus, allerdings scheiterte das Upgrade beim Wiedereinspielen des OpenLDAP-Backups (dies passiert automatisch):
CODE:
<= str2entry NULL (smr_normalize 21)
slapadd: could not parse entry (line=42718)
Nach einigem Suchen war dann klar, dass hier das Backup nicht korrekt erstellt wurde. Hier ein Beispiel:
CODE:
dn: uid=test,ou=People,dc=example,dc=net
telephoneNumber: --
Ursache waren die zwei Minuszeichen bei der Telefonnummer...

Weil der LDAP sowieso gerade gewartet wurde, wurde gleich noch das Standard-Passworthash-Format auf SSHA geändert (Salted SHA). Es hat ein wenig gebraucht, bis ich begriffen hab, dass das Salt nicht pro Server ist (wie es manche Anwendungen machen) sondern pro Passwort. Ab da war das Umsetzen kein Problem - jetzt müssen nur noch die Benutzer das Passwort ändern und unsichere Hashes wie md5 oder bei manchen Benutzern noch crypt sind vergangen.
Somit verlängerte sich die Downtime auf fast zwei Stunden. Damit ist schon klar, warum der nächste geplante Schritt die redundante Auslegung des LDAP-Servers war. Nach einigem Lesen von Anleitungen stand dann am zweiten Abend die Push-Replikation vom Publisher zum Consumer mit syncprov. Änderungen können an beide Server geschickt werden, allerdings verweist der Consumer dann einfach auf den Publisher. Das DNS dann auf Round Robin umzustellen war eine Kleinigkeit

Am nächsten Morgen kamen dann die Beschwerden: einige Benutzer konnten sich nicht mehr einloggen. Schnell war klar, dass die betroffenen Benutzer alle auf einem anderen LDAP-Server liegen. Eingebunden wurde dieser Server über ein Referral. Das Problem ist aber, dass der Consumer-LDAP-Server versucht das Referral zu verfolgen. Dies klappt natürlich nicht, da die Zugangsdaten für die Replikation nur auf dem Publisher-LDAP-Server gültig sind. Davon war aber nichts in den Logdateien zu finden (eingestellt auf Loglevel sync). Dennoch setzt der Consumer die Replikation fort und steht dann auch komplett zur Verfügung - es fehlt halt nur eine OU...
Bislang habe ich dafür keine Lösung außer von Hand das Referral auf dem Consumer in die Datenbank zu schreiben und dem Replikationsbenutzer alle Rechte auf den Referraleintrag beim Publisher zu entziehen.
Mit dem Referraleintrag hatte ich aber noch mehr Spaß. Nächster Schritt war die Einrichtung von Samba. Komischerweise führte das Starten von Samba oder Benutzer von "net getlocalsid" zu einer Verzögerung. Erst ein erhöhtes Debugging-Level brachte an Licht, dass Samba im Referral-OU nach seinen Einträgen suchen will. Und wieder wird der konfigurierte Benutzer verwendet sich am anderen LDAP-Server anzumelden - was natürlich immer noch nicht klappt. Auch hier war wieder die Lösung dem Samba-Benutzer die Rechte auf das Referral zu entziehen.
Da kann man sich doch nur fragen wie selten ein Setup ist, bei denen ein LDAP-Server auf einen anderen verweist ohne das die LDAP-Server vom selben Administrator eingerichtet und gewartet werden?
Wer schonmal Samba aufgesetzt hat, kennt das Passwort-Problem: Samba braucht eine eigene Passwortverwaltung. Eigentlich kein Problem - immerhin sieht das Samba-Schema im LDAP ja die passenden Felder dazu vor. Nur müsste so der Benutzer zwei Passwörter pflegen bzw. darf nicht mehr passwd auf den Linux-Servern benutzen sondern nur noch smbpasswd. Aber dafür gibt es eine Lösung: ein OpenLDAP-Modul namens smbk5pwd was automatisch bei der Passwortänderung auch die Samba-Felder updatet. Eigentlich sollte das Verwenden kein Problem sein. Das Modul besteht aus drei Dateien: Makefile, README sowie die eigentliche Sourcecode-Datei. Da das Modul gegen die entsprechende Serverversion gebaut werden muss, habe ich per apt-get source slapd mir die Sources des Debian-Pakets geholt und wollte das Modul bauen. Nachdem ich erstmal die Makefile angepasst hatte, ging es an die Compile-Fehler. Mit Hilfe einer aktuelleren Version konnte ich alles ändern und bekam schließlich das Modul. Nur leider ließ es sich nicht fehlerfrei einbinden:
CODE:
init_config_attrs: AttributeType "( OLcfgCtAt:6.1 NAME 'olcSmbK5PwdEnable'DESC
'Modules to be enabled' SYNTAX OMsDirectoryString )": OID could not be expanded,
Ich gebe also auf die Passwörter über das OpenLDAP-Modul auf gleichen Stand zu halten und werde eine andere Lösung suchen. Wahrscheinlich einfach auf dem Shell-Server für die Benutzer den Zugriff auf passwd auf smbpasswd verbiegen.