Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[anwenderwiki:erweiterungen:ldap-replikation]] 

Ubuntu-Server mit LDAP-Replikation einrichten

Bei Ausfall des Linuxmuster-Servers während Wartungsarbeiten oder eines Backupprozesses ist der LDAP-Dienst nicht verfügbar. Somit kann man sich auch nicht auf externe Dienste wie z. B. einem Moodle oder einem Schulportfolio anmelden, da diese meist auf den internen LDAP zugreifen.

Als Lösung bietet sich an, einen zusätzlichen (virtuellen) Server, einen sogenannten „Consumer“ (im Folgenden server2), mit einem Slave-LDAP aufzusetzen und die Replikation mit der Funktion „syncrepl“ durchzuführen. Dabei holt sich der Consumer im festgelegten Zeitintervall Änderungen am Master=Provider automatisch ab. In der Firewall und dem Router kann man dann für beide LDAP-Server eine Portweiterleitung eintragen. Der zusätzliche Server wird in dieser Anleitung ins grüne Netz gesetzt, möglich wäre auch ihn in die DMZ (oranges Netz) zu setzen.

Hier getestete Versionen:
linuxmuster.net 6.0.44 + ubuntu 12.04.3 LTS + slapd 2.4.28
linuxmuster.net 6.2 + Ubuntu 19.10 + slapd 2.4.48

1. Vorbereitungen am linuxmuster.net Server

Der neue „server2“ sollte mit seiner MAC in die Workstations aufgenommen werden (per Konsole oder Schulkonsole) so dass er per dhcp seine IP für das grüne Netz bekommt (z. B. 10.16.1.2) und auch Internetzugriff hat.
Dann die Base-DN und das ldap-admin-Kennwort abfragen und notieren:

# grep BASE /etc/ldap/ldap.conf
# grep rootpw /etc/ldap/slapd.conf

2. Installation von Ubuntu 12.04-server als "server2"

Es bietet sich dafür bei virtuellen Umgebungen natürlich ein „kostenloser“ neuer Server an.

  • mit der Option openssh-server
  • root danach ein Kennwort geben
  • openldap installieren, dabei das ldap-admin-Kennwort von oben verwenden:
    # apt-get install slapd ldap-utils

3. LDAP Konfiguration vom linuxmuster.net zum server2 übertragen

Am linuxmuster.net server als root anmelden. Der server2 sollte in den Workstations importiert sein, sonst seine IP benutzen:

# cd /etc/ldap
# scp /etc/ldap/slapd.conf server2:/etc/ldap
# scp /etc/ldap/schema/samba.schema server2:/etc/ldap/schema
# scp /etc/ldap/schema/sophomorix.schema server2:/etc/ldap/schema

4. Konfiguration von linuxmuster.net ändern

Datei editieren, fehlende Zeilen ergänzen in /etc/ldap/slapd.conf

...
  modulepath  /usr/lib/ldap
  moduleload  syncprov         # neue Zeile einfügen
  moduleload  back_hdb
...  
checkpoint    512 30           # diese Zeile suchen, danach 3 neue Zeilen:

overlay syncprov
syncprov-checkpoint 100 2
syncprov-sessionlog 100
...

