LDAP Server mit OpenLDAP: Difference between revisions
Line 26: | Line 26: | ||
Aus dem entstandenen File die Zeilen dn, olcRootDN und olcRootPW extrahieren: |
Aus dem entstandenen File die Zeilen dn, olcRootDN und olcRootPW extrahieren: |
||
<pre> |
<pre> |
||
dn: olcDatabase={1} |
dn: olcDatabase={1}mdb,cn=config |
||
olcRootDN: cn=admin,dc=example,dc=com |
olcRootDN: cn=admin,dc=example,dc=com |
||
olcRootPW: {SSHA}ncCXAJ5DjfRWgxE9pz9TUCNl2qGQHQT3 |
olcRootPW: {SSHA}ncCXAJ5DjfRWgxE9pz9TUCNl2qGQHQT3 |
||
Line 38: | Line 38: | ||
Das ldif File wie folgt modifizieren: |
Das ldif File wie folgt modifizieren: |
||
<pre> |
<pre> |
||
dn: olcDatabase={1} |
dn: olcDatabase={1}mdb,cn=config |
||
changetype: modify |
changetype: modify |
||
replace: olcRootPW |
replace: olcRootPW |
Revision as of 19:00, 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.
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.
Passwort des LDAP-Administrators/-Managers ändern
Will man das Admin-Passwort später noch ändern, erzeugt man per slappasswd einen neuen String. Diesen kann man dann per ldif wieder einlesen.
Beispiel:
# ldapsearch -H ldapi:// -LLL -Q -Y EXTERNAL -b "cn=config" "(olcRootDN=*)" dn olcRootDN olcRootPW | tee ~/newpasswd.ldif
Aus dem entstandenen File die Zeilen dn, olcRootDN und olcRootPW extrahieren:
dn: olcDatabase={1}mdb,cn=config olcRootDN: cn=admin,dc=example,dc=com olcRootPW: {SSHA}ncCXAJ5DjfRWgxE9pz9TUCNl2qGQHQT3
Neuen Passwort-String erzeugen:
# slappasswd -s mynewpassword
Im ldif File den {SSHA}... string durch die Ausgabe des slappasswd-Kommandos ersetzen.
Das ldif File wie folgt modifizieren:
dn: olcDatabase={1}mdb,cn=config changetype: modify replace: olcRootPW olcRootPW: {SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw
Nun kann das neue Passwort mit ldapmodify eingelesen werden:
# ldapmodify -H ldapi:// -Y EXTERNAL -f ~/newpasswd.ldif
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.