LDAP Admin-Benutzer und ReadOnly-Benutzer im logosrv

Zuletzt geändert von Jonas Mayer am 2022/05/25 00:02

Um externe oder interne Dienste über das LDAPS-Protokoll einzubinden, gibt es seit Puppet-Version 1.3.22 neben dem sogenannten LDAP-Admin Konto einen neu hinzugefügten ReadOnly-Benutzer zur Anmeldung am integrierten OpenLDAP-Verzeichnisdienst.

In diesem Artikel erfahren Sie, wo Sie die Benutzernamen & Kennwörter der zwei Benutzer finden und welches Konto sich für welches Vorhaben am besten eignen.


Grafik für LDAp.png

Übersicht der Benutzer

LDAP-Admin Benutzer

Nutzungsgebiet:

Der LDAP-Admin Benutzer ist mit äußerster Vorsicht einzusetzen, da dieser einen beinahe uneingeschränkten (Schreib-)Zugriff auf den Inhalt des OpenLDAP-Verzeichnisdienst sowie die Nutzerattribute besitzt. Daher sollte der Benutzer möglichst nur intern durch LogoDIDACT-integrierte Dienste zum Einsatz kommen.

Sollten die Daten des LDAP-Admins in unbefugte Hände gelangen, stellt dies ein massives datenschutz- und sicherheitsrelevantes Problem dar. Von einem externen Gebrauch des Benutzerkontos ist daher strikt abzuraten!

Zugangsdaten:

Der Benutzername des LDAP Admins lautet:

cn=ldap-admin

Vollständiger Benutzername

Die BaseDN als Einstiegspunkt zum LDAP-Verzeichnisdienst kann über ein zusätzliches Programm ausgelesen werden, z.B. über das freie Tool LDAP Admin. In diesem Beispiel lautet die BaseDN dc=schule,dc=local. Dies kann von Installation zu Installation abweichen und wird durch die intern verwendete DNS Domain bestimmt, hier im Beispiel handelt es sich um den Standardwert.

1651243652049-471.png

In diesem Beispiel ergibt sich der vollständige Benutzername (sogenannter Distinguished Name des Benutzerkontos) durch Anfügen der BaseDN:

cn=ldap-admin,dc=schule,dc=local

Kennwort

Das Kennwort ist im logosrv unter folgendem Pfad einsehbar:

root@logosrv:~ # cat /etc/ldap.secret

Optional kann man das Passwort (sowie die gültige BaseDN des Servers als Teil des Benutzernamens) auch mit folgendem Befehl aus dem Abschnitt "Credentials" entnehmen:

root@logosrv:~ # ldconf -o

LDAP-ReadOnly (ldap-ro) Benutzer

Nutzungsgebiet:

Der LDAP-ReadOnly Benutzer ist für die Verwendung in externen Diensten vorgesehen.

Mögliche Nutzungsszenarien wären unter anderem die Anbindung  von extern gehosteten Webdiensten (z.B. Moodle, WebUntis oder Nextcloud) an die Benutzerdatenbank des LogoDIDACT Servers per LDAP-Protokoll.

Zugangsdaten:

Der Benutzername des LDAP ReadOnly Benutzers lautet:

cn=ldap-ro

Vollständiger Benutzername

Die BaseDN als Einstiegspunkt zum LDAP-Verzeichnisdienst kann über ein zusätzliches Programm ausgelesen werden, z.B. über das freie Tool LDAP Admin. In diesem Beispiel lautet die BaseDN dc=schule,dc=local. Dies kann von Installation zu Installation abweichen und wird durch die intern verwendete DNS Domain bestimmt, hier im Beispiel handelt es sich um den Standardwert.

1651243652049-471.png

Im Unterschied zum vorherigen Benutzer steckt das Konto verschachtelt in dem Unterobjekt OU=services. Dadurch ergibt sich nachfolgender, vollständiger Benutzername (sogenannter Distinguished Name):

cn=ldap-ro,ou=services,dc=schule,dc=local

Kennwort

Das Kennwort ist im logosrv unter folgendem Pfad einsehbar:

root@logosrv:~ # cat /etc/ldap.ro.secret

Im Zuge der Anbindung externer Dienste sollte stets darauf geachtet werden, die verschlüsselte Form des LDAP-Protokolls (d.h. LDAPS auf TCP-Port 636) zu verwenden, damit sensible Information wie Benutzer-Zugangsdaten prinzipiell per SSL-Transportverschlüsselung versendet werden. Zur Nutzung der SSL-Transportverschlüsselung ist es wiederum wichtig, ein gültiges Let's Encrypt Zertifikat zu beantragen, damit die Verbindungssicherheit zwischen zwei Servern gewährleistet werden kann.

Konfiguration zur Freischaltung von OpenLDAP via Rev-Proxy

Um den Verzeichnisdienst mit signiertem Let's Encrypt per nginx-stream freizuschalten, müssen Sie im Puppeteer-Container die Konfigurationsdatei rev-proxy.yaml anlegen. Sollte diese bereits vorhanden sein, muss diese stattdessen bearbeitet werden.

Wechseln Sie in das Verzeichnis /etc/logodidact/hiera/custom.d/ im Puppeteer Container:

root@puppeteer:~ # cd /etc/logodidact/hiera/custom.d/

Erstellen Sie die Datei rev-proxy.yaml bzw. fügen Sie den Inhalt aus dem nachfolgenden Schritt darin hinzu, falls die Datei bereits vorhanden ist:

root@puppeteer:/etc/logodidact/hiera/custom.d # vim rev-proxy.yaml