Danach Konfigdatei aktivieren (auf dem Server reicht oft auch schon ein einfaches service slapd restart:

# rm -r /etc/ldap/slapd.d/*
# slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d
# chown -R openldap:openldap /etc/ldap
# service slapd restart

5. Konfiguration von server2 bearbeiten

Datei editieren, fehlende Zeilen ergänzen: /etc/ldap/slapd.conf. Dabei folgende vier Punkte dem eigenem System anpassen:

  • bei searchbase und binddn die Base-DN verwenden
  • bei credentials das ldap-admin-Kennwort einsetzen statt „12345678“
  • interval=00:00:10:00“ startet eine Abfrage an den Provider alle 10 Minuten
  • retry=„300 +““ wiederholt bei Fehlern die Abfrage alle 300 Sekunden
...
checkpoint 512 30      # diese Zeile suchen, danach die folgenden einfügen

syncrepl rid=1
    provider=ldap://10.16.1.1:389
    type=refreshOnly
    interval=00:00:10:00
    retry="300 +"
    searchbase="dc=linuxmuster-net,dc=lokal"
    filter="(objectClass=*)"
    attrs="*,+"
    scope=sub
    schemachecking=off
    bindmethod=simple
    binddn="cn=admin,dc=linuxmuster-net,dc=lokal"
    credentials=12345678
...
# TLS...
# TLS...
# TLS...
# TLS...
...

Die TLS-Optionen zunächst auskommentieren, wenn noch kein ssl-Zertifikat erzeugt wurde (oder Punkt 6 vorziehen).

Danach Konfigdatei aktivieren, etwaige Datenbank-Reste in /var/lib/ldap löschen und dort die Rechte korrekt setzen:

Die Änderungen nur an slapd.conf werden vom slapd-Dienst nicht direkt benutzt.
Durch slaptest wird aus der slapd.conf-Datei die aktive Konfiguration im Verzeichnis slapd.d neu erzeugt.
Vieleicht gehts aber auch einfacher???
# systemctl stop slapd
# rm -r /etc/ldap/slapd.d/*
# slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d     (Fehlermeldung ignorieren)
# chown -R openldap:openldap /etc/ldap
# chown -R openldap:openldap /var/lib/ldap
# rm -rf /var/lib/ldap/*
# systemctl start slapd
# systemctl status slapd     (Hier darf es keine Fehlermeldung geben, ansonsten diese Schritte wiederhoen)

Nach einem Test (siehe unten) kann der Slave-LDAP benutzt werden, z. B. mit einem → LDAP-Browser abgefragt werden.

Beim ersten Start wird die Datenbank komplett übertragen, das dauert eine Weile.

6. Optional: ssl-Zertifikat des server2 setzen für "ldaps"

ggf. noch installieren

# apt-get install openssh-server

Zertifikat für ldap erzeugen und Rechte setzen:

# mkdir /etc/ldap/ssl
# cd /etc/ldap/ssl
# openssl req -newkey rsa:1024 -x509 -nodes -out slapd.pem -keyout slapd.pem -days 3650
# chown openldap:openldap /etc/ldap/ssl/slapd.pem 
# chmod 400 /etc/ldap/ssl/slapd.pem 

Editieren: /etc/ldap/slapd.conf

...
# TLSCipherSuite HIGH:MEDIUM:-SSLv2
TLSCACertificateFile  	/etc/ldap/ssl/slapd.pem
TLSCertificateFile    	/etc/ldap/ssl/slapd.pem
TLSCertificateKeyFile 	/etc/ldap/ssl/slapd.pem
...

Editieren: /etc/default/slapd

...
SLAPD_SERVICES="ldap:/// ldaps:///"
...

Konfigdatei aktivieren und Dienst neu starten:

# rm -r /etc/ldap/slapd.d/*
# slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d
# chown -R openldap:openldap /etc/ldap
# service slapd restart

7. Ggf. Port-Weiterleitungen setzen

Im Router und im IPFire müssen die Anfragen von außen durchgereicht werden, z.B. für ldap-Port 389 (für ldaps dann entsprechend mit Port 636):

Im Router bzw. virtuellem NAT o.ä.:

<externe IP>:389 --> <IPFire>:389
<externe IP>:390 --> <IPFire>:390

Im IPFire:

<Default IP>:389 --> 10.16.1.1:389
<Default IP>:390 --> 10.16.1.2:389

Standard-Port ist 389, der Port 390 wird bei manchen Systemen ebenfalls für LDAP-Anfragen benutzt.

Man sollte die unverschlüsselte Abfrage über Port 389 nur zum Testen aktivieren, im Betrieb sollte alles über ldaps und Port 636 laufen!
Außerdem sollte man die Weiterleitung nur für diejenigen Hosts (IP-Adressen) einrichten, von denen aus man den Ldap abfragen möchte. Anderenfalls ist die Ldap-Datenbank für jeden im Internet auch ohne Passwort einsehbar!

8. Ggf. Slave-LDAP bei den externen Diensten eintragen

Bei manchen Diensten kann man mehrere LDAP-Server eintragen. Dabei die eingestellten Ports benutzen.
Z.B. bei moodle:
„Geben Sie einen LDAP-Server in URL-Form an, wie etwa „ldap:/ /ldap.meinserver.de“ oder „ldaps:/ /ldap. meinserver.de“. Mehrere LDAP-Server trennen Sie bitte mit “;„ (Semikolon), z.B. als LDAP-Failover.“

9. Testen

Ein schneller Test ist eine Abfrage mit ldapsearch:

# ldapsearch -x -w "" -H "ldap://127.0.0.1"  -b "dc=linuxmuster-net,dc=lokal"

Wenn hier die Ausgabe auf dem Server und dem Comsumer gleich aussieht, insbesondere etwa ganz am Ende der Wert bei numEntries, dann hat die Synchronisation geklappt.

So kann man alle Attribute eines einzelnen Users (username ersetzen) ausgeben:

# ldapsearch -x -W -H "ldap://127.0.0.1"  -b "dc=linuxmuster-net,dc=lokal" -D "cn=admin,dc=linuxmuster-net,dc=lokal" "(uid=username)"

Hier wird man nach einem Passwort gefragt, es ist das rootpw, das man im ersten Schritt notiert hat. Dies ist hier erforderlich, da bei einer anonymen Abfrage wie im ersten Test nicht alle Felder ausgegeben werden, es fehlen zum Beispiel die Passworthashes. Auch hier vergleicht man wieder die Ausgabe auf dem Server und dem Consumer.

Nun kann man beispielsweise das Passwort eines Users ändern und beobachten, wie bei der nächsten Synchronisation die Änderungen übernommen werden.

Von einem Windows-Client kann man mit dem → Softerra-LDAP-Browser (Freeware) die LDAP-Datenbank abfragen.
Von einem Ubuntu-Client gibts viele Tools, z.B. „Luma“ oder „JXplorer“.

Bei Verbindungsproblemen: den ldap-Dienst im debug-Modus starten mit vielen, vielen Ausgaben an der Konsole:

# service slapd stop
# slapd -d -1

ssl-Zertifikat testen:

# openssl s_client -connect localhost:636 -showcerts

10. Bei Bedarf: Löschen und neue Übertragung der gesamten LDAP-Datenbank

Natürlich nur am Consumer/server2!

# systemctl stop slapd
# rm -f /var/lib/ldap/*
# systemctl start slapd

Danach einen Test wie weiter oben beschrieben nicht vergessen!

 [[anwenderwiki:erweiterungen:ldap-replikation]] anwenderwiki/erweiterungen/ldap-replikation.txt · Zuletzt geändert: 2020/09/15 03:53 von jrichter