tinyldap server einrichten

reinhard@finalmedia.de Sat 17 Dec 2022 11:44:51 AM CET

Sinn und Zweck

tinyldap ist ein kleiner, performanter readonly ldap server.

Datenänderungen finden in der binary databasefile "data" statt, die dann vom systemuser verändert werden muss. Hierzu kann das beigefügte Tool parse verwendet werden, das Daten in LDFI Syntax liest und die Datenbank Datei dabei aktualisiert

1. Quellcode herunterladen und Binarys bauen

Binaries aus den Quellen bauen. Die Reihenfolge ist zu beachten.


+++ sha256sum +++
7994ad5a63d00446da2e95da1f3f03355b272f096d7eb9830417ab14393b3ace  dietlibc-0.34.tar.xz
311ec8b3f4b72bb442e323fb013a98f956fa745547f2bc9456287b20d027cd7d  libowfat-0.33.tar.xz
ce20e1519cb9a229af6641e028abe50eb5ad2159e54488216a2d34bed65473a1  tinyldap20221217.tgz
4a0615cab74886f5b4f7e8fd32933a07b955536a3476d74ea087a3ea66a23e9c  ucspi-tcp-0.88.tar.gz

2. tinyldap konfigurieren und nutzen

In das tinyldap verzeichnis wechseln und Testdaten in LDIF erstellen

cat << +++EOF+++ > exp.ldif
dn: o=fefe,c=de
objectClass: top

dn: cn=Felix von Leitner,o=fefe,c=de
objectClass: inetOrgPerson
cn: Felix von Leitner
sn: von Leitner
mail: felix-tinyldap@fefe.de
mail: felix-ldap@fefe.de

dn: cn=Second User,o=fefe,c=de
objectClass: inetOrgPerson
cn: Second User
sn: User
mail: seconduser@fefe.de
+++EOF+++

Das parse Tool nutzen, um ldif aus der exp.ldif einzulesen und in binary database format zu wandeln und in datei data zu schreiben:

./parse exp.ldif data
hd data
./addindex data sn i
./addindex data cn i
hd data
./dumpidx
# zu demo zwecken database file readonly für alle systemuser (auch nobody)
chmod u=rw,g=r,o=r data

tinyldap mit tcpserver im Vordergrund spawnen

Im Beispiel als root gestartet, um an Port 389 binden zu können, dann mit privilege drop auf user nobody (65534) und group nogroup (65534).

Wir binden über ipv4 wildcard IP an alle IPv4 Adressen des Systems.

tcpserver -vDRH -l0 -b50 -c 80000 -u 65534 -g 65534 0.0.0.0 389 ./tinyldap

Du kannst auch die daemontools dann dafür verwenden, um das als Dienst an den Start zu bringen:

/srv/tinyldap/run

#!/bin/sh
exec 2>&1
exec envuidgid nobody softlimit -o25 -d250000 tcpserver -vDRH -l0 -b50 -c 80000 -u 65534 -g 65534 0.0.0.0 389 ./tinyldap 

/srv/tinyldap/log/run

#!/bin/sh
exec 2>&1
logdir="/var/log/tinyldap/"
exec 2>&1
mkdir -p "$logdir" 

3. Beispielabfrage mit LDAP client

Also wir nehmen an, der Server läuft wie oben beschrieben und wir testen nun den Zugriff:

./ldapclient 127.0.0.1 "o=fefe,c=de" '(sn=von Leitner)' mail
./ldapclient 127.0.0.1 "o=fefe,c=de" '(sn=User)' mail

4. Demo Daten-Änderungen zur Laufzeit

Mit einem Systemuser, der Schreibrechte an der data und exp.ldif hat, verändern wir den Datensatz

sed -i "s/mail: seconduser@fefe.de/mail: erbsentest@fefe.de/g" exp.ldif
./parse exp.ldif data

Bei erneuter Abfrage, sollte nun auch die geänderte Mail-Adresse ersichtlich werden

./ldapclient 127.0.0.1 'o=fefe,c=de' '(sn=User)' mail

Benchmark

yes | xargs -P 0 sh -c "./ldapclient 127.0.0.1 'o=fefe,c=de' '(sn=User)' mail"

Weiterführendes

Hier findest du eine Kopie (Spiegel) der Datei ccccamp2003-ldap.pdf, einem über 20 Jahre alten Vortrag von Felix von Leitner (fefe) auf dem CCC Camp 2003 zur Thematik LDAP und Implementierung tinyldap, sowie die vielen Fallstricke die LDAP Implementierungen mit sich bringen. Titel "LDAP: a view from the machine room".