Fügen Sie folgenden Konfigurationsabschnitt zur Konfigurationsdatei hinzu und ersetzen Sie SCHULKUERZEL in der zweiten Zeile durch den passenden ShortName der Schule:

ld_rproxy::hosts:
  ldaps.SCHULKUERZEL.logoip.de:
    type: stream
    template: ldap
    ensure: present

Übernehmen Sie die Änderungen ins Git:

root@puppeteer:~ # cd /etc/logodidact/
root@puppeteer:/etc/logodidact # git add .
root@puppeteer:/etc/logodidact # git coomit -am "rev-proxy.yaml angelegt."

Führen Sie einen prun im rev-proxy Container aus, um die Freischaltung des LDAPS-Tunnels zu aktivieren:

root@rev-proxy:~ # prun

Ports über Firewall vom Internet an Rev-Proxy weiterleiten

Damit externe LDAPS-Verbindungen zum Server möglich werden, muss der TCP-Port 636 vom vorgeschalteten Router auf die externe IP-Adresse des LogoDIDACT Servers weitergeleitet werden. Vom ldhost wird die Verbindung dann entgegengenommen und abermals an den Rev-Proxy LXC-Container weitergeleitet. Die Einrichtung der zugehörige Poerweiterleitungs-Regel wird nachfolgend beschrieben.

Wechseln Sie vom ldhost aus in das Verzeichnis der Shorewall:

root@ldhosts:~ # cd /etc/shorewall

Öffnen Sie die Datei rules mit einem Editor ihrer Wahl:

root@ldhost:/etc/shorewall # vim rules

Ergänzen Sie die Liste innerhalb der Datei um den obersten DNAT-Eintrag (lila eingefärbte Zeile). Dadurch werden externe Verbindungsanfragen auf Port 636 (LDAPS) vom ldhost zum LXC-Container rev-proxy weitergeleitet, so wie im Schaubild am Anfang des Artikels abgebildet. Falls diese Regel bereits vorhanden ist, können Sie den Schritt überspringen.

#
# Shorewall version 4.0

#
DNAT ext dmz:172.28.29.3 tcp 636
DNAT ext dmz:172.28.29.3 tcp 80,443
DNAT ext dmz:172.28.29.2 tcp 1:21
DNAT ext dmz:172.28.29.2 tcp 23:2221
DNAT ext dmz:172.28.29.2 tcp 2223:65535
DNAT ext dmz:172.28.29.2 udp 1:65535

Starten Sie nun die Firewall am ldhost neu:

root@ldhosts:~ # systemctl restart shorewall.service

SSL-Zertifikat für Rev-Proxy erstellen

Damit die Verbindung gesichert werden kann, wird ein Let's Encrypt Zertifikat benötigt. Dieses können Sie - abhängig vom zu Grunde liegenden Tool - mit den folgenden Kommandos im Puppeteer-Container erstellen.

acmetool

Wechseln Sie in den puppeteer Container:

root@ldhost:~ # lxc-ssh -n puppeteer

Fordern Sie das Zertifikat mit folgendem Befehl an (Ersetzen Sie "SCHULKUERZEL" mit dem jeweiligen Shortname):

root@puppeteer:~ # acmetool want ldaps.SCHULKUERZEL.logoip.de

acme.sh

Wechseln Sie in den puppeteer Container:

root@ldhost:~ # lxc-ssh -n puppeteer

Wechseln Sie im puppeteer Container in die Umgebung für das Verwalten der Zertifikate:

root@puppeteer:~ # sle

Beantragen Sie ein neues Zertifikat mit folgendem Befehl (Ersetzen Sie "SCHULKUERZEL" mit dem jeweiligen Shortname):

le-acme@puppeteer:~ $ issue ldaps.SCHULKUERZEL.logoip.de

Um das Verteilen der Zertifikate zu beschleunigen, können Sie einen gezielten 'prun' im puppeteer Container gefolgt von einen weiteren 'prun' im rev-proxy Container durchführen:

root@puppeteer:~ # prun

root@rev-proxy:~ # prun

Weitere LDAP Attribute für ReadOnly-Benutzer freischalten

Standardmäßig werden folgende Attribute an die externe LDAP Schnittstelle weitergegeben:

entry, cn, displayName, gidnumber, givenName, mail, member, memberOf, memberUid, o, objectClass, ou, sn, title, uid, uidnumber, uniqueMember, ldObjectType, ldRole

Sollen zusätzliche Attribute an die externe Schnittstelle weitergegeben werden, so müssen Sie diese in folgender Datei im Puppeteer Container wie folgt abändern/erstellen:

root@puppeteer:~ # vim /etc/logodidact/hiera/custom.d/ldhost.yaml

#Ist die Datei nicht vorhanden bitte wie folgt anpassen (Im Beispiel werden die Attribute ldBirthday & ldGender hinzugefügt):

---
ld_legacy::ldap::ldap_ro_atts:
 - ldBirtday
 - ldGender

Danach müssen Sie die Änderungen ins Git übernehmen:

root@puppeteer:~ # cd /etc/logodidact/
root@puppeteer:/etc/logodidact # git add .
root@puppeteer:/etc/logodidact # git coomit -am "LDAP Attribute in der ldhost.yaml hinzugefügt"

Um den Prozess zu beschleunigen bietet sich ein prun im ldhost an. Damit werden die Änderungen sofort an den logosrv weitergeleitet:

root@ldhost:~ # prun

Die angepassten ACL-Änderungen können zur Kontrolle im logosrv in der Konfigurationsdatei slapd.puppet.conf angeschaut werden:

root@logosrv:~ # cat /etc/ldap/slapd.puppet.conf