LDAP Server mit OpenLDAP: Difference between revisions

From Linuxwiki
Jump to navigation Jump to search
No edit summary
Line 11: Line 11:
</pre>
</pre>


Während der Installation das Administrator-Passwort eingeben und gut merken.
Während der Installation das Administrator-Passwort eingeben und gut merken.<br>
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 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''.

= 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.<br>
Beispiel:

<pre>
# ldapsearch -H ldapi:// -LLL -Q -Y EXTERNAL -b "cn=config" "(olcRootDN=*)" dn olcRootDN olcRootPW | tee ~/newpasswd.ldif
</pre>
Aus dem entstandenen File die Zeilen dn, olcRootDN und olcRootPW extrahieren:
<pre>
dn: olcDatabase={1}hdb,cn=config
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW: {SSHA}ncCXAJ5DjfRWgxE9pz9TUCNl2qGQHQT3
</pre>

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:
<pre>
dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw
</pre>

Nun kann das neue Passwort mit ldapmodify eingelesen werden:
<pre>
# ldapmodify -H ldapi:// -Y EXTERNAL -f ~/newpasswd.ldif
</pre>
s.a. https://www.digitalocean.com/community/tutorials/how-to-change-account-passwords-on-an-openldap-server


= BaseDN auf eigene Domain ändern =
= BaseDN auf eigene Domain ändern =

Revision as of 18:58, 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}hdb,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}hdb,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

s.a. https://www.digitalocean.com/community/tutorials/how-to-change-account-passwords-on-an-openldap-server

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.

Ldap jxplorer.png