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 LDIF Syntax liest und die Datenbank Datei dabei aktualisiert
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
Herunterladen. Entpacken. Ins Verzeichnis wechseln.
make && sudo make install
Herunterladen. Entpacken. Ins Verzeichnis wechseln.
make && sudo make install
Herunterladen. Entpacken. Ins Verzeichnis wechseln.
make
Falls du das nicht ohnehin auf deinem System bereits nutzt, genügt (empfohlen) ein:
apt-get install ucspi-tcp
alternativ kannst du das auch diese Tools aus den Quellen bauen: ucspi-tcp-0.88.tar.gz. Herunterladen. Entpacken. In das Verzeichnis wechseln. Mit diesen speziellen Settings bauen
echo "gcc -static -O2 -include /usr/include/errno.h" > conf-cc echo "gcc -s -static" > conf-ld make
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:
#!/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
#!/bin/sh
exec 2>&1
logdir="/var/log/tinyldap/"
exec 2>&1
mkdir -p "$logdir"
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
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"
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".