LDAP Server mit OpenLDAP: Difference between revisions
No edit summary |
|||
Line 12: | Line 12: | ||
Während der Installation das Administrator-Passwort eingeben und gut merken. |
Während der Installation das Administrator-Passwort eingeben und gut merken. |
||
Will man es später noch ändern, erzeugt man per slappasswd einen neuen String. |
|||
Die Config liegt unter ''/etc/ldap/slap.d'' und ''/usr/share/slapd''. |
Die Config liegt unter ''/etc/ldap/slap.d'' und ''/usr/share/slapd/slapd.init.ldif'' (globaler Teil). |
||
<br> |
<br> |
||
Die eigentliche Datenbank liegt unter ''/var/lib/ldap''. |
Die eigentliche Datenbank liegt unter ''/var/lib/ldap''. |
Revision as of 18:21, 14 December 2022
Wer für verschiedene Dienste nicht immer lokale User anlegen will, sammelt diese am besten in einer zentralen Datenbank (für größere Setups ohnehin Gang und Gäbe). Für solche Zwecke bieten sich LDAP-Datenbanken an, die baumförmig aufgebaut sind, und vor allem für Lesezugriffe eine gute Performance haben sollen. Ein bekanntes Beispiel für LDAP ist MS Active Directory.
Die offizielle OpenLDAP-Doku befindet sich hier: https://www.openldap.org/doc/admin24/index.html
Installation
Die passenden Pakete und Hilfstools mit dem jeweiligen Paketmanager installieren, z.B.
# apt install slapd ldapscripts ldap-utils libarchive-zip-perl
Während der Installation das Administrator-Passwort eingeben und gut merken. Will man es später noch ändern, erzeugt man per slappasswd einen neuen String.
Die Config liegt unter /etc/ldap/slap.d und /usr/share/slapd/slapd.init.ldif (globaler Teil).
Die eigentliche Datenbank liegt unter /var/lib/ldap.
BaseDN auf eigene Domain ändern
In der Regel will man das LDAP Suffix auf seine eigene Domain ändern (z.B. dc=example,dc=com). Die einzige brauchbare Anleitung befindet sich hier:
https://stackoverflow.com/questions/19537319/change-basedn-in-openldap (Stand 2019)
Anbei noch ein paar Ergänzungen zu den einzelnen Schritten. Durchgeführt unter Debian stretch und buster.
Step 1: Alte DB sichern
Datenbank wegsichern mit "slapcat" (s. Anleitung).
Step 2: Dienst stoppen
Der Dienst muss während der Änderungen gestoppt sein:
# service slapd stop
Step 3: alte DB-Files löschen
Delete old LDAP database
Besser ist, die DB nur wegzumoven:
# cd /var/lib/ldap # mv * /tmp
Make sure LDAP is not running !
Step 4: CONFIG_DB (optional)
CONFIG_DB anpassen
Der Pfad der DB ist /usr/share/slapd/DB_CONFIG. In der Regel kann man die Werte so lassen, wie sie sind.
Step 5: Settings
LDAP Settings ändern
Das Passwort, das bei der Installation angegeben wurde, aus dem Parameter olcRootPW auslesen oder - wenn das Passwort vergessen wurde - 'slappasswd' ausführen und Ergebnis bei olcRootPW im olcDatabase file und in /etc/ldapscripts/ldapscripts.passwd eintragen.
# grep -i olcrootpw /etc/ldap/slapd.d/cn\=config/olcDatabase\=\{1\}mdb.ldif|awk '{ print $NF }' > /etc/ldapscripts/ldapscripts.passwd
Change the current LDAP settings in the following files
/etc/ldapscripts/ldapscripts.conf:
... SERVER="ldap://localhost" BINDDN="cn=admin,dc=my,dc=new,dc=ldap,dc=domain" BINDPWDFILE="/etc/ldapscripts/ldapscripts.passwd" ...
Achtung, das DB Schema hdb ist obsolete, stattdessen wird lmdb verwendet -> Die Datei heißt statt /etc/ldap/slapd.d/cn=config/olcDatabase\={1}hdb.ldif olcDatabase={1}mdb.ldif ! ( https://www.openldap.org/doc/admin24/backends.html )
/etc/ldap/slapd.d/cn=config/olcDatabase={1}mdb.ldif:
... olcSuffix: dc=my,dc=new,dc=ldap,dc=domain olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=my,dc=new,dc=ldap,dc=domain" write by * none olcAccess: {2}to * by self write by dn="cn=admin,dc=my,dc=new,dc=ldap,dc=domain" write by * read olcRootDN: cn=admin,dc=my,dc=new,dc=ldap,dc=domain olcRootPW: <new administrator password>
Achtung, dananch stimmt die CRC32 sum der Datei nicht mehr !
Fehlermeldung:
5bf33f4c ldif_read_file: checksum error on "/etc/ldap/slapd.d/cn=config/olcDatabase={1}mdb.ldif"
Abhilfe:
# tail -n +3 /etc/ldap/slapd.d/cn=config/olcDatabase\={1}mdb.ldif > /tmp/fixed.ldif # crc32 /tmp/fixed.ldif
Das Ergebnis in olcDatabase\={1}mdb.ldif eintragen (beim auskommentierten CRC32).
( s.a. https://gist.github.com/Shaltz/1d65a07a0901a36fb7f1)
Step 6: DB-Schema
new_ldap.ldif erstellen
Beispiel s. Anleitung
Korrektur:
# Root dn: dc=my,dc=new,dc=ldap,dc=domain description: New LDAP BaseDN dc: parent <- my o: parent.my.new.ldap.domain objectClass: top ...
In der Zeile "dc:" nicht parent eingeben, sondern den RootDN der Domain (hier also "my").
Step 7: Testen der Einstellungen
Testweise per slapadd einlesen. Falls ein Fehler auftaucht:
value of single-valued naming attribute 'dc' conflicts with value present in entry
muss die Zeile dc: korrigiert werden (s.o.).
Step 8: Zufügen der Änderung
DB-Schema einlesen.
slapadd nur ausführen, wenn der Test aus Schritt 7 erfolgreich war. Zugehörige Ausgabe:
added: "dc=my,dc=new,dc=ldap,dc=domain" added: "cn=admin,dc=my,dc=new,dc=ldap,dc=domain" added: "ou=Users,dc=my,dc=new,dc=ldap,dc=domain" added: "ou=Groups,dc=my,dc=new,dc=ldap,dc=domain" _#################### 100.00% eta none elapsed none fast!
Step 9: Dienst starten
Sollte es beim Starten einen Fehler geben, handelt es sich vermutlich um ein Berechtigungsproblem.
Verifizieren mit
# systemctl status slapd.service
Nov 19 18:08:41 osboxes slapd[17864]: mdb_db_open: database "dc=my,dc=new,dc=ldap,dc=domain" cannot be opened: Permission denied (13). Restore from backup!
Die richtigen Rechte kann man sich anzeigen lassen, wenn man im Schritt 3 die Database nicht gelöscht, sondern nur weggemovet hat. Ein ls -l /tmp zeigt die richtigen Rechte.
# chown openldap.openldap /var/lib/ldap/data.mdb /var/lib/ldap/lock.mdb
Danach Dienst wieder anstarten:
# service slapd start
Kontrolle mit "slapcat". Als Ausgabe sollte das DB-Schema kommen.
DB-Zugriff
perl CLI
ldapsearch ...
per GUI
Ein Tool zum grafischen Zugriff auf die LDAP-DB ist z.B. jxplorer. Auf "Connect" gehen und IP/FQDN, BaseDN, Admin-DN und Passwort eingeben.