LDAP Server mit OpenLDAP: Difference between revisions
(Created page with "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 s...") |
No edit summary |
||
(5 intermediate revisions by the same user not shown) | |||
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> |
||
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''. |
||
= 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}mdb,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}mdb,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 = |
||
Line 123: | Line 157: | ||
slapadd nur ausführen, wenn der Test aus Schritt 7 erfolgreich war. Zugehörige Ausgabe: |
slapadd nur ausführen, wenn der Test aus Schritt 7 erfolgreich war. Zugehörige Ausgabe: |
||
<console> |
|||
added: "dc=my,dc=new,dc=ldap,dc=domain" |
added: "dc=my,dc=new,dc=ldap,dc=domain" |
||
added: "cn=admin,dc=my,dc=new,dc=ldap,dc=domain" |
added: "cn=admin,dc=my,dc=new,dc=ldap,dc=domain" |
||
Line 128: | Line 163: | ||
added: "ou=Groups,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! |
_#################### 100.00% eta none elapsed none fast! |
||
</console> |
|||
== Step 9: Dienst starten == |
== Step 9: Dienst starten == |
||
Line 149: | Line 184: | ||
Kontrolle mit "slapcat". Als Ausgabe sollte das DB-Schema kommen. |
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. |
|||
[[File:Ldap jxplorer.png]] |
|||
= Datenbank befüllen = |
|||
Wie bekommt man nun seine Daten ins LDAP? Am sinnvollsten ist das Anlegen von ldif-Files. Eine sinnvolle Reihenfolge scheint zu sein: OU (Organisational Units), Users/People, Groups (eine Gruppe muss mindestens ein member haben, sonst wird sich nicht angelegt, von daher braucht es wenigstens eine Person). |
|||
Beispiele:<br> |
|||
* https://www.thegeekstuff.com/2015/02/openldap-add-users-groups/ |
|||
* https://kifarunix.com/how-to-create-openldap-member-groups/ |
|||
Ansonsten kann man sich auch die Parameter unter /etc/ldap/schema/*.schema anschauen. |
Latest revision as of 16:27, 15 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.
Datenbank befüllen
Wie bekommt man nun seine Daten ins LDAP? Am sinnvollsten ist das Anlegen von ldif-Files. Eine sinnvolle Reihenfolge scheint zu sein: OU (Organisational Units), Users/People, Groups (eine Gruppe muss mindestens ein member haben, sonst wird sich nicht angelegt, von daher braucht es wenigstens eine Person).
Beispiele:
- https://www.thegeekstuff.com/2015/02/openldap-add-users-groups/
- https://kifarunix.com/how-to-create-openldap-member-groups/
Ansonsten kann man sich auch die Parameter unter /etc/ldap/schema/*.schema anschauen.