Inhaltsverzeichnis
LDAP ArchLinux
LDAP ist ein Netzwerkprotokoll und dient zur Bereitstellung von Verzeichnisdiensten. Es vermittelt die Kommunikation zwischen dem LDAP-Client und dem Directory Server, bzw. einem Backend-System, welches Verzeichnisinformationen bereitstellt.
Die hier beschriebene Variante von LDAP ist OpenLDAP, welche eine freie Implementierung des Lightweight Directory Access Protocols ist.
Beschreibung | Externer Link |
---|---|
Homepage | https://www.openldap.org/ |
Dokumentation | https://www.openldap.org/doc/ |
ArchWiki | https://wiki.archlinux.org/title/OpenLDAP |
Ab hier werden zur Ausführung nachfolgender Befehle root
-Rechte benötigt. Um der Benutzer root
zu werden, melden Sie sich bitte als root
-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root
:
$ su - Password:
Vorbereitung
Die Einbindung des AUR
-Repositories, kann wie in nachfolgenden internen Link beschrieben
durchgeführt werden.
Installation
Zur Installation eines OpenLDAP-Servers wird nachfolgendes Paket benötigt:
Mit nachfolgendem Befehl, wird das Pakete openldap
installiert:
# pacman -S --noconfirm openldap
Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket openldap
installiert wurden.
# pacman -Qil openldap
Dienst/Daemon-Start einrichten
Um einen OpenLDAP-Server, welcher als Dienst/Daemon als Hintergrundprozess läuft, auch nach einem Neustart des Servers zur Verfügung zu haben, soll der Dienst/Daemon mit dem Server mit gestartet werden, was mit nachfolgendem Befehl realisiert werden kann:
# systemctl enable slapd.service Created symlink /etc/systemd/system/multi-user.target.wants/slapd.service → /usr/lib/systemd/system/slapd.service.
Eine Überprüfung, ob beim Neustart des Server der slapd
-Dienst/Daemon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:
# systemctl list-unit-files --type=service | grep -e slapd.service slapd.service enabled disabled
bzw.
# systemctl is-enabled slapd.service enabled
iptables/ip6tables Regeln
Damit der OpenLDAP-Server auch erreichbar ist und nicht die Ergebnisse der Verzeichnisdienst-Abfragen vom Paketfilter iptables
blockiert werden, muss nachfolgende Regel zum iptables
-Regelwerk hinzugefügt werden.
Um die aktuellen iptables
-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# iptables -L -nv --line-numbers Chain INPUT (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 1169 2101K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 1 60 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 5 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 5 prefix "REC-INP Defend " 6 0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with tcp-reset 7 0 0 REJECT udp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 8 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-proto-unreachable Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 917 packets, 84944 bytes) num pkts bytes target prot opt in out source destination
Nachfolgende Befehle, fügen folgende iptables
-Regeln dem iptables
-Regelwerk nach der Position 4 hinzu, ohne das der Paketfilter angehalten werden muss:
-A INPUT -p tcp --dport 636 -j ACCEPT
-A INPUT -p tcp --dport 389 -j ACCEPT
und hier die Befehle:
# iptables -I INPUT 5 -p tcp --dport 636 -j ACCEPT # iptables -I INPUT 5 -p tcp --dport 389 -j ACCEPT
Ein erneute Abfrage des iptables
-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:
# iptables -L -nv --line-numbers Chain INPUT (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 1202 2103K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 1 60 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 5 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:389 6 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:636 7 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 5 prefix "REC-INP Defend " 8 0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with tcp-reset 9 0 0 REJECT udp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 10 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-proto-unreachable Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 7 packets, 936 bytes) num pkts bytes target prot opt in out source destination
Die neuen Zeilen sind an Position 5 (INPUT) und Position 6 (INPUT) zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):
... 5 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:389 6 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:636 ...
Um diese iptables
-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables
-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:
# /usr/sbin/iptables-save > /etc/iptables/iptables.rules
Nachfolgender Befehl kann dazu verwendet werden, um zu überprüfen, ob das iptables-Regelwerk auch korrekt gespeichert wurde:
# cat /etc/iptables/iptables.rules # Generated by iptables-save v1.8.7 on Wed Mar 23 06:14:11 2022 *filter :INPUT DROP [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [13:3332] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 389 -j ACCEPT -A INPUT -p tcp -m tcp --dport 636 -j ACCEPT -A INPUT -j LOG --log-prefix "REC-INP Defend " --log-level 5 -A INPUT -p tcp -j REJECT --reject-with tcp-reset -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable -A INPUT -j REJECT --reject-with icmp-proto-unreachable COMMIT # Completed on Wed Mar 23 06:14:11 2022 # Generated by iptables-save v1.8.7 on Wed Mar 23 06:14:11 2022 *nat :PREROUTING ACCEPT [5:352] :INPUT ACCEPT [1:60] :OUTPUT ACCEPT [8:577] :POSTROUTING ACCEPT [8:577] COMMIT # Completed on Wed Mar 23 06:14:11 2022 # Generated by iptables-save v1.8.7 on Wed Mar 23 06:14:11 2022 *mangle :PREROUTING ACCEPT [1216:2104461] :INPUT ACCEPT [1212:2104169] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [944:91396] :POSTROUTING ACCEPT [944:91396] COMMIT # Completed on Wed Mar 23 06:14:11 2022
Um die aktuellen ip6tables
-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# ip6tables -nvL --line-numbers Chain INPUT (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all * * ::/0 ::/0 ctstate RELATED,ESTABLISHED 2 0 0 ACCEPT icmp * * ::/0 ::/0 3 0 0 ACCEPT all lo * ::/0 ::/0 4 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:22 5 0 0 LOG all * * ::/0 ::/0 LOG flags 0 level 5 prefix "REC-INP Defend " 6 0 0 REJECT tcp * * ::/0 ::/0 reject-with tcp-reset 7 0 0 REJECT udp * * ::/0 ::/0 reject-with icmp6-port-unreachable 8 0 0 REJECT all * * ::/0 ::/0 reject-with icmp6-addr-unreachable Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 LOG all * * ::/0 ::/0 LOG flags 0 level 5 prefix "REC-FWD Defend " 2 0 0 REJECT tcp * * ::/0 ::/0 reject-with tcp-reset 3 0 0 REJECT udp * * ::/0 ::/0 reject-with icmp6-port-unreachable 4 0 0 REJECT all * * ::/0 ::/0 reject-with icmp6-addr-unreachable Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination
Nachfolgende Befehle, fügen folgende ip6tables
-Regeln dem ip6tables
-Regelwerk nach der Position 4 hinzu, ohne das der Paketfilter angehalten werden muss:
-A INPUT -p tcp --dport 389 -j ACCEPT
-A INPUT -p tcp --dport 636 -j ACCEPT
und hier die Befehle:
# ip6tables -I INPUT 5 -p tcp --dport 389 -j ACCEPT # ip6tables -I INPUT 6 -p tcp --dport 636 -j ACCEPT
Ein erneute Abfrage des ip6tables
-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:
# ip6tables -nvL --line-numbers Chain INPUT (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all * * ::/0 ::/0 ctstate RELATED,ESTABLISHED 2 0 0 ACCEPT icmp * * ::/0 ::/0 3 0 0 ACCEPT all lo * ::/0 ::/0 4 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:22 5 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:389 6 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:636 7 0 0 LOG all * * ::/0 ::/0 LOG flags 0 level 5 prefix "REC-INP Defend " 8 0 0 REJECT tcp * * ::/0 ::/0 reject-with tcp-reset 9 0 0 REJECT udp * * ::/0 ::/0 reject-with icmp6-port-unreachable 10 0 0 REJECT all * * ::/0 ::/0 reject-with icmp6-addr-unreachable Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 LOG all * * ::/0 ::/0 LOG flags 0 level 5 prefix "REC-FWD Defend " 2 0 0 REJECT tcp * * ::/0 ::/0 reject-with tcp-reset 3 0 0 REJECT udp * * ::/0 ::/0 reject-with icmp6-port-unreachable 4 0 0 REJECT all * * ::/0 ::/0 reject-with icmp6-addr-unreachable Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination
Die neuen Zeilen sind an Position 5 (INPUT) und Postition 6 (INTPUT) zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):
... 5 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:389 6 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:636 ...
Um diese ip6tables
-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im ip6tables
-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:
# /usr/sbin/ip6tables-save > /etc/iptables/ip6tables.rules
Nachfolgender Befehl kann dazu verwendet werden, um zu überprüfen, ob das ip6tables
-Regelwerk auch korrekt gespeichert wurde:
# cat /etc/iptables/ip6tables.rules # Generated by ip6tables-save v1.8.7 on Wed Mar 23 06:18:21 2022 *mangle :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT # Completed on Wed Mar 23 06:18:21 2022 # Generated by ip6tables-save v1.8.7 on Wed Mar 23 06:18:21 2022 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 389 -j ACCEPT -A INPUT -p tcp -m tcp --dport 636 -j ACCEPT -A INPUT -j LOG --log-prefix "REC-INP Defend " --log-level 5 -A INPUT -p tcp -j REJECT --reject-with tcp-reset -A INPUT -p udp -j REJECT --reject-with icmp6-port-unreachable -A INPUT -j REJECT --reject-with icmp6-addr-unreachable -A FORWARD -j LOG --log-prefix "REC-FWD Defend " --log-level 5 -A FORWARD -p tcp -j REJECT --reject-with tcp-reset -A FORWARD -p udp -j REJECT --reject-with icmp6-port-unreachable -A FORWARD -j REJECT --reject-with icmp6-addr-unreachable COMMIT # Completed on Wed Mar 23 06:18:21 2022 # Generated by ip6tables-save v1.8.7 on Wed Mar 23 06:18:21 2022 *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT # Completed on Wed Mar 23 06:18:21 2022
/etc/hosts
Falls keine DNS-Auflösung des Namens, welcher in der Konfigurationsdatei
/etc/openldap/ldap.conf
unter
... URI ldap://ldap.idmz.tachtler.net ...
möglich ist, muss in der Konfigurationsdatei
/etc/hosts
nachfolgende Ergänzung hinzugefügt werden:
127.0.0.1 localhost.localdomain localhost ::1 localhost.localdomain localhost 192.168.0.30 ldap.idmz.tachtler.net
HINWEIS - Die Ergänzung ist in der 3 Zeile in oben gezeigter Konfigurationsdatei!
Somit kann gewährleistet werden, dass die Verwendung des DNS-Namens möglich ist.
Basis-Konfiguration
Vorbereitung - slapd.conf
Bevor mit Änderungen an den Konfigurationsdateien
/etc/openldap/ldap.conf
- Client-Konfigurationsdatei/etc/openldap/slapd.conf
- Server-Konfigurationsdatei
begonnen werden soll, kann mit nachfolgenden Befehlen eine Sicherung der Konfigurationsdateien angefertigt werden:
# cp -a /etc/openldap/ldap.conf /etc/openldap/ldap.conf.save # cp -a /etc/openldap/slapd.conf /etc/openldap/slapd.conf.save
/var/lib/openldap/openldap-data
Nachfolgendes Verzeichnis, welches nach der Installation grundsätzlich nicht existiert, muss mit nachfolgenden Befehlen neu erstellt werden und mit den entsprechenden Besitz- und Datei-rechten versehen werden, wie nachfolgend dargestellt:
Neuanlage des Verzeichnisses: /var/lib/openldap/openldap-data
# mkdir /var/lib/openldap/openldap-data
Setzen der entsprechenden Besitzrechte:
# chown ldap:ldap /var/lib/openldap/openldap-data
Setzen der entsprechenden Dateirechte:
# chmod 700 /var/lib/openldap/openldap-data
/etc/openldap/ldap.conf
Die Client-Konfigurationsdatei /etc/openldap/ldap.conf
dient zur Konfiguration von System weiten Client-Einstellungen. Hier wird auch die z.B. Basis-Domain für den LDAP-Client festgelegt. Dies ist die Standard-Konfigurationsdatei:
# # LDAP Defaults # # See ldap.conf(5) for details # This file should be world readable but not world writable. #BASE dc=example,dc=com #URI ldap://ldap.example.com ldap://ldap-provider.example.com:666 #SIZELIMIT 12 #TIMELIMIT 15 #DEREF never
Folgende Anpassungen der Konfigurationsdatei /etc/openldap/ldap.conf
genügen, um grundsätzlich die grundlegenden Einstellungen für die LDAP-Clients bereitzustellen:
# # LDAP Defaults # # See ldap.conf(5) for details # This file should be world readable but not world writable. # Tachtler # default: #BASE dc=example,dc=com BASE dc=tachtler,dc=net # Tachtler # default: #URI ldap://ldap.example.com ldap://ldap-provider.example.com:666 URI ldap://ldap.idmz.tachtler.net #SIZELIMIT 12 #TIMELIMIT 15 #DEREF never
Erklärungen:
BASE dc=tachtler,dc=net
Mit der Variable BASE wird der standardmässig abgefragte Teilbaum festgelegt. Das bedeutet, dass alle Anfragen unterhalb von z.B. hier nachfolgen: dc=tachtler, dc=net
durchzuführen sind. Dies wird häufig auch Searchbase (Suchbasis) genannt.
URI ldap://ldap.idmz.tachtler.net
Die Variable URI gibt den Server an und wie dieser standardmässig zu erreichen ist.
/etc/openldap/sldap.conf
Die Konfigurationsdatei /etc/openldap/sldap.conf
als „statischen“ Konfigurationsdatei kann von allen OpenLDAP-Versionen verwendet werden. Bis zu der Version 2.3 ist dies die einzige Option, ab der OpenLDAP-Version 2.3 bietet OpenLDAP zusätzlich die Option die Konfiguration zur
Laufzeit zu verwalten und nicht mehr in einer „statischen“ Konfigurationsdatei.
Die Konfigurationsdatei /etc/openldap/sldap.conf
ist grundsätzlich in drei Sektionen unterteilt:
- Globale Direktiven
- Backend Direktiven
- Database-spezifische Direktiven
wobei Backend- und zugehörige Database-spezifische Direktiven mehrfach konfiguriert werden können.
Die Server-Konfigurationsdatei /etc/openldap/sldap.conf
dient zur Konfiguration des Server. Dies ist die Standard-Konfigurationsdatei:
# # See slapd.conf(5) for details on configuration options. # This file should NOT be world readable. # include /etc/openldap/schema/core.schema # Define global ACLs to disable default read access. # Do not enable referrals until AFTER you have a working directory # service AND an understanding of referrals. #referral ldap://root.openldap.org pidfile /run/openldap/slapd.pid argsfile /run/openldap/slapd.args # Load dynamic backend modules: modulepath /usr/lib/openldap moduleload back_mdb.la # moduleload back_ldap.la # Sample security restrictions # Require integrity protection (prevent hijacking) # Require 112-bit (3DES or better) encryption for updates # Require 63-bit encryption for simple bind # security ssf=1 update_ssf=112 simple_bind=64 # Sample access control policy: # Root DSE: allow anyone to read it # Subschema (sub)entry DSE: allow anyone to read it # Other DSEs: # Allow self write access # Allow authenticated users read access # Allow anonymous users to authenticate # Directives needed to implement policy: # access to dn.base="" by * read # access to dn.base="cn=Subschema" by * read # access to * # by self write # by users read # by anonymous auth # # if no access controls are present, the default policy # allows anyone and everyone to read anything but restricts # updates to rootdn. (e.g., "access to * by * read") # # rootdn can always read and write EVERYTHING! ####################################################################### # config database definitions ####################################################################### database config # Uncomment the rootpw line to allow binding as the cn=config # rootdn so that temporary modifications to the configuration can be made # while slapd is running. They will not persist across a restart. # rootpw secret ####################################################################### # MDB database definitions ####################################################################### database mdb maxsize 1073741824 suffix "dc=my-domain,dc=com" rootdn "cn=Manager,dc=my-domain,dc=com" # Cleartext passwords, especially for the rootdn, should # be avoid. See slappasswd(8) and slapd.conf(5) for details. # Use of strong authentication encouraged. rootpw secret # The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd and slap tools. # Mode 700 recommended. directory /var/lib/openldap/openldap-data # Indices to maintain index objectClass eq ####################################################################### # monitor database definitions ####################################################################### database monitor
Folgende Anpassungen der Konfigurationsdatei /etc/openldap/sldap.conf
genügen, um grundsätzlich die grundlegenden Einstellungen für den Betrieb eines LDAP-Server bereitzustellen:
# # See slapd.conf(5) for details on configuration options. # This file should NOT be world readable. # include /etc/openldap/schema/core.schema # Define global ACLs to disable default read access. # Do not enable referrals until AFTER you have a working directory # service AND an understanding of referrals. #referral ldap://root.openldap.org pidfile /run/openldap/slapd.pid argsfile /run/openldap/slapd.args # Load dynamic backend modules: modulepath /usr/lib/openldap moduleload back_mdb.la # moduleload back_ldap.la # Sample security restrictions # Require integrity protection (prevent hijacking) # Require 112-bit (3DES or better) encryption for updates # Require 63-bit encryption for simple bind # security ssf=1 update_ssf=112 simple_bind=64 # Sample access control policy: # Root DSE: allow anyone to read it # Subschema (sub)entry DSE: allow anyone to read it # Other DSEs: # Allow self write access # Allow authenticated users read access # Allow anonymous users to authenticate # Directives needed to implement policy: # access to dn.base="" by * read # access to dn.base="cn=Subschema" by * read # access to * # by self write # by users read # by anonymous auth # # if no access controls are present, the default policy # allows anyone and everyone to read anything but restricts # updates to rootdn. (e.g., "access to * by * read") # # rootdn can always read and write EVERYTHING! ####################################################################### # config database definitions ####################################################################### database config # Uncomment the rootpw line to allow binding as the cn=config # rootdn so that temporary modifications to the configuration can be made # while slapd is running. They will not persist across a restart. # rootpw secret ####################################################################### # MDB database definitions ####################################################################### database mdb maxsize 1073741824 # Tachtler # default: suffix "dc=my-domain,dc=com" suffix "dc=tachtler,dc=net" # Tachtler # default: rootdn "cn=Manager,dc=my-domain,dc=com" rootdn "cn=Manager,dc=tachtler,dc=net" # Cleartext passwords, especially for the rootdn, should # be avoid. See slappasswd(8) and slapd.conf(5) for details. # Use of strong authentication encouraged. # Tachtler # default: rootpw secret rootpw {SSHA}t9RX1sH1NkqgkuBWzZIkiS+Aqkk2i3ms # The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd and slap tools. # Mode 700 recommended. directory /var/lib/openldap/openldap-data # Indices to maintain index objectClass eq ####################################################################### # monitor database definitions ####################################################################### database monitor
Erklärungen:
suffix "dc=tachtler,dc=net"
Der Parameter suffix
(Database) dient der Definition der BaseDN. Die BaseDN (DN = Distinguished Name) beschreibt die Top Level Domain (TLD) oder auch Basis, den „höchsten“ sichtbaren Punkt des DIT (Directory Information Tree), von dem aus auf alle anderen Bereiche verzweigt wird. Die Direktive ist immer mit der jeweiligen Datenbank verknüpft. Das Suffix besteht mindestens aus einer oder mehr Komponenten. Beispiel: o=domain,c=de
, wobei o für organization und c für country steht.
HINWEIS - Nachfolgend soll jedoch dc (dc = domain component) und die TLD (Top Level Domain) bzw. BaseDN zur Anwendung kommen.
rootdn "cn=Manager,dc=tachtler,dc=net"
Der Parameter rootdn
(Database) legt den DN des LDAP-Administrators „statisch“ in der LDAP-Serverkonfiguration fest. Hierbei wird kein bestehender System-Account verwendet (was aufgrund der geforderten DN-Syntax ohnehin nicht möglich wäre), sondern ein in der /etc/openldap/sldap.conf
-Konfiguration statisch fest gelegtes Konto, welches stets den vollen Zugriff auf den DIT hat. Der rootdn
darf somit standardmäßig, jederzeit alle administrativen Tätigkeiten am OpenLDAP-Server durchführen. Das komplette rootdn
-Statement muss sich immer auf den tatsächlich verwendeten suffix
(hier: dc=tachtler,dc=net
) beziehen!
rootpw {SSHA}t9RX1sH1NkqgkuBWzZIkiS+Aqkk2i3ms
Der Parameter rootpw
(Database) dient, der Definition des Passworts für den zuvor beschriebenen rootdn
. Zur Generierung des Passworts stehen mehrere kryptographische Methoden zur Verfügung. Auch ein Klartext-Passwort wäre möglich, ist allerdings sicherheitstechnisch nicht zu empfehlen. Nachfolgend soll mit Hilfe des Programms /usr/sbin/slappasswd
ein verschlüsseltges Passwort mit einem der nachfolgenden Verschlüsselungsverfahren generiert werden - z.B. CRYPT, SHA, SSHA oder (eher nicht) MD5.
# slappasswd -v -h {SSHA} New password: Re-enter new password: {SSHA}t9RX1sH1NkqgkuBWzZIkiS+Aqkk2i3ms
Erster Start
Bevor weitere Konfigurationsschritte erfolgen, sollte dem ersten Start nichts im Wege stehen, da bereits hier Konfigurationseinstellungen durchgeführt werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl start slapd.service
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !
Ob der OpenLDAP-Server, sprich der slapd
-Dienst/Daemon auch tatsächlich als Hintergrundprozess läuft, kann mit nachfolgendem Befehl überprüft werden (Es sollte eine Ausgabe wie nachfolgend dargestellt erfolgen - es kommt auf die zweite Zeile an!):
# ps auxwf | grep slapd root 1341 0.0 0.1 6992 2440 pts/0 S+ 10:14 0:00 \_ grep slapd ldap 1338 0.1 0.7 1085664 15064 ? Ssl 10:14 0:00 /usr/lib/slapd -d 0 -u ldap -g ldap -h ldap:/// ldapi:///
und nachfolgender Befehl:
# ss -tulpen | grep slapd tcp LISTEN 0 2048 0.0.0.0:389 0.0.0.0:* users:(("slapd",pid=1338,fd=7)) ino:25022 sk:4 cgroup:/system.slice/slapd.service <-> tcp LISTEN 0 2048 [::]:389 [::]:* users:(("slapd",pid=1338,fd=8)) ino:25023 sk:7 cgroup:/system.slice/slapd.service v6only:1 <-> 16944/slapd
bzw. nachfolgender Befehl:
# systemctl status slapd.service ● slapd.service - OpenLDAP Server Daemon Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor pre> Active: active (running) since Wed 2022-03-23 10:14:21 CET; 1min 6s ago Docs: man:slapd man:slapd-config man:slapd-mdb Main PID: 1338 (slapd) Tasks: 2 (limit: 2340) Memory: 7.6M CPU: 17ms CGroup: /system.slice/slapd.service └─1338 /usr/lib/slapd -d 0 -u ldap -g ldap -h "ldap:/// ldapi:///" Mar 23 10:14:21 server systemd[1]: Starting OpenLDAP Server Daemon... Mar 23 10:14:21 server slapd[1338]: @(#) $OpenLDAP: slapd 2.6.1 (Jan 20 2022 19> openldap Mar 23 10:14:21 server slapd[1338]: slapd starting Mar 23 10:14:21 server systemd[1]: Started OpenLDAP Server Daemon.
Eine weitere Überprüfung, ob der erste Start erfolgreich war, kann durch Einsicht in das Journal von systemd
mit nachfolgendem Befehl, die Ausgabe sollte wie nachfolgend dargestellt aussehen:
# journalctl -u slapd.service Mar 23 10:14:21 server systemd[1]: Starting OpenLDAP Server Daemon... Mar 23 10:14:21 server slapd[1338]: @(#) $OpenLDAP: slapd 2.6.1 (Jan 20 2022 19> openldap Mar 23 10:14:21 server slapd[1338]: slapd starting Mar 23 10:14:21 server systemd[1]: Started OpenLDAP Server Daemon.
Durch nachfolgenden Befehl, kann das Verzeichnis in dem die MDB transactional database library-Datenbank standardmässig die Dateien der Datenbank des OpenLDAP-Servers ablegt, angezeigt werden. Die Ausgabe sollte in etwa wie nachfolgend gezeigt aussehen:
# ls -l /var/lib/openldap/openldap-data total 16 -rw------- 1 ldap ldap 12288 Mar 23 10:14 data.mdb -rw------- 1 ldap ldap 8192 Mar 23 10:14 lock.mdb
Erster Stopp
Bevor weitere Konfigurationsschritte erfolgen, muss der OpenLDAP-Server gestoppt werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl stop slapd.service
Eine Überprüfung, ob der OpenLDAP-Server wirklich nicht mehr läuft und gestoppt wurde, kann mit nachfolgendem Befehl durchgeführt werden:
# systemctl status slapd.service ○ slapd.service - OpenLDAP Server Daemon Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor pre> Active: inactive (dead) since Wed 2022-03-23 10:42:24 CET; 9s ago Docs: man:slapd man:slapd-config man:slapd-mdb Process: 1338 ExecStart=/usr/lib/slapd -d 0 -u ldap -g ldap -h ${SLAPD_URLS> Main PID: 1338 (code=exited, status=0/SUCCESS) CPU: 25ms Mar 23 10:14:21 server slapd[1338]: slapd starting Mar 23 10:14:21 server systemd[1]: Started OpenLDAP Server Daemon. Mar 23 10:42:24 server slapd[1338]: daemon: shutdown requested and initiated. Mar 23 10:42:24 server slapd[1338]: slapd shutdown: waiting for 0 operations/ta> Mar 23 10:42:24 server systemd[1]: Stopping OpenLDAP Server Daemon... Mar 23 10:42:24 server slapd[1338]: DIGEST-MD5 common mech free Mar 23 10:42:24 server systemd[1]: slapd.service: Deactivated successfully. Mar 23 10:42:24 server slapd[1338]: DIGEST-MD5 common mech free Mar 23 10:42:24 server systemd[1]: Stopped OpenLDAP Server Daemon. Mar 23 10:42:24 server slapd[1338]: slapd stopped.
Online-Konfiguration
Seit OpenLDAP Version 2.3 gibt es eine grundlegende Veränderung gegenüber vorherigen Versionen.
Neu ist die Möglichkeit der „Online“-Konfiguration zur Laufzeit. Bei Verwendung einer „statischen“ Konfigurationsdatei - /etc/openldap/sldap.conf
- ist bei jeder Änderung an dieser Konfigurationsdatei ein Neustart des OpenLDAP-Daemons/Dienstes slapd.service
erforderlich, damit der Daemon/Dienst die Änderung anwenden kann.
Dieses Verhalten wurde komplett geändert, so dass ab Version 2.3 fast alle Änderungen an den Konfigurationsparametern ohne Neustart des OpenLDAP-Daemons/Dienstes slapd.service
übernommen werden können.
Vorbereitung: slapd.ldif
Bevor mit Änderungen an der Konfigurationsdatei
/etc/openldap/slapd.ldif
- Server-Online-Konfigurationsdatei
begonnen werden soll, kann mit nachfolgenden Befehlen eine Sicherung der Konfigurationsdatei angefertigt werden:
# cp -a /etc/openldap/slapd.ldif /etc/openldap/slapd.ldif.save
/etc/openldap/slapd.d
Nachfolgendes Verzeichnis, welches nach der Installation grundsätzlich nicht existiert, muss mit nachfolgenden Befehlen neu erstellt werden und mit den entsprechenden Besitz- und Datei-rechten versehen werden, wie nachfolgend dargestellt:
Neuanlage des Verzeichnisses: /etc/openldap/slapd.d
# mkdir /etc/openldap/slapd.d
Setzen der entsprechenden Besitzrechte:
# chown ldap:ldap /etc/openldap/slapd.d
Setzen der entsprechenden Dateirechte:
# chmod 700 /etc/openldap/slapd.d
/etc/openldap/slapd.ldif
Ab der OpenLDAP-Version 2.3 bietet OpenLDAP zusätzlich die Option die Konfiguration zur Laufzeit zu verwalten und nicht mehr in einer „statischen“ Konfigurationsdatei.
Die Konfigurationsdatei /etc/openldap/sldap.ldif
ist grundsätzlich in drei Sektionen unterteilt:
- Globale Direktiven
- Backend Direktiven
- Database-spezifische Direktiven
wobei Backend- und zugehörige Database-spezifische Direktiven mehrfach konfiguriert werden können.
Die Server-Online-Konfigurationsdatei /etc/openldap/sldap.ldif
dient zur Konfiguration des Server. Dies ist die Standard-Online-Konfigurationsdatei:
# # See slapd-config(5) for details on configuration options. # This file should NOT be world readable. # dn: cn=config objectClass: olcGlobal cn: config # # # Define global ACLs to disable default read access. # olcArgsFile: /run/openldap/slapd.args olcPidFile: /run/openldap/slapd.pid # # Do not enable referrals until AFTER you have a working directory # service AND an understanding of referrals. #olcReferral: ldap://root.openldap.org # # Sample security restrictions # Require integrity protection (prevent hijacking) # Require 112-bit (3DES or better) encryption for updates # Require 64-bit encryption for simple bind #olcSecurity: ssf=1 update_ssf=112 simple_bind=64 # # Load dynamic backend modules: # dn: cn=module,cn=config objectClass: olcModuleList cn: module olcModulepath: /usr/lib/openldap olcModuleload: back_mdb.la #olcModuleload: back_ldap.la #olcModuleload: back_passwd.la dn: cn=schema,cn=config objectClass: olcSchemaConfig cn: schema include: file:///etc/openldap/schema/core.ldif # Frontend settings # dn: olcDatabase=frontend,cn=config objectClass: olcDatabaseConfig objectClass: olcFrontendConfig olcDatabase: frontend # # Sample global access control policy: # Root DSE: allow anyone to read it # Subschema (sub)entry DSE: allow anyone to read it # Other DSEs: # Allow self write access # Allow authenticated users read access # Allow anonymous users to authenticate # #olcAccess: to dn.base="" by * read #olcAccess: to dn.base="cn=Subschema" by * read #olcAccess: to * # by self write # by users read # by anonymous auth # # if no access controls are present, the default policy # allows anyone and everyone to read anything but restricts # updates to rootdn. (e.g., "access to * by * read") # # rootdn can always read and write EVERYTHING! # ####################################################################### # LMDB database definitions ####################################################################### # dn: olcDatabase=mdb,cn=config objectClass: olcDatabaseConfig objectClass: olcMdbConfig olcDatabase: mdb olcDbMaxSize: 1073741824 olcSuffix: dc=my-domain,dc=com olcRootDN: cn=Manager,dc=my-domain,dc=com # Cleartext passwords, especially for the rootdn, should # be avoided. See slappasswd(8) and slapd-config(5) for details. # Use of strong authentication encouraged. olcRootPW: secret # The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd and slap tools. # Mode 700 recommended. olcDbDirectory: /var/lib/openldap/openldap-data # Indices to maintain olcDbIndex: objectClass eq dn: olcDatabase=monitor,cn=config objectClass: olcDatabaseConfig olcDatabase: monitor olcRootDN: cn=config olcMonitoring: FALSE
Folgende Anpassungen der Online-Konfigurationsdatei /etc/openldap/sldap.ldif
genügen, um grundsätzlich die grundlegenden Einstellungen für den Betrieb eines LDAP-Server mit Online-Konfigurationsdatei bereitzustellen:
# # See slapd-config(5) for details on configuration options. # This file should NOT be world readable. # dn: cn=config objectClass: olcGlobal cn: config # # # Define global ACLs to disable default read access. # olcArgsFile: /run/openldap/slapd.args # Tachtler - NEW - olcIdleTimeout: 15 olcPidFile: /run/openldap/slapd.pid # # Do not enable referrals until AFTER you have a working directory # service AND an understanding of referrals. # Tachtler # default: #olcReferral: ldap://root.openldap.org olcReferral: ldap://ldap.idmz.tachtler.net # # Sample security restrictions # Require integrity protection (prevent hijacking) # Require 112-bit (3DES or better) encryption for updates # Require 64-bit encryption for simple bind #olcSecurity: ssf=1 update_ssf=112 simple_bind=64 # # Load dynamic backend modules: # dn: cn=module,cn=config objectClass: olcModuleList cn: module olcModulepath: /usr/lib/openldap olcModuleload: back_mdb.la #olcModuleload: back_ldap.la #olcModuleload: back_passwd.la dn: cn=schema,cn=config objectClass: olcSchemaConfig cn: schema include: file:///etc/openldap/schema/core.ldif # Tachtler - NEW - include: file:///etc/openldap/schema/cosine.ldif include: file:///etc/openldap/schema/inetorgperson.ldif include: file:///etc/openldap/schema/nis.ldif # Frontend settings # dn: olcDatabase=frontend,cn=config objectClass: olcDatabaseConfig objectClass: olcFrontendConfig olcDatabase: frontend # # Sample global access control policy: # Root DSE: allow anyone to read it # Subschema (sub)entry DSE: allow anyone to read it # Other DSEs: # Allow self write access # Allow authenticated users read access # Allow anonymous users to authenticate # #olcAccess: to dn.base="" by * read #olcAccess: to dn.base="cn=Subschema" by * read #olcAccess: to * # by self write # by users read # by anonymous auth # # if no access controls are present, the default policy # allows anyone and everyone to read anything but restricts # updates to rootdn. (e.g., "access to * by * read") # # rootdn can always read and write EVERYTHING! # ####################################################################### # Tachtler - NEW - ####################################################################### # dn: olcDatabase=config,cn=config objectClass: olcDatabaseConfig olcDatabase: config olcRootDN: cn=config olcRootPW: {SSHA}t9RX1sH1NkqgkuBWzZIkiS+Aqkk2i3ms ####################################################################### # LMDB database definitions ####################################################################### # dn: olcDatabase=mdb,cn=config objectClass: olcDatabaseConfig objectClass: olcMdbConfig olcDatabase: mdb olcDbMaxSize: 1073741824 # Tachtler # default: olcSuffix: dc=my-domain,dc=com olcSuffix: dc=tachtler,dc=net # Tachtler # default: olcRootDN: cn=Manager,dc=my-domain,dc=com olcRootDN: cn=Manager,dc=tachtler,dc=net # Cleartext passwords, especially for the rootdn, should # be avoided. See slappasswd(8) and slapd-config(5) for details. # Use of strong authentication encouraged. # Tachtler # default: olcRootPW: secret olcRootPW: {SSHA}t9RX1sH1NkqgkuBWzZIkiS+Aqkk2i3ms # The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd and slap tools. # Mode 700 recommended. olcDbDirectory: /var/lib/openldap/openldap-data # Indices to maintain olcDbIndex: objectClass eq # Tachtler - NEW - olcDbIndex: uid pres,eq olcDbIndex: mail pres,sub,eq olcDbIndex: cn,sn pres,sub,eq olcDbIndex: dc eq dn: olcDatabase=monitor,cn=config objectClass: olcDatabaseConfig olcDatabase: monitor olcRootDN: cn=config olcMonitoring: FALSE
Erklärungen:
# Tachtler - NEW - olcIdleTimeout: 15
Der Parameter olcIdleTimeout
beendet nach dem angegebenen Wert in Sekunden die Verbindung zum Client, wenn diese innerhalb der angegebenen Zeit keine Aktivitäten mehr zeigt.
olcReferral: ldap://ldap.idmz.tachtler.net
Der Parameter olcReferral
definiert die zurückgelieferte URL, wenn der OpenLDAP-Server keine lokale Datenbank findet, um die Anfrage zu beantworten.
# Tachtler - NEW - include: file:///etc/openldap/schema/cosine.ldif include: file:///etc/openldap/schema/inetorgperson.ldif include: file:///etc/openldap/schema/nis.ldif
Die include-Direktive (global) dient hier der Integration von Schemadateien, welche bestimmte Objektklassen und Attribute zur Verfügung stellen. Bei der Einbindung der Schemas sind zudem folgende Punkte von absoluter Wichtigkeit:
- Die Reihenfolge, in der die Schemas eingebunden werden (Stichwort: Vererbung!)
- Bei Replikation eine identische Reihenfolge der Include-Statements für die
Schemadateien auf Primary- und Secondary-Server
- Bei Replikation sind unbedingt identische Versionen der Schemas auf Primary- und Secondary-Server erforderlich . Seit OpenLDAP-Version 2.4 ist mit Hilfe der Online-Konfiguration auch die Replikation der Schemas selbst möglich, was eine deutliche administrative Vereinfachung darstellt.
####################################################################### # Tachtler - NEW - ####################################################################### # dn: olcDatabase=config,cn=config objectClass: olcDatabaseConfig olcDatabase: config olcRootDN: cn=config olcRootPW: {SSHA}t9RX1sH1NkqgkuBWzZIkiS+Aqkk2i3ms
Hier wird das Passwort für den olcRootDN: cn=config
(Config) gesetzt, da sonst keine Änderungen an der Konfiguration möglich sind!
Der Parameter olcRootPW
(Database) dient, der Definition des Passworts für den zuvor beschriebenen rootdn
. Zur Generierung des Passworts stehen mehrere kryptographische Methoden zur Verfügung. Auch ein Klartext-Passwort wäre möglich, ist allerdings sicherheitstechnisch nicht zu empfehlen. Nachfolgend soll mit Hilfe des Programms /usr/sbin/slappasswd
ein verschlüsseltges Passwort mit einem der nachfolgenden Verschlüsselungsverfahren generiert werden - z.B. CRYPT, SHA, SSHA oder (eher nicht) MD5.
# slappasswd -v -h {SSHA} New password: Re-enter new password: {SSHA}t9RX1sH1NkqgkuBWzZIkiS+Aqkk2i3ms
HINWEIS - Dies ist extrem wichtig!
olcSuffix: dc=tachtler,dc=net
Der Parameter olcSuffix
(Database) dient der Definition der BaseDN. Die BaseDN (DN = Distinguished Name) beschreibt die Top Level Domain (TLD) oder auch Basis, den „höchsten“ sichtbaren Punkt des DIT (Directory Information Tree), von dem aus auf alle anderen Bereiche verzweigt wird. Die Direktive ist immer mit der jeweiligen Datenbank verknüpft. Das Suffix besteht mindestens aus einer oder mehr Komponenten. Beispiel: o=domain,c=de
, wobei o für organization und c für country steht.
HINWEIS - Nachfolgend soll jedoch dc (dc = domain component) und die TLD (Top Level Domain) bzw. BaseDN zur Anwendung kommen.
olcRootDN: cn=Manager,dc=tachtler,dc=net
Der Parameter olcRootDN
(Database) legt den DN des LDAP-Administrators „statisch“ in der LDAP-Serverkonfiguration fest. Hierbei wird kein bestehender System-Account verwendet (was aufgrund der geforderten DN-Syntax ohnehin nicht möglich wäre), sondern ein in der /etc/openldap/sldap.conf
-Konfiguration statisch fest gelegtes Konto, welches stets den vollen Zugriff auf den DIT hat. Der rootdn
darf somit standardmäßig, jederzeit alle administrativen Tätigkeiten am OpenLDAP-Server durchführen. Das komplette rootdn
-Statement muss sich immer auf den tatsächlich verwendeten suffix
(hier: dc=tachtler,dc=net
) beziehen!
olcRootPW: {SSHA}t9RX1sH1NkqgkuBWzZIkiS+Aqkk2i3ms
Der Parameter olcRootPW
(Database) dient, der Definition des Passworts für den zuvor beschriebenen rootdn
. Zur Generierung des Passworts stehen mehrere kryptographische Methoden zur Verfügung. Auch ein Klartext-Passwort wäre möglich, ist allerdings sicherheitstechnisch nicht zu empfehlen. Nachfolgend soll mit Hilfe des Programms /usr/sbin/slappasswd
ein verschlüsseltges Passwort mit einem der nachfolgenden Verschlüsselungsverfahren generiert werden - z.B. CRYPT, SHA, SSHA oder (eher nicht) MD5.
# slappasswd -v -h {SSHA} New password: Re-enter new password: {SSHA}t9RX1sH1NkqgkuBWzZIkiS+Aqkk2i3ms
# Tachtler - NEW - olcDbIndex: uid pres,eq olcDbIndex: mail pres,sub,eq olcDbIndex: cn,sn pres,sub,eq olcDbIndex: dc eq
Bei Datenbanken sollten häufig benutzte bzw. gesuchte Attribute indexiert werden. Hierzu kann die Datenbank ein Indexfeld für das entsprechende Attribut erstellen. Suchvorgänge für dieses Attribut werden so deutlich beschleunigt.
Import: /etc/openldap/slapd.ldif
Bevor weitere Konfigurationsschritte erfolgen, muss der OpenLDAP-Server gestoppt werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl stop slapd.service
Eine Überprüfung, ob der OpenLDAP-Server wirklich nicht mehr läuft und gestoppt wurde, kann mit nachfolgendem Befehl durchgeführt werden:
# systemctl status slapd.service ○ slapd.service - OpenLDAP Server Daemon Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor pre> Active: inactive (dead) since Wed 2022-03-23 10:42:24 CET; 9s ago Docs: man:slapd man:slapd-config man:slapd-mdb Process: 1338 ExecStart=/usr/lib/slapd -d 0 -u ldap -g ldap -h ${SLAPD_URLS> Main PID: 1338 (code=exited, status=0/SUCCESS) CPU: 25ms Mar 23 10:14:21 server slapd[1338]: slapd starting Mar 23 10:14:21 server systemd[1]: Started OpenLDAP Server Daemon. Mar 23 10:42:24 server slapd[1338]: daemon: shutdown requested and initiated. Mar 23 10:42:24 server slapd[1338]: slapd shutdown: waiting for 0 operations/ta> Mar 23 10:42:24 server systemd[1]: Stopping OpenLDAP Server Daemon... Mar 23 10:42:24 server slapd[1338]: DIGEST-MD5 common mech free Mar 23 10:42:24 server systemd[1]: slapd.service: Deactivated successfully. Mar 23 10:42:24 server slapd[1338]: DIGEST-MD5 common mech free Mar 23 10:42:24 server systemd[1]: Stopped OpenLDAP Server Daemon. Mar 23 10:42:24 server slapd[1338]: slapd stopped.
HINWEIS - Der Server muss gestoppt sein!
Nachfolgender Befehl importiert nun die Online-Server–Konfiguration, als Benutzer ldap
, so wie die einzelnen Parameter in der Online-Server-Konfigurationsdatei - /etc/openldap/slapd.ldif
- gesetzt worden sind:
# sudo -u ldap slapadd -v -n 0 -F /etc/openldap/slapd.d/ -l /etc/openldap/slapd.ldif added: "cn=config" (00000001) added: "cn=module{0},cn=config" (00000001) added: "cn=schema,cn=config" (00000001) added: "cn={0}core,cn=schema,cn=config" (00000001) added: "cn={1}cosine,cn=schema,cn=config" (00000001) added: "cn={2}inetorgperson,cn=schema,cn=config" (00000001) added: "cn={3}nis,cn=schema,cn=config" (00000001) added: "olcDatabase={-1}frontend,cn=config" (00000001) added: "olcDatabase={0}config,cn=config" (00000001) added: "olcDatabase={1}mdb,cn=config" (00000001) added: "olcDatabase={2}monitor,cn=config" (00000001) Closing DB...
Zusätzlich zur Ausgabe der einzelnen Schritte während der Befehlsausführung, kann mit nachfolgendem Befehl zusätzlich überprüft werden, ob im Verzeichnis
/etc/openldap/slapd.d
nachfolgendes Verzeichnis und nachfolgende Datei erstellt worden sind:
# ls -l /etc/openldap/slapd.d/ total 4 drwxr-x--- 1 ldap ldap 290 Mar 23 13:48 'cn=config' -rw------- 1 ldap ldap 440 Mar 23 13:48 'cn=config.ldif'
Start: Online-Konfiguration
Bevor weitere Konfigurationsschritte erfolgen, sollte dem ersten Start mit der Online-Server-Konfiguration nichts im Wege stehen, da bereits hier Konfigurationseinstellungen durchgeführt wurden, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl start slapd.service
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !
Ob der OpenLDAP-Server, sprich der slapd
-Dienst/Daemon auch tatsächlich als Hintergrundprozess läuft, kann mit nachfolgendem Befehl überprüft werden (Es sollte eine Ausgabe wie nachfolgend dargestellt erfolgen - es kommt auf die zweite Zeile an!):
# ps auxwf | grep slapd root 1615 0.0 0.1 6992 2652 pts/0 S+ 13:55 0:00 \_ grep slapd ldap 1610 0.1 0.7 1086708 15072 ? Ssl 13:55 0:00 /usr/lib/slapd -d 0 -u ldap -g ldap -h ldap:/// ldapi:///
und nachfolgender Befehl:
# ss -tulpen | grep slapd tcp LISTEN 0 2048 0.0.0.0:389 0.0.0.0:* users:(("slapd",pid=1610,fd=7)) ino:27556 sk:4 cgroup:/system.slice/slapd.service <-> tcp LISTEN 0 2048 [::]:389 [::]:* users:(("slapd",pid=1610,fd=8)) ino:27557 sk:7 cgroup:/system.slice/slapd.service v6only:1 <->
bzw. nachfolgender Befehl:
# systemctl status slapd.service ● slapd.service - OpenLDAP Server Daemon Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor pre> Active: active (running) since Wed 2022-03-23 13:55:35 CET; 41s ago Docs: man:slapd man:slapd-config man:slapd-mdb Main PID: 1610 (slapd) Tasks: 2 (limit: 2340) Memory: 3.3M CPU: 15ms CGroup: /system.slice/slapd.service └─1610 /usr/lib/slapd -d 0 -u ldap -g ldap -h "ldap:/// ldapi:///" Mar 23 13:55:35 server systemd[1]: Starting OpenLDAP Server Daemon... Mar 23 13:55:35 server slapd[1610]: @(#) $OpenLDAP: slapd 2.6.1 (Jan 20 2022 19> openldap Mar 23 13:55:35 server systemd[1]: Started OpenLDAP Server Daemon. Mar 23 13:55:35 server slapd[1610]: slapd starting
Eine weitere Überprüfung, ob der erste Start erfolgreich war, kann durch Einsicht in das Journal von systemd
mit nachfolgendem Befehl, die Ausgabe sollte wie nachfolgend dargestellt aussehen:
# journalctl -u slapd.service Mar 23 13:25:10 server slapd[424]: daemon: shutdown requested and initiated. Mar 23 13:25:10 server systemd[1]: Stopping OpenLDAP Server Daemon... Mar 23 13:25:10 server slapd[424]: slapd shutdown: waiting for 0 operations/tas> Mar 23 13:25:10 server slapd[424]: DIGEST-MD5 common mech free Mar 23 13:25:10 server slapd[424]: DIGEST-MD5 common mech free Mar 23 13:25:10 server slapd[424]: slapd stopped. Mar 23 13:25:10 server systemd[1]: slapd.service: Deactivated successfully. Mar 23 13:25:10 server systemd[1]: Stopped OpenLDAP Server Daemon. Mar 23 13:55:35 server systemd[1]: Starting OpenLDAP Server Daemon... Mar 23 13:55:35 server slapd[1610]: @(#) $OpenLDAP: slapd 2.6.1 (Jan 20 2022 19> openldap Mar 23 13:55:35 server systemd[1]: Started OpenLDAP Server Daemon. Mar 23 13:55:35 server slapd[1610]: slapd starting
Mit nachfolgendem Befehlen kann überprüft werden, ob der OpenLDAP-Server, sprich der slapd
-Dienst/Daemon auch Anfragen beantworten kann:
# ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts # extended LDIF # # LDAPv3 # base <> with scope baseObject # filter: (objectclass=*) # requesting: namingContexts # # dn: namingContexts: dc=tachtler,dc=net # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Abfrage der „globalen“ Konfigurationseinstellungen:
# ldapsearch -H ldapi:/// -W -x -D cn=config -b cn=config "(objectclass=olcGlobal)" Enter LDAP Password: # extended LDIF # # LDAPv3 # base <cn=config> with scope subtree # filter: (objectclass=olcGlobal) # requesting: ALL # # config dn: cn=config objectClass: olcGlobal cn: config olcArgsFile: /run/openldap/slapd.args olcIdleTimeout: 15 olcPidFile: /run/openldap/slapd.pid olcReferral: ldap://ldap.idmz.tachtler.net # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Abfrage der „einzelnen Datenbank“ Konfigurationseinstellungen:
# ldapsearch -H ldapi:/// -W -x -D cn=config -b cn=config "(objectclass=olcDatabaseConfig)" Enter LDAP Password: # extended LDIF # # LDAPv3 # base <cn=config> with scope subtree # filter: (objectclass=olcDatabaseConfig) # requesting: ALL # # {-1}frontend, config dn: olcDatabase={-1}frontend,cn=config objectClass: olcDatabaseConfig objectClass: olcFrontendConfig olcDatabase: {-1}frontend # {0}config, config dn: olcDatabase={0}config,cn=config objectClass: olcDatabaseConfig olcDatabase: {0}config olcRootDN: cn=config olcRootPW: {SSHA}t9RX1sH1NkqgkuBWzZIkiS+Aqkk2i3ms # {1}mdb, config dn: olcDatabase={1}mdb,cn=config objectClass: olcDatabaseConfig objectClass: olcMdbConfig olcDatabase: {1}mdb olcDbDirectory: /var/lib/openldap/openldap-data olcSuffix: dc=tachtler,dc=net olcRootDN: cn=Manager,dc=tachtler,dc=net olcRootPW: {SSHA}t9RX1sH1NkqgkuBWzZIkiS+Aqkk2i3ms olcDbIndex: objectClass eq olcDbMaxSize: 1073741824 # {2}monitor, config dn: olcDatabase={2}monitor,cn=config objectClass: olcDatabaseConfig olcDatabase: {2}monitor olcRootDN: cn=config olcMonitoring: FALSE # search result search: 2 result: 0 Success # numResponses: 5 # numEntries: 4
Übersicht: Online-Konfiguration
Die slapd-Konfiguration wird in einem speziellen LDAP-Verzeichnis mit einem vordefinierten Schema und DIT gespeichert. Es gibt spezifische Objektklassen, die für globale Konfigurationsoptionen, Schemadefinitionen, Backend- und Datenbankdefinitionen und verschiedene andere Elemente verwendet werden
* Quelle: OpenLDAP Admin Guide - 5. Configuring slapd - 5.1. Configuration Layout
/etc/openldap/slapd.d/cn=config.ldif
Die Konfigurationsdatei
/etc/openldap/slapd.d/cn=config.ldif
stellt die Hauptkonfigurationsdatei des OpenLDAP-Servers dar und beinhaltet die globalen Konfigurationen.
WICHTIG - Es sollten KEINE Änderungen durch manuelle Ergänzungen durchgeführt werden !!!
Eine Abfrage der Konfiguration, welche mit nachfolgendem Befehl durchgeführt werden kann, sollte eine Ausgabe in etwa wie die nachfolgende zum Vorschein bringen:
# cat /etc/openldap/slapd.d/cn=config.ldif
# cat /etc/openldap/slapd.d/cn=config.ldif # AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. # CRC32 0e9fdd41 dn: cn=config objectClass: olcGlobal cn: config olcArgsFile: /run/openldap/slapd.args olcIdleTimeout: 15 olcPidFile: /run/openldap/slapd.pid olcReferral: ldap://ldap.idmz.tachtler.net structuralObjectClass: olcGlobal entryUUID: 4dbb57f1-9f4b-4844-9283-10c3e337c797 creatorsName: cn=config createTimestamp: 20220323193424Z entryCSN: 20220323193424.170399Z#000000#000#000000 modifiersName: cn=config modifyTimestamp: 20220323193424Z
oder mit nachfolgender Abfrage:
# ldapsearch -H ldapi:/// -W -x -D cn=config -b cn=config "(objectclass=olcGlobal)"
# ldapsearch -H ldapi:/// -W -x -D cn=config -b cn=config "(objectclass=olcGlobal)" Enter LDAP Password: # extended LDIF # # LDAPv3 # base <cn=config> with scope subtree # filter: (objectclass=olcGlobal) # requesting: ALL # # config dn: cn=config objectClass: olcGlobal cn: config olcArgsFile: /run/openldap/slapd.args olcIdleTimeout: 15 olcPidFile: /run/openldap/slapd.pid olcReferral: ldap://ldap.idmz.tachtler.net # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
/etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif
Die Konfigurationsdatei
/etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif
stellt die Hauptkonfigurationsdatei des OpenLDAP-Servers dar und beinhaltet die expliziten Konfigurationen.
WICHTIG - Es sollten KEINE Änderungen durch manuelle Ergänzungen durchgeführt werden !!!
Eine Abfrage der Konfiguration, welche mit nachfolgendem Befehl durchgeführt werden kann, sollte eine Ausgabe in etwa wie die nachfolgende zum Vorschein bringen:
# cat /etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif
# cat /etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif # AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. # CRC32 02141e4e dn: olcDatabase={0}config objectClass: olcDatabaseConfig olcDatabase: {0}config olcRootDN: cn=config olcRootPW:: e1WSMVBKfWIUOHpYNzEsUmklO1U= structuralObjectClass: olcDatabaseConfig entryUUID: 54189746-bcb6-4e79-8251-e6535f9b78ea creatorsName: cn=config createTimestamp: 20220323193424Z entryCSN: 20220323193424.171833Z#000000#000#000000 modifiersName: cn=config modifyTimestamp: 20220323193424Z
oder mit nachfolgender Abfrage:
# ldapsearch -H ldapi:/// -W -x -D cn=config -b olcDatabase={0}config,cn=config
# ldapsearch -H ldapi:/// -W -x -D cn=config -b olcDatabase={0}config,cn=config Enter LDAP Password: # extended LDIF # # LDAPv3 # base <olcDatabase={0}config,cn=config> with scope subtree # filter: (objectclass=*) # requesting: ALL # # {0}config, config dn: olcDatabase={0}config,cn=config objectClass: olcDatabaseConfig olcDatabase: {0}config olcRootDN: cn=config olcRootPW: {SSHA}t9RX1sH1NkqgkuBWzZIkiS+Aqkk2i3ms # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
/etc/openldap/slapd.d/cn=config/olcDatabase={-1}frontend.ldif
Die Konfigurationsdatei
/etc/openldap/slapd.d/cn=config/olcDatabase={-1}frontend.ldif
stellt die Zugriffskonfigurationsdatei des OpenLDAP-Servers dar und beinhaltet die Konfigurationen für den Zugriff.
WICHTIG - Es sollten KEINE Änderungen durch manuelle Ergänzungen durchgeführt werden !!!
Eine Abfrage der Konfiguration, welche mit nachfolgendem Befehl durchgeführt werden kann, sollte eine Ausgabe in etwa wie die nachfolgende zum Vorschein bringen:
# cat /etc/openldap/slapd.d/cn=config/olcDatabase={-1}frontend.ldif
# cat /etc/openldap/slapd.d/cn=config/olcDatabase={-1}frontend.ldif # AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. # CRC32 608e21bf dn: olcDatabase={-1}frontend objectClass: olcDatabaseConfig objectClass: olcFrontendConfig olcDatabase: {-1}frontend structuralObjectClass: olcDatabaseConfig entryUUID: f72271f8-97eb-427c-b627-b6d8c60ab150 creatorsName: cn=config createTimestamp: 20220323193424Z entryCSN: 20220323193424.171691Z#000000#000#000000 modifiersName: cn=config modifyTimestamp: 20220323193424Z
oder mit nachfolgender Abfrage:
# ldapsearch -H ldapi:/// -W -x -D cn=config -b olcDatabase={-1}frontend,cn=config
# ldapsearch -H ldapi:/// -W -x -D cn=config -b olcDatabase={-1}frontend,cn=config Enter LDAP Password: # extended LDIF # # LDAPv3 # base <olcDatabase={-1}frontend,cn=config> with scope subtree # filter: (objectclass=*) # requesting: ALL # # {-1}frontend, config dn: olcDatabase={-1}frontend,cn=config objectClass: olcDatabaseConfig objectClass: olcFrontendConfig olcDatabase: {-1}frontend # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
/etc/openldap/slapd.d/cn=config/olcDatabase={1}mdb.ldif
Die Konfigurationsdatei
/etc/openldap/slapd.d/cn=config/olcDatabase={1}mdb.ldif
stellt die Datenbankkonfiguration des OpenLDAP-Servers dar und beinhaltet die Konfiguration der darunterliegenden Datenbank.
WICHTIG - Es sollten KEINE Änderungen durch manuelle Ergänzungen durchgeführt werden !!!
Eine Abfrage der Konfiguration, welche mit nachfolgendem Befehl durchgeführt werden kann, sollte eine Ausgabe in etwa wie die nachfolgende zum Vorschein bringen:
# cat /etc/openldap/slapd.d/cn=config/olcDatabase={1}mdb.ldif
# cat /etc/openldap/slapd.d/cn=config/olcDatabase={1}mdb.ldif # AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. # CRC32 cc45cb54 dn: olcDatabase={1}mdb objectClass: olcDatabaseConfig objectClass: olcMdbConfig olcDatabase: {1}mdb olcDbDirectory: /var/lib/openldap/openldap-data olcSuffix: dc=tachtler,dc=net olcRootDN: cn=Manager,dc=tachtler,dc=net olcRootPW:: e1WSMVBKfWIUOHpYNzEsUmklO1U= olcDbIndex: objectClass eq olcDbIndex: uid pres,eq olcDbIndex: mail pres,sub,eq olcDbIndex: cn,sn pres,sub,eq olcDbIndex: dc eq olcDbMaxSize: 1073741824 structuralObjectClass: olcMdbConfig entryUUID: d08e17d3-4c14-4348-b4e4-3986d82444b1 creatorsName: cn=config createTimestamp: 20220323193424Z entryCSN: 20220323193424.171974Z#000000#000#000000 modifiersName: cn=config modifyTimestamp: 20220323193424Z
# ldapsearch -H ldapi:/// -W -x -D cn=config -b olcDatabase={1}mdb,cn=config
# ldapsearch -H ldapi:/// -W -x -D cn=config -b olcDatabase={1}mdb,cn=config Enter LDAP Password: # extended LDIF # # LDAPv3 # base <olcDatabase={1}mdb,cn=config> with scope subtree # filter: (objectclass=*) # requesting: ALL # # {1}mdb, config dn: olcDatabase={1}mdb,cn=config objectClass: olcDatabaseConfig objectClass: olcMdbConfig olcDatabase: {1}mdb olcDbDirectory: /var/lib/openldap/openldap-data olcSuffix: dc=tachtler,dc=net olcRootDN: cn=Manager,dc=tachtler,dc=net olcRootPW: {SSHA}t9RX1sH1NkqgkuBWzZIkiS+Aqkk2i3ms olcDbIndex: objectClass eq olcDbIndex: uid pres,eq olcDbIndex: mail pres,sub,eq olcDbIndex: cn,sn pres,sub,eq olcDbIndex: dc eq olcDbMaxSize: 1073741824 # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
/etc/openldap/slapd.d/cn=config/olcDatabase={2}monitor.ldif
Die Konfigurationsdatei
/etc/openldap/slapd.d/cn=config/olcDatabase={2}monitor.ldif
stellt die Selbstüberwachungskonfigurationsdatei des OpenLDAP-Servers dar und beinhaltet die Konfigurationen zur Überwachung und Selbstverwaltung.
WICHTIG - Es sollten KEINE Änderungen durch manuelle Ergänzungen durchgeführt werden !!!
Eine Abfrage der Konfiguration, welche mit nachfolgendem Befehl durchgeführt werden kann, sollte eine Ausgabe in etwa wie die nachfolgende zum Vorschein bringen:
Eine Abfrage der Konfiguration, welche mit nachfolgendem Befehl durchgeführt werden kann, sollte eine Ausgabe in etwa wie die nachfolgende zum Vorschein bringen:
# cat /etc/openldap/slapd.d/cn=config/olcDatabase={2}monitor.ldif
# cat /etc/openldap/slapd.d/cn=config/olcDatabase={2}monitor.ldif # AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. # CRC32 0eb969ee dn: olcDatabase={2}monitor objectClass: olcDatabaseConfig olcDatabase: {2}monitor olcRootDN: cn=config olcMonitoring: FALSE structuralObjectClass: olcDatabaseConfig entryUUID: a38822d2-7cc8-4143-8d12-964392041e2d creatorsName: cn=config createTimestamp: 20220323193424Z entryCSN: 20220323193424.172250Z#000000#000#000000 modifiersName: cn=config modifyTimestamp: 20220323193424Z
# ldapsearch -H ldapi:/// -W -x -D cn=config -b olcDatabase={2}monitor,cn=config
# ldapsearch -H ldapi:/// -W -x -D cn=config -b olcDatabase={2}monitor,cn=config Enter LDAP Password: # extended LDIF # # LDAPv3 # base <olcDatabase={2}monitor,cn=config> with scope subtree # filter: (objectclass=*) # requesting: ALL # # {2}monitor, config dn: olcDatabase={2}monitor,cn=config objectClass: olcDatabaseConfig olcDatabase: {2}monitor olcRootDN: cn=config olcMonitoring: FALSE # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Komplette Konfiguration
Mit nachfolgendem Befehl, kann die komplette Konfiguration, wie sie durch den OpenLDAP-Server selbst verwaltet wird, inklusive aller zur Verwendung kommenden und geladenen Schemata und der vorangegangenen Konfigurationen, ausgegeben werden:
# ldapsearch -H ldapi:/// -W -x -D cn=config -b cn=config
(Nur beispielhafter Ausschnitt)
# ldapsearch -H ldapi:/// -W -x -D cn=config -b cn=config Enter LDAP Password: # extended LDIF # # LDAPv3 # base <cn=config> with scope subtree # filter: (objectclass=*) # requesting: ALL # ... ... ... # numResponses: 9 # numEntries: 8
TLS-Zertifikat erstellen
Um den OpenLDAP-Server nicht nur unverschlüsselt, sondern auch via TLS/StartTLS-Verschlüsselung ansprechen zu können, muss zuerst ein Zertifikat erzeugt werden. Dies kann durch eine offizielle Zertifizierungsstelle durchgeführt werden, was jedoch natürlich mit Kosten verbunden ist, oder es kommt ein sogenanntes Self-Signed-Certificate (Selbst erstelltes/unterschriebenes) Zertifikat zum Einsatz.
Um die Verschlüsselung einsetzen zu können, sind folgende Komponenten erforderlich:
- eine eigen Certificate Authority (CA), welche Self-Signed-Certificate (Selbst erstelltes/unterschriebenes) Zertifikat esrtellen kann
- einen CSR (Certificate Request), welcher von einer Certificate Authority (CA) signiert wird
- einem private key (privaten Schlüssel), welcher zum CRT (Certificate) gehört und zum Einsatz eines CRT (Certificate) benötigt wird
- das CRT (Certificate) selbst, welcher von der Certificate Authority (CA) ausgestellt wird
Zur Erstellung eines Self-Signed-Certificate und zur Erstellung der oben genannten Komponenten, wird das Paket
openssl
benötigt, welches i.d.R. bereits installiert sein sollte.
Abschliessend soll mit nachfolgendem Befehl in das Verzeichnis /etc/ssl
gewechselt werden:
# cd /etc/ssl
/etc/ssl/openssl.cnf
Nachfolgende Anpassungen müssen mindestens in der Konfigurationsdatei /etc/ssl/openssl.cnf
durchgeführt werden, um SAN (Subject Alternative Names) in das Zertifikat mit aufnehmen zu können:
(Nur relevanter Ausschnitt):
[ v3_req ] # Extensions to add to a certificate request basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment # Tachtler - NEW - subjectAltName = @alt_names # Tachtler - NEW - [ alt_names ] DNS.1 = ldap.idmz.tachtler.net DNS.2 = ldap.tachtler.net
* Danke an Stefan Mayr für den Hinweis das Zertifikat mit Subject Alternative Names auszustatten → Hintergrund: Representation and Verification of Domain-Based Application Service Identity within Internet Public Key Infrastructure Using X.509 (PKIX) Certificates in the Context of Transport Layer Security (TLS) - Section 6.4.4
Erstellen CA (Certificate Authority)
Zur Erstellung einer eigene Certificate Authority (CA) kann ein Script, welches bei der Installation von openssl
mitgeliefert wird und sich im Verzeichnis /etc/ssl/misc/
befindet, genutzt werden. Der Name des Scripts lautet
/etc/ssl/misc/CA.pl
.
HINWEIS - Um Subject Alternative Names hinzufügen zu können, muss nachfolgende zweite Ergänzung abgeändert werden, das sonst die -extensions v3_req
NICHT angezogen wird!
HINWEIS - Die zu erstellende Certificate Authority (CA) hat standardmässig eine Laufzeit von 3 Jahren !!!
Falls eine längere Laufzeit als drei Jahre gewünscht sein soll, kann nachfolgender Parameter im Skript, in nachfolgendem Verzeichnis, mit nachfolgendem Namen
/etc/ssl/misc/CA.pl
angepasst werden:
(Nur relevanter Ausschnitt)
... # Tachtler # default: my $DAYS = "-days 365"; my $DAYS = "-days 28402"; # 27.03.2022 - 30.12.2099 # Tachtler # default: my $CADAYS = "-days 1095"; # 3 years my $CADAYS = "-days 28403"; # 27.03.2022 - 31.12.2099 ... ... ... } elsif ($WHAT eq '-sign' ) { $RET = run("$CA -policy policy_anything -out $NEWCERT" # Tachtler # default: . " -infiles $NEWREQ $EXTRA{ca}"); . " -extensions v3_req -infiles $NEWREQ $EXTRA{ca}"); print "Signed certificate is in $NEWCERT\n" if $RET == 0; ...
WICHTIG - Die Laufzeit der Certificate Authority (CA) muss länger als die Laufzeit des Zertifikates sein !!!
Folgender Aufruf erstellt eine eigene Certificate Authority (CA):
HINWEIS - Nicht benötigte Angaben werden mit Eingabe eines Punktes [.] übersprungen!
# /etc/ssl/misc/CA.pl -newca
# /etc/ssl/misc/CA.pl -newca CA certificate filename (or enter to create) Making CA certificate ... ==== openssl req -new -keyout /etc/ssl/private/cakey.pem -out /etc/ssl/careq.pem Generating a RSA private key .............................+++++ ......+++++ writing new private key to '/etc/ssl/private/cakey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:Bavaria (Bayern) Locality Name (eg, city) []:Munich (Muenchen) Organization Name (eg, company) [Internet Widgits Pty Ltd]:tachtler.net Organizational Unit Name (eg, section) []:. Common Name (e.g. server FQDN or YOUR name) []:www.tachtler.net Email Address []:hostmaster@tachtler.net Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:. ==> 0 ==== ==== openssl ca -create_serial -out /etc/ssl/cacert.pem -days 28403 -batch -keyfile /etc/ssl/private/cakey.pem -selfsign -extensions v3_ca -infiles /etc/ssl/careq.pem Using configuration from /etc/ssl/openssl.cnf Enter pass phrase for /etc/ssl/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 58:b7:f2:c0:f9:30:8d:48:4f:77:d3:56:3d:9d:a9:98:19:e6:a2:49 Validity Not Before: Mar 27 10:48:57 2022 GMT Not After : Dec 31 10:48:57 2099 GMT Subject: countryName = DE stateOrProvinceName = Bavaria (Bayern) organizationName = tachtler.net commonName = www.tachtler.net emailAddress = hostmaster@tachtler.net X509v3 extensions: X509v3 Subject Key Identifier: 07:39:3F:8F:38:B5:EA:69:3E:FA:BC:C4:AB:7C:30:18:93:26:B8:77 X509v3 Authority Key Identifier: keyid:07:39:3F:8F:38:B5:EA:69:3E:FA:BC:C4:AB:7C:30:18:93:26:B8:77 X509v3 Basic Constraints: critical CA:TRUE Certificate is to be certified until Dec 31 10:48:57 2099 GMT (28403 days) Write out database with 1 new entries Data Base Updated ==> 0 ==== CA certificate is in /etc/ssl/cacert.pem
Durch ausführen des Skriptes mit nachfolgendem Aufrufparameter /etc/ssl/misc/CA.pl -newca
ist eine neue Verzeichnisstruktur und neue Dateien unter
/etc/ssl
entstanden, deren Inhalt mit nachfolgendem Befehl bequem aufgelistet werden kann:
# ls -l /etc/ssl total 64 -rw-r--r-- 1 root root 4611 Mar 27 12:48 cacert.pem -rw-r--r-- 1 root root 1078 Mar 27 12:48 careq.pem lrwxrwxrwx 1 root root 46 Jun 3 2021 cert.pem -> ../ca-certificates/extracted/tls-ca-bundle.pem drwxr-xr-x 1 root root 13526 Mar 16 09:30 certs drwxr-xr-x 1 root root 0 Mar 27 12:47 crl -rw-r--r-- 1 root root 3 Mar 27 12:47 crlnumber -rw-r--r-- 1 root root 412 Dec 18 11:31 ct_log_list.cnf -rw-r--r-- 1 root root 412 Dec 18 11:31 ct_log_list.cnf.dist -rw-r--r-- 1 root root 166 Mar 27 12:48 index.txt -rw-r--r-- 1 root root 21 Mar 27 12:48 index.txt.attr -rw-r--r-- 1 root root 0 Mar 27 12:47 index.txt.old drwxr-xr-x 1 root root 36 Mar 27 12:47 misc drwxr-xr-x 1 root root 88 Mar 27 12:48 newcerts -rw-r--r-- 1 root root 11160 Mar 27 12:46 openssl.cnf -rw-r--r-- 1 root root 10909 Dec 18 11:31 openssl.cnf.dist drwxr-xr-x 1 root root 18 Mar 27 12:47 private -rw-r--r-- 1 root root 41 Mar 27 12:48 serial
# ls -l /etc/ssl/newcerts total 8 -rw-r--r-- 1 root root 4611 Mar 27 12:48 58B7F2C0F9308D484F77D3563D9DA99819E6A249.pem
# ls -l /etc/ssl/private total 4 -rw------- 1 root root 1854 Mar 27 12:48 cakey.pem
Erstellen CSR (Certificate Request)
Ebenfalls mit dem Script, welches schon bei der Erstellung einer eigene Certificate Authority (CA) genutzt wurde und sich unter /etc/ssl/misc
befindet und den Namen CA
trägt, kann nun dieses auch zur Erstellung von
- einem CSR (Certificate Request)
- einem private key (privaten Schlüssel)
genutzt werden.
HINWEIS - Das zu erstellende Zertifikat hat standardmässig eine Laufzeit von 1 Jahr !!!
Falls eine längere Laufzeit als ein Jahr gewünscht sein soll, kann nachfolgender Parameter im Skript, in nachfolgendem Verzeichnis, mit nachfolgendem Namen
/etc/ssl/openssl.cnf
angepasst werden:
(Nur relevanter Ausschnitt)
... # Tachtler # default: default_days = 365 # how long to certify for default_days = 28402 # how long to certify for 27.03.2022 - 30.12.2099 ...
HINWEIS - Nicht benötigte Angaben werden mit Eingabe eines Punktes [.] übersprungen!
# /etc/ssl/misc/CA.pl -newreq -extra-req -extensions=v3_req
# /etc/ssl/misc/CA.pl -newreq -extra-req -extensions=v3_req Use of uninitialized value $1 in concatenation (.) or string at /etc/ssl/misc/CA.pl line 137. ==== openssl req -new -keyout newkey.pem -out newreq.pem -days 28402 -extensions=v3_req Ignoring -days; not generating a certificate Generating a RSA private key ...+++++ ....................................+++++ writing new private key to 'newkey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:Bavaria (Bayern) Locality Name (eg, city) []:Munich (Muenchen) Organization Name (eg, company) [Internet Widgits Pty Ltd]:tachtler.net Organizational Unit Name (eg, section) []:. Common Name (e.g. server FQDN or YOUR name) []:ldap.idmz.tachtler.net Email Address []:hostmaster@tachtler.net Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:. ==> 0 ==== Request is in newreq.pem, private key is in newkey.pem
Durch ausführen des Scripts mit nachfolgendem Aufrufparameter /etc/ssl/misc/CA.pl -newreq -extra-req -extensions=v3_req
sind zwei neue Dateien unter
/etc/ssl
entstanden, welche mit nachfolgendem Befehl aufgelistet werden können:
# ls -l /etc/ssl/new*.pem -rw------- 1 root root 1854 Mar 27 14:01 /etc/ssl/newkey.pem -rw-r--r-- 1 root root 1086 Mar 27 14:03 /etc/ssl/newreq.pem
WICHTIG - Die so entstandene Datei /etc/ssl/newreq.pem
enthält den CSR (Certificate Request).
Signieren CSR (Certificate Request)
Um den in obigen Beispiel entstandenen CSR (Certificate Request) nun mit der Certificate Authority (CA) zu unterschreiben und somit ein signiertes CRT (Certificate) zu erzeugen, kann wieder das Script, welches schon bei der Erstellung der Certificate Authority (CA) genutzt wurde und sich unter /etc/ssl/misc
befindet und den Namen CA.pl
trägt, mit nachfolgendem Befehl genutzt werden:
WICHTIG - Das Passwort, ist das Passwort, welches im Schritt LDAP ArchLinux - Erstellen CA (Certificate Authority) verwendet wurde!
# /etc/ssl/misc/CA.pl -sign -extra-ca
# /etc/ssl/misc/CA.pl -sign -extra-ca ==== openssl ca -policy policy_anything -out newcert.pem -extensions=v3_req -infiles newreq.pem Using configuration from /etc/ssl/openssl.cnf Enter pass phrase for /etc/ssl/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 58:b7:f2:c0:f9:30:8d:48:4f:77:d3:56:3d:9d:a9:98:19:e6:a2:4a Validity Not Before: Mar 27 12:04:22 2022 GMT Not After : Dec 30 12:04:22 2099 GMT Subject: countryName = DE stateOrProvinceName = Bavaria (Bayern) localityName = Munich (Muenchen) organizationName = tachtler.net commonName = ldap.idmz.tachtler.net emailAddress = hostmaster@tachtler.net X509v3 extensions: X509v3 Basic Constraints: CA:FALSE X509v3 Key Usage: Digital Signature, Non Repudiation, Key Encipherment X509v3 Subject Alternative Name: DNS:ldap.idmz.tachtler.net, DNS:ldap.tachtler.net Certificate is to be certified until Dec 30 12:04:22 2099 GMT (28402 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated ==> 0 ==== Signed certificate is in newcert.pem
Durch ausführen des Skriptes mit nachfolgendem Aufrufparameter /etc/ssl/misc/CA.pl -sign -extra-ca
ist eine weitere neue Dateien unter
/etc/ssl
entstanden, welche mit nachfolgendem Befehl aufgelistet werden kann:
# ls -l /etc/ssl/new*.pem -rw-r--r-- 1 root root 4639 Mar 27 14:04 /etc/ssl/newcert.pem -rw------- 1 root root 1854 Mar 27 14:01 /etc/ssl/newkey.pem -rw-r--r-- 1 root root 1086 Mar 27 14:03 /etc/ssl/newreq.pem
WICHTIG - Die so entstandene Datei /etc/ssl/newcert.pem
enthält das neue signierte CRT (Certificate)!
Entfernen des Passwortes vom private key
Ein Problem ist durch die Erstellung der einzelnen Komponenten, wie in den drei vorhergehenden Schritten beschrieben worden noch offen.
WICHTIG - Der private key (privaten Schlüssel) ist mit einer Passphrase gesichert !
Um dieses Problem zu lösen und das Passwort aus dem private key (privaten Schlüssel) zu entfernen, kann folgender Aufruf von openssl
genutzt werden:
WICHTIG - Das Passwort, ist das Passwort, welches im Schritt LDAP ArchLinux - Erstellen CA (Certificate Authority) verwendet wurde!
# openssl rsa < /etc/ssl/newkey.pem > /etc/ssl/key.pem Enter pass phrase: writing RSA key
Durch ausführen des oben genannten Befehls ist eine weitere neue Dateien unter
/etc/ssl
entstanden, welche mit nachfolgendem Befehl aufgelistet werden kann:
# ls -l /etc/ssl/*key* -rw-r--r-- 1 root root 1679 Mar 27 13:16 /etc/ssl/key.pem -rw------- 1 root root 1854 Mar 27 13:12 /etc/ssl/newkey.pem
WICHTIG - Die so entstandene Datei /etc/ssl/key.pem
enthält den private key (privaten Schlüssel) OHNE Passphrase!
Installation Zertifikat
Nach dem ein Zertifikat wie hier: LDAP ArchLinux - TLS-Zertifikat erstellen beschrieben erstellt wurde, müssen die benötigen Komponenten noch an die entsprechenden Stellen im Betriebssystem kopiert werden. Dazu sind nachfolgende Befehle notwendig.
Bevor mit der abschliessenden Konfiguration von OpenLDAP zur Nutzung von LDAPS begonnen werden kann, sind die in den vorhergehenden Schritten erstellten Dateien:
/etc/ssl/key.pem
/etc/ssl/newcert.pem
/etc/ssl/cacert.pem
noch zu kopieren und ggf. umzubenennen und die Besitz- und Dateirechte der entsprechend Dateien noch anzupassen!
Als erstes werden mit den nachfolgenden Befehlen zwei neue Verzeichnisse im bestehen Verzeichnis /etc/openldap
angelegt:
# mkdir -p /etc/openldap/ssl/{certs,private}
Anschliessend werden mit den nachfolgenden Befehlen die entsprechenden Dateien an den jeweiligen Bestimmungsort kopiert und ggf. umbenannt:
# cp -a /etc/ssl/key.pem /etc/openldap/ssl/private/ldap.idmz.tachtler.net.key # cp -a /etc/ssl/newcert.pem /etc/openldap/ssl/certs/ldap.idmz.tachtler.net.pem # cp -a /etc/ssl/cacert.pem /etc/openldap/ssl/certs/CAcert.pem
Die Besitz- und Dateirechte der soeben kopieren und ggf. umbenannten Dateien
/etc/openldap/ssl/private/ldap.idmz.tachtler.net.key
/etc/openldap/ssl/certs/ldap.idmz.tachtler.net.pem
/etc/openldap/ssl/certs/CAcert.pem
können mit folgenden Befehlen die Besitzrechte wie folgt korrigiert werden:
# chown ldap:ldap /etc/openldap/ssl/private/ldap.idmz.tachtler.net.key # chown ldap:ldap /etc/openldap/ssl/certs/ldap.idmz.tachtler.net.pem # chown ldap:ldap /etc/openldap/ssl/certs/CAcert.pem
und mit folgenden Befehlen die Dateirechte:
# chmod 400 /etc/openldap/ssl/private/ldap.idmz.tachtler.net.key # chmod 444 /etc/openldap/ssl/certs/ldap.idmz.tachtler.net.pem # chmod 444 /etc/openldap/ssl/certs/CAcert.pem
Durch Ausführen der oben genannten Befehle sieht der Inhalt des Verzeichnisses
/etc/openldap/ssl
wie folgt aus, welches mit nachfolgendem Befehl aufgelistet werden kann:
# ls -l /etc/openldap/ssl/* /etc/openldap/ssl/certs: total 16 -r--r--r-- 1 ldap ldap 4611 Mar 24 11:59 CAcert.pem -r--r--r-- 1 ldap ldap 4810 Mar 24 11:59 ldap.idmz.tachtler.net.pem /etc/openldap/ssl/private: total 4 -r-------- 1 ldap ldap 1675 Mar 24 11:59 ldap.idmz.tachtler.net.key
Erweiterte-Konfiguration
/etc/openldap/ldif.d
Zur Konfiguration des OpenLDAP-Servers, sollen LDIF Dateien zum Einsatz kommen, welche im Verzeichnis
/etc/openldap/ldif.d
erstellt und abgelegt werden sollen.
Bevor also mit den erweiterten Konfiguration begonnen werden kann, soll hier ein Verzeichnis, wie nachfolgend dargestellt, mit nachfolgendem Befehl angelegt werden, welches die einzelnen LDIF Dateien aufnehmen soll, die zur erweiterten Konfiguration erstellt werden sollen:
Neuanlage des Verzeichnisses: /etc/openldap/ldif.d
# mkdir /etc/openldap/ldif.d
Setzen der entsprechenden Besitzrechte:
# chown ldap:ldap /etc/openldap/ldif.d
Setzen der entsprechenden Dateirechte:
# chmod 700 /etc/openldap/ldif.d
Des weiteren ist die Kenntnis des Passwortes, welches im vorher durchgeführten Schritt der Einrichtung des OpenLDAP-Servers unter
erstellt wurde und als olcRootPW - cn=config
im OpenLDAP-Server hinterlegt wurde, erforderlich.
LDAPS-Konfiguration
Um den LDAP-Server OpenLDAP auch via LDAPS erreichbar zu machen sind nachfolgende Schritte notwendig. Es soll hier ein Self-Signed-Certificate zum Einsatz kommen, da dies für den eigenen Gebrauch am kostengünstigsten um vom Aufwand her, auch am realistischen durchzuführen ist.
Wie die benötigten Komponenten erstellt werden können, kann unter nachfolgendem internen Link:
nachgelesen werden.
LDAPS Konfiguration: /etc/openldap/ldap.conf
Folgende Anpassungen der Konfigurationsdatei /etc/openldap/ldap.conf
müssen erfolgen, um grundsätzlich einen LDAPS-Server mit einem Self-Signed-Certificate zu betreiben:
# # LDAP Defaults # # See ldap.conf(5) for details # This file should be world readable but not world writable. # Tachtler # default: #BASE dc=example,dc=com BASE dc=tachtler,dc=net # Tachtler # default: #URI ldap://ldap.example.com ldap://ldap-provider.example.com:666 URI ldap://ldap.idmz.tachtler.net #SIZELIMIT 12 #TIMELIMIT 15 #DEREF never # Tachtler - NEW - TLS_CACERTDIR /etc/openldap/ssl/certs # Tachtler - NEW - TLS_REQCERT allow
Erklärungen:
TLS_CACERTDIR /etc/openldap/ssl/certs
Bekanntgabe des Verzeichnisses gegenüber dem OpenLDAP-Server, in dem die Zertifikate hinterlegt werden.
TLS_REQCERT allow
Ignoriert das Scheitern der Überprüfung des Server-Zertifikats durch den OpenLDAP-Server und ermöglicht so auch den Einsatz eines „Self-Signed“-Zertifikats.
LDAPS Konfiguration: /etc/conf.d/slapd
Nachfolgende Konfigurationsdatei /etc/conf.d/slapd
muss neu erstellt werden, und mit nachfolgendem Inhalt gefüllt werden, um grundsätzlich einen LDAPS-Server zu betreiben:
SLAPD_URLS="ldap:/// ldapi:/// ldaps:///"
Damit wird das zusätzliche Lauschen des OpenLDAP-Servers bzw. slapd
-Daemons/Dienstes via ldaps:
auf Port 636
realisiert!
Hintergrund:
Die systemd
-Start-Konfigurationsdatei des OpenLDAP-Servers sieht wie folgt aus und ermöglicht so das einbinden der Konfigurationsdatei /etc/conf.d/slapd
:
# cat /usr/lib/systemd/system/slapd.service [Unit] Description=OpenLDAP Server Daemon After=syslog.target network-online.target Documentation=man:slapd Documentation=man:slapd-config Documentation=man:slapd-mdb [Service] Type=notify Environment="SLAPD_URLS=ldap:/// ldapi:///" "SLAPD_OPTIONS=" EnvironmentFile=-/etc/conf.d/slapd ExecStart=/usr/lib/slapd -d 0 -u ldap -g ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS [Install] WantedBy=multi-user.target
LDAPS Konfiguration: /etc/openldap/ldif.d/config_TLS.ldif
Um den OpenLDAP-Server bzw. den slapd
-Daemon/Dienst via LDAPS erreichbar zu machen sind nachfolgende Ergänzungen in der Konfigurationsdatei
/etc/openldap/ldif.d/config_TLS.ldif
notwendig.
WICHTIG - Es sollten KEINE Änderungen durch manuelle Ergänzungen durchgeführt werden !!!
Nachfolgende Parameter sollen dabei gesetzt werden :
olcTLSCipherSuite:
- Angabe der Verschlüsselungsstärke bzw. der VerschlüsselungsmechanismenolcTLSCACertificatePath:
- Angabe des Verzeichnisses in dem die Zertifikate sich befindenolcTLSCertificateFile:
- Die ZertifikatsdateiolcTLSCertificateKeyFile:
- Der zum Zertifikat gehörende private SchlüsselolcTLSCACertificateFile:
- Das ROOT-Zertifikat aus der eigenen Certificate Authority (CA)olcTLSProtocolMin
- Angabe der zu verwendenden Verschlüsselungsmechanismen
Mit nachfolgendem Befehl soll nun eine LDIF-Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.
LDIF-Datei | Verwendungszweck |
---|---|
/etc/openldap/ldif.d/config_TLS.ldif | Einführung TLS/STARTTLS-Nutzung via ldaps: |
# vim /etc/openldap/ldif.d/config_TLS.ldif
Die LDIF-Datei /etc/openldap/ldif.d/config_TLS.ldif
soll nachfolgenden Inhalt bekommen:
dn: cn=config changetype: modify add: olcTLSCipherSuite olcTLSCipherSuite: HIGH - add: olcTLSCACertificatePath olcTLSCACertificatePath: /etc/openldap/ssl/certs - add: olcTLSCertificateFile olcTLSCertificateFile: /etc/openldap/ssl/certs/ldap.idmz.tachtler.net.pem - add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/openldap/ssl/private/ldap.idmz.tachtler.net.key - add: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/openldap/ssl/certs/CAcert.pem - add: olcTLSProtocolMin olcTLSProtocolMin: 3.1
HINWEIS - olcTLSProtocolMin: 3.1
- Aufgrund einer Lücke in der TLS/STARTTLS SSLv3 auch besser unter „Poodle“ bekannt, sollte die Auswahl der zur Verwendung angebotenen Verschlüsselungsmechanismen wie folgt eingeschränkt werden.
Siehe auch nachfolgenden externen Link:
Abschliessend wird mit nachfolgendem Befehl der Inhalt der LDIF Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration des OpenLDAP-Servers hinzugefügt:
# ldapmodify -H ldapi:/// -W -x -D cn=config -f /etc/openldap/ldif.d/config_TLS.ldif Enter LDAP Password: modifying entry "cn=config"
Um überprüfen zu können, ob alle Änderungen erfolgreich durchgeführt wurden, kann nachfolgender Befehl genutzt werden und sollte eine Ausgabe wie nachfolgende zur Anzeige bringen:
# ldapsearch -H ldapi:/// -W -x -D cn=config -b cn=config "(objectclass=olcGlobal)"
# ldapsearch -H ldapi:/// -W -x -D cn=config -b cn=config "(objectclass=olcGlobal)" Enter LDAP Password: # extended LDIF # # LDAPv3 # base <cn=config> with scope subtree # filter: (objectclass=olcGlobal) # requesting: ALL # # config dn: cn=config objectClass: olcGlobal cn: config olcArgsFile: /run/openldap/slapd.args olcIdleTimeout: 15 olcPidFile: /run/openldap/slapd.pid olcReferral: ldap://ldap.idmz.tachtler.net olcTLSCACertificateFile: /etc/openldap/ssl/certs/CAcert.pem olcTLSCACertificatePath: /etc/openldap/ssl/certs olcTLSCertificateFile: /etc/openldap/ssl/certs/ldap.idmz.tachtler.net.pem olcTLSCertificateKeyFile: /etc/openldap/ssl/private/ldap.idmz.tachtler.net.key olcTLSCipherSuite: HIGH olcTLSProtocolMin: 3.1 # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
WICHTIG - Ein Neustart des OpenLDAP-Servers ist aufgrund der Änderungen in weiteren Konfigurationsdateien
/etc/openldap/ldap.conf
/etc/conf.d/slapd
)
trotzdem notwendig!!!
Der Neustart des OpenLDAP-Server bzw. den slapd
-Daemon/Dienstes, wird mit nachfolgendem Befehl durchgeführt:
# systemctl restart slapd.service
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !
Ob der OpenLDAP-Server, sprich der slapd
-Dienst/Daemon auch tatsächlich als Hintergrundprozess läuft, kann mit nachfolgendem Befehl überprüft werden (Es sollte eine Ausgabe wie nachfolgend dargestellt erfolgen - es kommt auf die zweite Zeile an!):
# ps auxwf | grep slapd root 5781 0.0 0.1 6992 2736 pts/0 S+ 07:43 0:00 \_ grep slapd ldap 5774 0.0 0.7 1086884 15376 ? Ssl 07:42 0:00 /usr/lib/slapd -d 0 -u ldap -g ldap -h ldap:/// ldapi:/// ldaps:///
und nachfolgender Befehl:
# ss -tulpen | grep slapd tcp LISTEN 0 2048 0.0.0.0:636 0.0.0.0:* users:(("slapd",pid=5774,fd=10)) ino:59205 sk:4 cgroup:/system.slice/slapd.service <-> tcp LISTEN 0 2048 0.0.0.0:389 0.0.0.0:* users:(("slapd",pid=5774,fd=7)) ino:59200 sk:5 cgroup:/system.slice/slapd.service <-> tcp LISTEN 0 2048 [::]:636 [::]:* users:(("slapd",pid=5774,fd=11)) ino:59206 sk:8 cgroup:/system.slice/slapd.service v6only:1 <-> tcp LISTEN 0 2048 [::]:389 [::]:* users:(("slapd",pid=5774,fd=8)) ino:59201 sk:9 cgroup:/system.slice/slapd.service v6only:1 <->
bzw. nachfolgender Befehl:
# systemctl status slapd.service ● slapd.service - OpenLDAP Server Daemon Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor pre> Active: active (running) since Fri 2022-03-25 07:42:11 CET; 2min 0s ago Docs: man:slapd man:slapd-config man:slapd-mdb Main PID: 5774 (slapd) Tasks: 2 (limit: 2340) Memory: 3.5M CPU: 13ms CGroup: /system.slice/slapd.service └─5774 /usr/lib/slapd -d 0 -u ldap -g ldap -h "ldap:/// ldapi:/// ldaps:///" Mar 25 07:42:11 server systemd[1]: Starting OpenLDAP Server Daemon... Mar 25 07:42:11 server slapd[5774]: @(#) $OpenLDAP: slapd 2.6.1 (Jan 20 2022 19:59:58) $ openldap Mar 25 07:42:11 server slapd[5774]: slapd starting Mar 25 07:42:11 server systemd[1]: Started OpenLDAP Server Daemon.
LDAPS-Konfiguration: /etc/ca-certificates/trust-source
Um das Zertifikat
/etc/openldap/ssl/certs/CAcert.pem
auch im Betriebssystem zu hinterlegen, sind nachfolgende Tätigkeiten erforderlich.
Variante 1 (bevorzugt):
Dies kann mit nachfolgendem Befehl durchgeführt werden, ohne eine Kopie des Zertifikats unter /etc/ca-certificates/trust-source/anchors
hinterlegen zu müssen:
# trust anchor --store /etc/openldap/ssl/certs/CAcert.pem
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Import erfolgreich war !
ACHTUNG - Variante 2 (nur wenn Variante 1 nicht funktionieren sollte):
Im Verzeichnis
/etc/ca-certificates/trust-source/anchors
können Zertifikate im Format PEM hinterlegt werden und anschliessend dem Verzeichnis
/etc/ca-certificates/trust-source
manuell mit nachfolgendem Befehl hinzugefügt werden:
# cp -a /etc/openldap/ssl/certs/CAcert.pem /etc/ca-certificates/trust-source/anchors
Anschliessend kann mit nachfolgendem Befehl die Umwandlung bzw. der Import durchgeführt werden:
# update-ca-trust
Eine Überprüfung, des Zertifikat aus der Datei
/etc/ca-certificates/trust-source/www.tachtler.net.p11-kit
kann mit nachfolgendem Befehl durchgeführt werden:
# cat /etc/ca-certificates/trust-source/www.tachtler.net.p11-kit
# cat /etc/ca-certificates/trust-source/www.tachtler.net.p11-kit # This file has been auto-generated and written by p11-kit. Changes will be # unceremoniously overwritten. # # The format is designed to be somewhat human readable and debuggable, and a # bit transparent but it is not encouraged to read/write this format from other # applications or tools without first discussing this at the the mailing list: # # p11-glue@lists.freedesktop.org # [p11-kit-object-v1] trusted: true x-distrusted: false private: false modifiable: false label: "www.tachtler.net" url: "" hash-of-issuer-public-key: "" hash-of-subject-public-key: "2y%F7Sgd%26%84k%B4%A1%BA%00%C3%0AEo%0E%1A%AD" java-midp-security-domain: 0 check-value: "u%BA%AB" start-date: "20220324" end-date: "20991231" id: "0%21k%DF%A8%D2%04%AA5v%05%AF%BC%9F%CE%1FB%94%8F%CD" subject: "0%81%821%0B0%09%06%03U%04%06%13%02DE1%190%17%06%03U%04%08%0C%10Bavaria %28Bayern%291%150%13%06%03U%04%0A%0C%0Ctachtler.net1%190%17%06%03U%04%03%0C%10www.tachtler.net1%260%24%06%09%2A%86H%86%F7%0D%01%09%01%16%17hostmaster%40tachtler.net" issuer: "0%81%821%0B0%09%06%03U%04%06%13%02DE1%190%17%06%03U%04%08%0C%10Bavaria %28Bayern%291%150%13%06%03U%04%0A%0C%0Ctachtler.net1%190%17%06%03U%04%03%0C%10www.tachtler.net1%260%24%06%09%2A%86H%86%F7%0D%01%09%01%16%17hostmaster%40tachtler.net" serial-number: "%02%14H%18%E8F%18z%8Du%D5M%9D%924x%EE%F9%C8%27%E3%B0" certificate-category: authority -----BEGIN CERTIFICATE----- MIID6TCCAtGgAwIBAgIUSBjoRhh6jXXVTZ2SNHju+cgn47AwDQYJKoZIhvcNAQEL BQAwgYIxCzAJBgNVBAYTAkRFMRkwFwYDVQQIDBBCYXZhcmlhIChCYXllcm4pMRUw EwYDVQQKDAx0YWNodGxlci5uZXQxGTAXBgNVBAMMEHd3dy50YWNodGxlci5uZXQx JjAkBgkqhkiG9w0BCQEWF2hvc3RtYXN0ZXJAdGFjaHRsZXIubmV0MCAXDTIyMDMy NDA5MjkzM1oYDzIwOTkxMjMxMDkyOTMzWjCBgjELMAkGA1UEBhMCREUxGTAXBgNV BAgMEEJhdmFyaWEgKEJheWVybikxFTATBgNVBAoMDHRhY2h0bGVyLm5ldDEZMBcG A1UEAwwQd3d3LnRhY2h0bGVyLm5ldDEmMCQGCSqGSIb3DQEJARYXaG9zdG1hc3Rl ckB0YWNodGxlci5uZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDM LejTRxNRgjvxENhNYFc95HFnRBtOWbFIYSBSZLodz7yIPavv+9qbby78KwX64wzD IA1cWfk5O+cV3/ODMKC0qXWYJ2dPMc2QmsIbhtjBRaseMWnFW9Y7hRQSyrjKVni/ MZvzEnyUKUoQUJXaLqYHCYooNsLBP6VNW4Ue9jgJ1qdEZLGYq4rdIHxPkrXbNdlK KpBFWYhEbxRJo9VsaLS+knlxhDzijceK/JQH22P3zFcmkO2VAZfCF/nOMiIscF29 B9xgCcNLaVdQVZpUEt0a641G43hDnvmk7K2lVaoH+r3DvuwFR2gjSv208lr0VqEF BI/XsOHP6dEpBZu+v8G7AgMBAAGjUzBRMB0GA1UdDgQWBBQwIWvfqNIEqjV2Ba+8 n84fQpSPzTAfBgNVHSMEGDAWgBQwIWvfqNIEqjV2Ba+8n84fQpSPzTAPBgNVHRMB Af8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAzmIoD/hky8VHq/wJhnxyPS3ma WSlZ7KanyaalCrb0sV+SWry5nX3I71dQZ2FUN3JMHxdbKtRkTrKPBhkJi3kBMjfK 9wocW5BD4DweCikRaFyVveGUWNXymFT9sP+jnIersa69V9dlRH9ScHCMFFZ7owy3 zLxq9fzZheXuXx4DHt+xhoY2wH9jz9lkZZbPt9T3sdTcMFWss5wjPG7yFU3KUPJa isd8nxkV6c7wiQFWc2HEi8IEdQl/QU2HAi39MpiKhJ77uv0a5tcSoEwVmVyjV0xm RibvnAF5JazqpKX8YE0jkdW9LuAH6G8FWbq9Db4P+4WRtsaNZfhNMO4kKynO -----END CERTIFICATE-----
HINWEIS - Das Zertifikat sollte nun auch in nachfolgendem Verzeichnis zu finden sein:
/etc/ca-certificates/extracted/cadir
Überprüfung LDAPS
Das verwendete Self-Signed-Certificate, kann mit nachfolgendem Befehl überprüft werden:
# openssl s_client -connect ldap.idmz.tachtler.net:636 -showcerts -state CONNECTED(00000003) SSL_connect:before SSL initialization SSL_connect:SSLv3/TLS write client hello SSL_connect:SSLv3/TLS write client hello SSL_connect:SSLv3/TLS read server hello SSL_connect:TLSv1.3 read encrypted extensions depth=1 C = DE, ST = Bavaria (Bayern), O = tachtler.net, CN = www.tachtler.net, emailAddress = hostmaster@tachtler.net verify return:1 depth=0 C = DE, ST = Bavaria (Bayern), L = Munich (Muenchen), O = tachtler.net, CN = ldap.idmz.tachtler.net, emailAddress = hostmaster@tachtler.net verify return:1 SSL_connect:SSLv3/TLS read server certificate SSL_connect:TLSv1.3 read server certificate verify SSL_connect:SSLv3/TLS read finished SSL_connect:SSLv3/TLS write change cipher spec SSL_connect:SSLv3/TLS write finished --- Certificate chain 0 s:C = DE, ST = Bavaria (Bayern), L = Munich (Muenchen), O = tachtler.net, CN = ldap.idmz.tachtler.net, emailAddress = hostmaster@tachtler.net i:C = DE, ST = Bavaria (Bayern), O = tachtler.net, CN = www.tachtler.net, emailAddress = hostmaster@tachtler.net -----BEGIN CERTIFICATE----- MIIEMzCCAxugAwIBAgIUSBjoRhh6jXXVTZ2SNHju+cgn47EwDQYJKoZIhvcNAQEL BQAwgYIxCzAJBgNVBAYTAkRFMRkwFwYDVQQIDBBCYXZhcmlhIChCYXllcm4pMRUw EwYDVQQKDAx0YWNodGxlci5uZXQxGTAXBgNVBAMMEHd3dy50YWNodGxlci5uZXQx JjAkBgkqhkiG9w0BCQEWF2hvc3RtYXN0ZXJAdGFjaHRsZXIubmV0MCAXDTIyMDMy NDEwMDEwOVoYDzIwOTkxMjMwMTAwMTA5WjCBpDELMAkGA1UEBhMCREUxGTAXBgNV BAgMEEJhdmFyaWEgKEJheWVybikxGjAYBgNVBAcMEU11bmljaCAoTXVlbmNoZW4p MRUwEwYDVQQKDAx0YWNodGxlci5uZXQxHzAdBgNVBAMMFmxkYXAuaWRtei50YWNo dGxlci5uZXQxJjAkBgkqhkiG9w0BCQEWF2hvc3RtYXN0ZXJAdGFjaHRsZXIubmV0 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAurS56stlwL2mxL7fAsTN s6ckIAO2Eq73KRVB+MQumgImGoVjuzcVNYM9B7XzQLruGsrz7n5dsb5DmY4GzB5z hA5H5oMrYIYCvZ2C5+hUI825EhxFhoHOYF0W8EjKGl58x0hlmb9YlGGwPVXGjoxO tvH4EUU1rIg3Z9cbNfwe9n/i+zMXCOFuxc8XyOOS59CDmGDlVQ5vam1cfdzPd0YM nbjSl2hECuZNekok287LUwyIThykdTzvyU5/C7RctHr2rmNUJjjdpvd9P64lUUyl fd8mZjI/Up2Lac7btsKAHO7TzBqd1RXu0q2ZL4xiuq7Mp8dGrOtzKKL5WJi6owgc RQIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdl bmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUHmij0HemQm/zNcI3rKS56Idk m7YwHwYDVR0jBBgwFoAUMCFr36jSBKo1dgWvvJ/OH0KUj80wDQYJKoZIhvcNAQEL BQADggEBAI3ixPmDiW33dYB4bIsv15ZNpztMVbKIrJcInUmcch8eBjgjaLZrMywB qXolPcPzFBX9SnVz1TZo28TAp5TTR7E+RiQsoOnVNu6k1/bAo3Y3tbHUNSrmVWWg niSppDIdIzjBAUYi0tHH+heGLJx8yFUCv0akRaXN+MT+Bd3KV0FtgDVsR0Ny+63H EUNDc5xfRTLXMnUAseJY5qotofXGLewmMPFM5UZZlrR2nCW/DwhcYGKgVUoy5Z23 RKLFLebOGDaP5L6kCVBCMZKTDA8w5WcidCYCgDY2KqN4+ciI8diz/jrjU4IErzaP 1cc1p57c24/l/SLbW+TtyVxrQE19iUk= -----END CERTIFICATE----- 1 s:C = DE, ST = Bavaria (Bayern), O = tachtler.net, CN = www.tachtler.net, emailAddress = hostmaster@tachtler.net i:C = DE, ST = Bavaria (Bayern), O = tachtler.net, CN = www.tachtler.net, emailAddress = hostmaster@tachtler.net -----BEGIN CERTIFICATE----- MIID6TCCAtGgAwIBAgIUSBjoRhh6jXXVTZ2SNHju+cgn47AwDQYJKoZIhvcNAQEL BQAwgYIxCzAJBgNVBAYTAkRFMRkwFwYDVQQIDBBCYXZhcmlhIChCYXllcm4pMRUw EwYDVQQKDAx0YWNodGxlci5uZXQxGTAXBgNVBAMMEHd3dy50YWNodGxlci5uZXQx JjAkBgkqhkiG9w0BCQEWF2hvc3RtYXN0ZXJAdGFjaHRsZXIubmV0MCAXDTIyMDMy NDA5MjkzM1oYDzIwOTkxMjMxMDkyOTMzWjCBgjELMAkGA1UEBhMCREUxGTAXBgNV BAgMEEJhdmFyaWEgKEJheWVybikxFTATBgNVBAoMDHRhY2h0bGVyLm5ldDEZMBcG A1UEAwwQd3d3LnRhY2h0bGVyLm5ldDEmMCQGCSqGSIb3DQEJARYXaG9zdG1hc3Rl ckB0YWNodGxlci5uZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDM LejTRxNRgjvxENhNYFc95HFnRBtOWbFIYSBSZLodz7yIPavv+9qbby78KwX64wzD IA1cWfk5O+cV3/ODMKC0qXWYJ2dPMc2QmsIbhtjBRaseMWnFW9Y7hRQSyrjKVni/ MZvzEnyUKUoQUJXaLqYHCYooNsLBP6VNW4Ue9jgJ1qdEZLGYq4rdIHxPkrXbNdlK KpBFWYhEbxRJo9VsaLS+knlxhDzijceK/JQH22P3zFcmkO2VAZfCF/nOMiIscF29 B9xgCcNLaVdQVZpUEt0a641G43hDnvmk7K2lVaoH+r3DvuwFR2gjSv208lr0VqEF BI/XsOHP6dEpBZu+v8G7AgMBAAGjUzBRMB0GA1UdDgQWBBQwIWvfqNIEqjV2Ba+8 n84fQpSPzTAfBgNVHSMEGDAWgBQwIWvfqNIEqjV2Ba+8n84fQpSPzTAPBgNVHRMB Af8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAzmIoD/hky8VHq/wJhnxyPS3ma WSlZ7KanyaalCrb0sV+SWry5nX3I71dQZ2FUN3JMHxdbKtRkTrKPBhkJi3kBMjfK 9wocW5BD4DweCikRaFyVveGUWNXymFT9sP+jnIersa69V9dlRH9ScHCMFFZ7owy3 zLxq9fzZheXuXx4DHt+xhoY2wH9jz9lkZZbPt9T3sdTcMFWss5wjPG7yFU3KUPJa isd8nxkV6c7wiQFWc2HEi8IEdQl/QU2HAi39MpiKhJ77uv0a5tcSoEwVmVyjV0xm RibvnAF5JazqpKX8YE0jkdW9LuAH6G8FWbq9Db4P+4WRtsaNZfhNMO4kKynO -----END CERTIFICATE----- --- Server certificate subject=C = DE, ST = Bavaria (Bayern), L = Munich (Muenchen), O = tachtler.net, CN = ldap.idmz.tachtler.net, emailAddress = hostmaster@tachtler.net issuer=C = DE, ST = Bavaria (Bayern), O = tachtler.net, CN = www.tachtler.net, emailAddress = hostmaster@tachtler.net --- No client certificate CA names sent Peer signing digest: SHA256 Peer signature type: RSA-PSS Server Temp Key: X25519, 253 bits --- SSL handshake has read 2645 bytes and written 404 bytes Verification: OK --- New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384 Server public key is 2048 bit Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok) --- SSL_connect:SSL negotiation finished successfully SSL_connect:SSL negotiation finished successfully --- Post-Handshake New Session Ticket arrived: SSL-Session: Protocol : TLSv1.3 Cipher : TLS_AES_256_GCM_SHA384 Session-ID: 3531135C8718EF73028D4B5627D31C15CA5FA45B68B75DEA5763B4DFEA400B86 Session-ID-ctx: Resumption PSK: A7EFCA71C161981779B50339F3BE6417C4DEB7F7B08C52B09C21F7F690D3C01090024B163A7D9685D0B8231686CC61FE PSK identity: None PSK identity hint: None SRP username: None TLS session ticket lifetime hint: 7200 (seconds) TLS session ticket: 0000 - c0 8a 99 8e 37 f9 d1 3e-83 ee 7c 40 23 31 c5 dd ....7..>..|@#1.. 0010 - dd 4f ed 5b cb a4 25 d4-e3 56 dd 55 4b 3e 84 c2 .O.[..%..V.UK>.. 0020 - f3 51 58 23 d4 36 93 f7-e6 25 92 f9 2b db a1 c8 .QX#.6...%..+... 0030 - 27 05 cf 02 90 55 4c c5-b9 0e c5 cb 88 da f3 c6 '....UL......... 0040 - 6a df d6 68 6d a4 a3 24-17 94 e7 ea 94 9c 5b 12 j..hm..$......[. 0050 - d8 94 b1 40 62 03 2f 76-33 ad d1 13 8c 25 c3 8b ...@b./v3....%.. 0060 - 73 25 cc f4 74 4e 7b 43-1f f7 e7 80 e3 71 84 c6 s%..tN{C.....q.. 0070 - 75 99 c1 0b 4f 60 2b f2-70 e8 05 6d 15 8f 48 51 u...O`+.p..m..HQ 0080 - 82 57 a3 47 4a c8 07 ec-de d4 18 2f df c4 36 78 .W.GJ....../..6x 0090 - ab fb 84 35 97 6c 8c 71-4f 7e fc e8 85 f8 c6 d2 ...5.l.qO~...... 00a0 - 88 60 67 32 14 bc 42 0d-4e ad f3 b1 0b 23 7c 29 .`g2..B.N....#|) 00b0 - aa f6 d0 c2 2d 79 c5 ee-91 de ee c5 13 ab 3b 59 ....-y........;Y 00c0 - bf 79 c5 c8 6d 34 a2 cb-67 b2 75 b6 ec de bc 78 .y..m4..g.u....x Start Time: 1648192267 Timeout : 7200 (sec) Verify return code: 0 (ok) Extended master secret: no Max Early Data: 0 --- SSL_connect:SSLv3/TLS read server session ticket read R BLOCK SSL_connect:SSL negotiation finished successfully SSL_connect:SSL negotiation finished successfully --- Post-Handshake New Session Ticket arrived: SSL-Session: Protocol : TLSv1.3 Cipher : TLS_AES_256_GCM_SHA384 Session-ID: 8CF3A6C729142CC18D9281A7FD366C8688A29CA58F04327787F33B1FFBA76979 Session-ID-ctx: Resumption PSK: F6965DDC03BECFDC5534DACFA49F091D04CDA494275CDB0D32C5FF171492137D6F0B5714C61133F1D07B63A0BA7A7CC5 PSK identity: None PSK identity hint: None SRP username: None TLS session ticket lifetime hint: 7200 (seconds) TLS session ticket: 0000 - c0 8a 99 8e 37 f9 d1 3e-83 ee 7c 40 23 31 c5 dd ....7..>..|@#1.. 0010 - 5b 4d 91 1e 39 38 3f c7-cc 74 cb 85 cb 28 f9 c5 [M..98?..t...(.. 0020 - e6 bb 5e e8 42 49 c2 0f-f7 80 b4 06 26 f8 15 c8 ..^.BI......&... 0030 - de 2f f0 db 6d 05 97 de-b5 c4 7e af 11 e4 d4 fd ./..m.....~..... 0040 - 0a 12 18 a6 e0 9d 50 04-73 a8 68 08 db cb 55 60 ......P.s.h...U` 0050 - cb ba 24 e0 d7 e4 9e e2-4a 4f 99 58 b4 78 04 f9 ..$.....JO.X.x.. 0060 - b9 c7 b9 d2 1e c1 1a d0-b8 f6 1b 8f bd 4f 1f 65 .............O.e 0070 - b1 43 5d 1d 11 9a fc 7e-79 12 9e ad 39 c9 26 d8 .C]....~y...9.&. 0080 - 04 75 f0 96 21 22 ec 6c-bd d4 c9 9d 9b df 0b 9b .u..!".l........ 0090 - e4 3c 70 8f 1e 90 66 ce-46 7d 89 e2 83 79 a0 78 .<p...f.F}...y.x 00a0 - 02 fe 15 a0 27 02 26 36-b8 d0 d9 5e a9 d5 c7 6b ....'.&6...^...k 00b0 - e8 a0 23 87 b1 64 58 6b-0b 0f 48 43 7a 56 1c 66 ..#..dXk..HCzV.f 00c0 - 5a 93 63 eb cf 5e 27 19-9b af 5b dd c0 22 19 c9 Z.c..^'...[..".. Start Time: 1648192267 Timeout : 7200 (sec) Verify return code: 0 (ok) Extended master secret: no Max Early Data: 0 --- SSL_connect:SSLv3/TLS read server session ticket read R BLOCK ^C
HINWEIS - Die Ausgabe kann durch drücken der Tastenkombination [Strg/Ctrl] und [c] beendet werden.
Auch in der globalen Zertifikats-Konfigurationsdatei
/etc/ca-certificates/extracted/ca-bundle.trust.crt
sollte das Zertifikat nun enthalten sein, was mit nachfolgendem Befehl überprüft werden kann:
# grep "Klaus Tachtler (CA)" /etc/ca-certificates/extracted/ca-bundle.trust.crt # Klaus Tachtler (CA)
HINWEIS - Gefunden wurde das Self-Signed-Certificate nur, wenn eine Ausgabe erfolgt!
HINWEIS - Falls es Probleme bei der DNS Namensauflösung geben sollte, kann die Konfiguration unter nachfolgenden internen Link Abhilfe schaffen:
Initiale DIT erstellen: /etc/openldap/ldif.d/config_DIT.ldif
Nach der Installation und Konfiguration des OpenLDAP-Servers bzw. slapd
-Daemons/Dienstes, sollte dieser mit Daten gefüllt werden. Die Daten müssen in den
- DIT Directory Information Tree eingestellt werden.
Dies soll hier anhand einer Migration von bereits bestehenden Benutzers in den DIT Directory Information Tree veranschaulicht werden.
Mit nachfolgendem Befehl soll nun eine LDIF-Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.
LDIF-Datei | Verwendungszweck |
---|---|
/etc/openldap/ldif.d/config_DIT.ldif | Anlegen eines DIT Directory Information Tree |
# vim /etc/openldap/ldif.d/config_DIT.ldif
Die LDIF-Datei /etc/openldap/ldif.d/config_DIT.ldif
soll nachfolgenden Inhalt bekommen:
# tachtler.net dn: dc=tachtler,dc=net dc: Tachtler ou: tachtler Dot net objectClass: top objectClass: dcObject objectClass: organizationalUnit # People, tachtler.net dn: ou=People,dc=tachtler,dc=net ou: People objectClass: top objectClass: organizationalUnit # Group, tachtler.net dn: ou=Group,dc=tachtler,dc=net ou: Group objectClass: top objectClass: organizationalUnit
HINWEIS - Es dürfen KEINE Leerzeichen zwischen den einzelnen Anweisungen in den Leerzeilen vorhanden sein!
Abschliessend wird mit nachfolgendem Befehl der Inhalt der LDIF Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration hinzugefügt:
HINWEIS - Ab hier ist das Passwort von dc=Manager,dc=tachtler,dc=net
einzugeben!
# ldapadd -H ldapi:/// -W -x -D cn=Manager,dc=tachtler,dc=net -f /etc/openldap/ldif.d/config_DIT.ldif Enter LDAP Password: adding new entry "dc=tachtler,dc=net" adding new entry "ou=People,dc=tachtler,dc=net" adding new entry "ou=Group,dc=tachtler,dc=net"
Um überprüfen zu können, ob alle Änderungen erfolgreich durchgeführt wurden, kann nachfolgender Befehl genutzt werden und sollte eine Ausgabe wie nachfolgende zur Anzeige bringen:
# ldapsearch -H ldapi:/// -W -x -D cn=config -b "dc=tachtler,dc=net" "(objectclass=*)"
# ldapsearch -H ldapi:/// -W -x -D cn=config -b "dc=tachtler,dc=net" "(objectclass=*)" Enter LDAP Password: # extended LDIF # # LDAPv3 # base <dc=tachtler,dc=net> with scope subtree # filter: (objectclass=*) # requesting: ALL # # tachtler.net dn: dc=tachtler,dc=net dc: Tachtler ou: tachtler Dot net objectClass: top objectClass: dcObject objectClass: organizationalUnit # People, tachtler.net dn: ou=People,dc=tachtler,dc=net ou: People objectClass: top objectClass: organizationalUnit # Group, tachtler.net dn: ou=Group,dc=tachtler,dc=net ou: Group objectClass: top objectClass: organizationalUnit # search result search: 2 result: 0 Success # numResponses: 4 # numEntries: 3
Benutzer anlegen
Ziel dieser Anlage von neuen Benutzern soll es sein, aus den Dateien:
/etc/passwd
und/etc/group
alle Benutzer und Gruppen herauszufiltern, welche eine Benutzer bzw. Gruppenkennung grösser/gleich der Zahl 1000
haben.
Dies sind in der Regel alle tatsächlichen Benutzer und keine technischen Benutzer wie z.B. ldap
usw. Diese sollen dann in den LDAP-Directory Server überführt werden.
Installation Migrationstools
Um die aus den Dateien
/etc/passwd
und/etc/group
Benutzer herauszufiltern und in den OpenLDAP-Server bzw. slapd
-Daemon/Dienst zu migrieren, können bereits dafür existierende Werkzeuge in Form des Pakets:
openldap-migrationtools
-
enthalten installiert werden.
Nachdem das AUR
-Repository von ArchLinux - AUR
erfolgreich eingebunden wurde, kann mit nachfolgendem Befehl, das AUR
-Paket - openldap-migrationtools
installiert werden:
# pikaur --noconfirm -S openldap-migrationtools
Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket openldap-migrationtools
installiert wurden.
# pacman -Qil openldap-migrationtools
Vorbereitung Migrationstools
Zur Vorbereitung ist es notwendig, dass ein mitgeliefertes Script angepasst wird. Das Script
/usr/share/openldap/migration/migrate_common.ph
sollte an den entsprechenden Stellen wie folgt beschrieben, angepasst werden (nur relevanter Auszug):
... # Default DNS domain # Tachtler # default: $DEFAULT_MAIL_DOMAIN = "padl.com"; $DEFAULT_MAIL_DOMAIN = "tachtler.net"; # Default base # Tachtler # default: $DEFAULT_BASE = "dc=padl,dc=com"; $DEFAULT_BASE = "dc=tachtler,dc=net"; ...
Nach erfolgreicher Anpassung, kann mit dem extrahieren der beschriebenen Benutzer begonnen werden. Dazu sind die folgenden beiden Befehle notwendig.
Die Befehle extrahieren alle Benutzer mit einer Benutzerkennung grösser/gleich 1000
und einer Gruppenkennung, ebenfalls grösser/gleich 1000
in jeweils zwei separate Dateien mit den Namen:
/etc/openldap/ldif.d/passwd
und/etc/openldap/ldif.d/group
Die Befehle lauten wie folgt:
# grep ":1[0-9][0-9][0-9]\|:0:0" /etc/passwd > /etc/openldap/ldif.d/passwd
und
# grep ":1[0-9][0-9][0-9]\|:0:" /etc/group > /etc/openldap/ldif.d/group
Der Inhalt der Dateien sollte in etwa wie folgt aussehen:
# cat /etc/openldap/ldif.d/passwd root:x:0:0::/root:/bin/bash klaus:x:1000:1000:Klaus Tachtler:/home/klaus:/bin/bash
und
# cat /etc/openldap/ldif.d/group root:x:0:root klaus:x:1000:klaus
Benutzermigration
Zur Durchführung der Migration kommen folgende Scripte (Perl) zum Einsatz, welche sich im Verzeichnis
/usr/share/openldap/migration/
befinden und mit den nachfolgenden Befehlen aufgerufen werden:
ACHTUNG - Falls das Skript /usr/share/openldap/migration/migrate_passwd.pl
eine Fehlermeldung wie nachfolgende ausgeben sollte:
Can't locate migrate_common.ph in @INC (did you run h2ph?) (@INC contains: /usr/lib/perl5/5.34/site_perl /usr/share/perl5/site_perl /usr/lib/perl5/5.34/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /5.34/core_perl /usr/share/perl5/core_perl) at /usr/share/openldap/migration/migrate_passwd.pl line 40.
ist nachfolgende Anpassung im Skript erforderlich:
(Nur relevanter Ausschnitt):
# Tachtler # default: require 'migrate_common.ph'; require '/usr/share/openldap/migration/migrate_common.ph';
# /usr/share/openldap/migration/migrate_passwd.pl /etc/openldap/ldif.d/passwd > /etc/openldap/ldif.d/passwd.ldif
und
ACHTUNG - Falls das Skript /usr/share/openldap/migration/migrate_group.pl
eine Fehlermeldung wie nachfolgende ausgeben sollte:
Can't locate migrate_common.ph in @INC (did you run h2ph?) (@INC contains: /usr/lib/perl5/5.34/site_perl /usr/share/perl5/site_perl /usr/lib/perl5/5.34/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /5.34/core_perl /usr/share/perl5/core_perl) at /usr/share/openldap/migration/migrate_group.pl line 39.
ist nachfolgende Anpassung im Skript erforderlich:
(Nur relevanter Ausschnitt):
# Tachtler # default: require 'migrate_common.ph'; require '/usr/share/openldap/migration/migrate_common.ph';
# /usr/share/openldap/migration/migrate_group.pl /etc/openldap/ldif.d/group > /etc/openldap/ldif.d/group.ldif
Der Inhalt der beiden Dateien kann mit nachfolgenden Befehlen zur Anzeige gebracht werden und sollte wie folgt aussehen:
# cat /etc/openldap/ldif.d/passwd.ldif
# cat /etc/openldap/ldif.d/passwd.ldif dn: uid=root,ou=People,dc=tachtler,dc=net uid: root cn: root objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword: {crypt}$6$7DasisteinGeheimnis shadowLastChange: 19067 loginShell: /bin/bash uidNumber: 0 gidNumber: 0 homeDirectory: /root dn: uid=klaus,ou=People,dc=tachtler,dc=net uid: klaus cn: Klaus Tachtler objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword: {crypt}$6$7DasisteinGeheimnis shadowLastChange: 19067 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 1000 gidNumber: 1000 homeDirectory: /home/klaus gecos: Klaus Tachtler
und
# cat /etc/openldap/ldif.d/group.ldif
# cat /etc/openldap/ldif.d/group.ldif dn: cn=root,ou=Group,dc=tachtler,dc=net objectClass: posixGroup objectClass: top cn: root userPassword: {crypt}x gidNumber: 0 dn: cn=klaus,ou=Group,dc=tachtler,dc=net objectClass: posixGroup objectClass: top cn: klaus userPassword: {crypt}x gidNumber: 1000
Anpassungen inetOrgPerson
Nachfolgende Anpassungen können erfolgen, falls weitere Attribute, wie z.B. mail
gewünscht werden, dann muss die objectClass
von
account
auf
inetOrgPerson
abgeändert werden und drei weitere Attribute
sn
givenName
mail
in der LDIF Datei
/etc/openldap/ldif.d/passwd.ldif
ergänzt werden:
# cat passwd.ldif dn: uid=root,ou=People,dc=tachtler,dc=net uid: root cn: root objectClass: inetOrgPerson objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword: {crypt}$6$7DasisteinGeheimnis shadowLastChange: 19067 loginShell: /bin/bash uidNumber: 0 gidNumber: 0 homeDirectory: /root sn: root givenName: root mail: root@tachtler.net dn: uid=klaus,ou=People,dc=tachtler,dc=net uid: klaus cn: Klaus Tachtler objectClass: inetOrgPerson objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword: {crypt}$6$7DasisteinGeheimnis shadowLastChange: 19067 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 1000 gidNumber: 1000 homeDirectory: /home/klaus gecos: Klaus Tachtler sn: Tachtler givenName: Klaus mail: klaus@tachtler.net
LDIF-Datei | Verwendungszweck |
---|---|
/etc/openldap/ldif.d/group.ldif | Anlegen von Gruppen im DIT Directory Information Tree |
/etc/openldap/ldif.d/passwd.ldif | Anlegen von Benutzern im DIT Directory Information Tree |
Anschliessend wird mit nachfolgenden Befehlen der Inhalt der LDIF Dateien im laufendem Betrieb des OpenLDAP-Servers der Konfiguration hinzugefügt:
HINWEIS - Ab hier ist das Passwort von dc=Manager,dc=tachtler,dc=net
einzugeben!
# ldapadd -H ldapi:/// -W -x -D cn=Manager,dc=tachtler,dc=net -f /etc/openldap/ldif.d/group.ldif Enter LDAP Password: adding new entry "cn=root,ou=Group,dc=tachtler,dc=net" adding new entry "cn=klaus,ou=Group,dc=tachtler,dc=net"
und
# ldapadd -H ldapi:/// -W -x -D cn=Manager,dc=tachtler,dc=net -f /etc/openldap/ldif.d/passwd.ldif Enter LDAP Password: adding new entry "uid=root,ou=People,dc=tachtler,dc=net" adding new entry "uid=klaus,ou=People,dc=tachtler,dc=net"
Zur Überprüfung ob die Migration korrekt funktioniert hat, können nachfolgende Befehle verwendet werden, welche die nachfolgenden Ausgaben erzeugen sollte:
# ldapsearch -H ldapi:/// -x -b "ou=Group,dc=tachtler,dc=net" "(objectclass=*)"
# ldapsearch -H ldapi:/// -x -b "ou=Group,dc=tachtler,dc=net" "(objectclass=*)" # extended LDIF # # LDAPv3 # base <ou=Group,dc=tachtler,dc=net> with scope subtree # filter: (objectclass=*) # requesting: ALL # # Group, tachtler.net dn: ou=Group,dc=tachtler,dc=net ou: Group objectClass: top objectClass: organizationalUnit # root, Group, tachtler.net dn: cn=root,ou=Group,dc=tachtler,dc=net objectClass: posixGroup objectClass: top cn: root userPassword:: DasistweiterhineinGeheimnis gidNumber: 0 # klaus, Group, tachtler.net dn: cn=klaus,ou=Group,dc=tachtler,dc=net objectClass: posixGroup objectClass: top cn: klaus userPassword:: DasistweiterhineinGeheimnis gidNumber: 1000 # search result search: 2 result: 0 Success # numResponses: 4 # numEntries: 3
und
# ldapsearch -H ldapi:/// -x -b "ou=People,dc=tachtler,dc=net" "(objectclass=*)"
# ldapsearch -H ldapi:/// -x -b "ou=People,dc=tachtler,dc=net" "(objectclass=*)" # extended LDIF # # LDAPv3 # base <ou=People,dc=tachtler,dc=net> with scope subtree # filter: (objectclass=*) # requesting: ALL # # People, tachtler.net dn: ou=People,dc=tachtler,dc=net ou: People objectClass: top objectClass: organizationalUnit # root, People, tachtler.net dn: uid=root,ou=People,dc=tachtler,dc=net uid: root cn: root objectClass: inetOrgPerson objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword:: DasistweiterhineinGeheimnis shadowLastChange: 19067 loginShell: /bin/bash uidNumber: 0 gidNumber: 0 homeDirectory: /root sn: root givenName: root mail: root@tachtler.net # klaus, People, tachtler.net dn: uid=klaus,ou=People,dc=tachtler,dc=net uid: klaus cn: Klaus Tachtler objectClass: inetOrgPerson objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword:: DasistweiterhineinGeheimnis shadowLastChange: 19067 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 1000 gidNumber: 1000 homeDirectory: /home/klaus gecos: Klaus Tachtler sn: Tachtler givenName: Klaus mail: klaus@tachtler.net # search result search: 2 result: 0 Success # numResponses: 4 # numEntries: 3
"Anonymous bind" deaktivieren: /etc/openldap/ldif.d/config_anonymous_bind.ldif
Um an den OpenLDAP-Server bzw. den slapd
-Daemon/Dienst sollen KEINE anonymen Anfragen, sprich KEINEN „anonymous bind“ mehr zu ermöglichen, sind nachfolgende Ergänzungen in der Konfigurationsdatei
/etc/openldap/slapd.d/cn=config.ldif
notwendig.
WICHTIG - Es sollten KEINE Änderungen durch manuelle Ergänzungen durchgeführt werden !!!
Nachfolgende Parameter sollen dabei gesetzt werden :
olcDisallows: bind_anon
- „anonymous bind“ verbietenolcRequires: authc
- Authentifizierung erzwingen
Mit nachfolgendem Befehl soll nun eine LDIF-Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.
LDIF-Datei | Verwendungszweck |
---|---|
/etc/openldap/ldif.d/config_anonymous_bind.ldif | Anonymous bind verbieten |
# vim /etc/openldap/ldif.d/config_anonymous_bind.ldif
Die LDIF-Datei /etc/openldap/ldif.d/config_anonymous_bind.ldif
soll nachfolgenden Inhalt bekommen:
dn: cn=config changetype: modify add: olcDisallows olcDisallows: bind_anon - add: olcRequires olcRequires: authc
Anschliessend wird mit nachfolgendem Befehl der Inhalt der LDIF Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration hinzugefügt:
# ldapmodify -H ldapi:/// -W -x -D cn=config -f /etc/openldap/ldif.d/config_anonymous_bind.ldif Enter LDAP Password: modifying entry "cn=config"
Um überprüfen zu können, ob alle Änderungen erfolgreich durchgeführt wurden, kann nachfolgender Befehl genutzt werden und sollte eine Ausgabe wie nachfolgende zur Anzeige bringen:
# ldapsearch -H ldapi:/// -W -x -D cn=config -b cn=config "(objectclass=olcGlobal)"
# ldapsearch -H ldapi:/// -W -x -D cn=config -b cn=config "(objectclass=olcGlobal)" Enter LDAP Password: # extended LDIF # # LDAPv3 # base <cn=config> with scope subtree # filter: (objectclass=olcGlobal) # requesting: ALL # # config dn: cn=config objectClass: olcGlobal cn: config olcArgsFile: /run/openldap/slapd.args olcIdleTimeout: 15 olcPidFile: /run/openldap/slapd.pid olcReferral: ldap://ldap.idmz.tachtler.net olcTLSCACertificateFile: /etc/openldap/ssl/certs/CAcert.pem olcTLSCACertificatePath: /etc/openldap/ssl/certs olcTLSCertificateFile: /etc/openldap/ssl/certs/ldap.idmz.tachtler.net.pem olcTLSCertificateKeyFile: /etc/openldap/ssl/private/ldap.idmz.tachtler.net.key olcTLSCipherSuite: HIGH olcTLSProtocolMin: 3.1 olcDisallows: bind_anon olcRequires: authc # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
WICHTIG - Die Einträge
olcDisallows: bind_anon
olcRequires: authc
ermöglichen das Deaktivieren der anonymen Anfragen „anonymous bind“.
Zur Überprüfung ob das Deaktivieren der anonymen Anfragen „anonymous bind“ korrekt funktioniert hat, kann folgender Befehl verwendet werden, welche die nachfolgende Fehlermeldung erzeugen sollte:
# ldapsearch -H ldapi:/// -x -b "dc=tachtler,dc=net" "uid=klaus"
# ldapsearch -H ldapi:/// -x -b "dc=tachtler,dc=net" "uid=klaus" ldap_bind: Inappropriate authentication (48) additional info: anonymous bind disallowed
HINWEIS - Hier ist das Passwort von dc=Manager,dc=tachtler,dc=net
einzugeben!
Der oben genannte Befehl zur Abfrage der Daten des Benutzer klaus, muss nun so lauten:
# ldapsearch -H ldapi:/// -x -W -D "cn=Manager,dc=tachtler,dc=net" -b "dc=tachtler,dc=net" "uid=klaus"
# ldapsearch -H ldapi:/// -x -W -D "cn=Manager,dc=tachtler,dc=net" -b "dc=tachtler,dc=net" "uid=klaus" Enter LDAP Password: # extended LDIF # # LDAPv3 # base <dc=tachtler,dc=net> with scope subtree # filter: uid=klaus # requesting: ALL # # klaus, People, tachtler.net dn: uid=klaus,ou=People,dc=tachtler,dc=net cn: Klaus Tachtler gecos: Klaus Tachtler gidNumber: 1000 homeDirectory: /home/klaus loginShell: /bin/bash mail: klaus@tachtler.net objectClass: inetOrgPerson objectClass: posixAccount objectClass: top objectClass: shadowAccount shadowLastChange: 16383 shadowMax: 99999 shadowMin: 0 shadowWarning: 7 sn: Tachtler givenName: Klaus uid: klaus uidNumber: 1000 userPassword:: DasistundbleibtweiterhineinGeheimnis # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Ersatzauthentifizierung erstellen: /etc/openldap/ldif.d/config_binduser.ldif
Dadurch, das KEINE anonymen Anfragen „anonymous bind“, mehr möglich sind, es trotzdem Situationen gibt, in denen auch Abfragen von z.B. einem technischen Benutzer einer Web-Anwendung gestellt werden, soll ein Benutzer der als „Ersatzauthentifizierer“ für anonyme Anfragen fungiert erstellt werden, hier z.B. könnte so ein Benutzer wie folgt heißen:
- cn=Ersatzbenutzer,dc=tachtler,dc=net
Bevor mit der eigentlichen Erstellung des „Ersatzauthentifizierer“ für anonyme Anfragen begonnen wird, soll noch ein Passwort generiert werden, welches später für den „Ersatzauthentifizierer“ für anonyme Anfragen gelten soll. Dies kann mit nachfolgendem Befehl erstellt werden:
# /usr/sbin/slappasswd -h {SSHA} New password: Re-enter new password: {SSHA}MxGd86hN+e5Gmp8rDI4KP8N+czImiQKh
Mit nachfolgendem Befehl soll nun eine LDIF Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.
LDIF-Datei | Verwendungszweck |
---|---|
/etc/openldap/ldif.d/config_binduser.ldif | Erstellen eines Benutzers, als Ersatzauthentifizierer |
# vim /etc/openldap/ldif.d/config_binduser.ldif
Die LDIF-Datei /etc/openldap/ldif.d/config_binduser.ldif
soll nachfolgenden Inhalt bekommen:
dn: cn=Ersatzbenutzer,dc=tachtler,dc=net cn: Ersatzbenutzer objectClass: top objectClass: organizationalRole objectClass: simpleSecurityObject userPassword: {SSHA}MxGd86hN+e5Gmp8rDI4KP8N+czImiQKh
HINWEIS - Hier kommt das zuvor erstellte Passwort zum Einsatz!
Anschliessend wird mit nachfolgendem Befehl der Inhalt der LDIF Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration hinzugefügt:
# ldapadd -H ldapi:/// -W -x -D cn=Manager,dc=tachtler,dc=net -f /etc/openldap/ldif.d/config_binduser.ldif
# ldapadd -H ldapi:/// -W -x -D cn=Manager,dc=tachtler,dc=net -f /etc/openldap/ldif.d/config_binduser.ldif Enter LDAP Password: adding new entry "cn=Ersatzbenutzer,dc=tachtler,dc=net"
HINWEIS - Hier ist das Passwort von dc=Manager,dc=tachtler,dc=net
einzugeben!
Ein Suchanfrage zum Testen, ob das Hinzufügen des „Ersatzauthentifizierer“ für anonyme Anfragen zur DIT Directory Information Tree erfolgreich war, kann mit folgendem Befehl durchgeführt werden:
# ldapsearch -H ldapi:/// -x -W -D cn=config -b "dc=tachtler,dc=net" "cn=Ersatzbenutzer"
# ldapsearch -H ldapi:/// -x -W -D cn=config -b "dc=tachtler,dc=net" "cn=Ersatzbenutzer" Enter LDAP Password: # extended LDIF # # LDAPv3 # base <dc=tachtler,dc=net> with scope subtree # filter: cn=Ersatzbenutzer # requesting: ALL # # Anonymous, tachtler.net dn: cn=Ersatzbenutzer,dc=tachtler,dc=net cn: Ersatzbenutzer objectClass: top objectClass: organizationalRole objectClass: simpleSecurityObject userPassword:: DasistaucheinGeheimnis # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Indizes
Um die einzelnen im DIT Directory Information Tree enthaltenen Index Felder anpassen zu können, sollen zuerst die existierende Indizierung von Feldern mit nachfolgendem Befehl aufgelistet werden, um diese Informationen als Grundlage für Anpassungen verwenden zu können:
# ldapsearch -H ldapi:/// -W -x -D cn=config -b olcDatabase={1}mdb,cn=config
# ldapsearch -H ldapi:/// -W -x -D cn=config -b olcDatabase={1}mdb,cn=config Enter LDAP Password: # extended LDIF # # LDAPv3 # base <olcDatabase={1}mdb,cn=config> with scope subtree # filter: (objectclass=*) # requesting: ALL # # {1}mdb, config dn: olcDatabase={1}mdb,cn=config objectClass: olcDatabaseConfig objectClass: olcMdbConfig olcDatabase: {1}mdb olcDbDirectory: /var/lib/openldap/openldap-data olcSuffix: dc=tachtler,dc=net olcRootDN: cn=Manager,dc=tachtler,dc=net olcRootPW: {SSHA}t9RX1sH1NkqgkuBWzZIkiS+Aqkk2i3ms olcDbIndex: objectClass eq olcDbIndex: uid pres,eq olcDbIndex: mail pres,sub,eq olcDbIndex: cn,sn pres,sub,eq olcDbIndex: dc eq olcDbMaxSize: 1073741824 # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Für nachfolgende Felder besteht bereits ein Index, wie durch die Anzeige in oben gezeigter Abfrage zu sehen ist:
(Nur relevanter Ausschnitt):
... olcDbIndex: objectClass eq olcDbIndex: uid pres,eq olcDbIndex: mail pres,sub,eq olcDbIndex: cn,sn pres,sub,eq olcDbIndex: dc eq ...
Um auch für die nachfolgenden Felder einen Index zur Verfügung haben zu können, sind Anpassungen erforderlich. Nachfolgende Felder, sollen zusätzlich einen Indexeintrag nach folgendem Muster erhalten:
Felder | Attribute | Beschreibung |
---|---|---|
uidNumber,gidNumber,loginShell | eq,pres | eq =gleich, pres =Anzeige |
uid,memberUid | eq,pres,sub | eq =gleich, pres =Anzeige, sub =Teilzeichenkette |
nisMapName,nisMapEntry | eq,pres,sub | eq =gleich, pres =Anzeige, sub =Teilzeichenkette |
uniqueMember | eq,pres | eq =gleich, pres =Anzeige |
Falls ein Zugriff z.B. auf das Feld uid
erfolgt und kein Index für dieses Feld definiert wurde, ist nachfolgender Hinweis im systemd
-Journal zu finden:
Mar 25 13:10:11 server slapd[1362]: <= bdb_equality_candidates: (uid) not indexed
Indizes hinzufügen: /etc/openldap/ldif.d/config_DbIndex.ldif
Mit nachfolgendem Befehl soll nun eine LDIF Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.
LDIF-Datei | Verwendungszweck |
---|---|
/etc/openldap/ldif.d/config_DbIndex.ldif | Erstellen von zusätzlichen Feld-Indizes |
# vim /etc/openldap/ldif.d/config_DbIndex.ldif
Die LDIF-Datei /etc/openldap/ldif.d/config_DbIndex.ldif
soll nachfolgenden Inhalt bekommen:
dn: olcDatabase={1}mdb,cn=config changetype: modify add: olcDbIndex olcDbIndex: uidNumber,gidNumber,loginShell eq,pres olcDbIndex: memberUid eq,pres,sub olcDbIndex: nisMapName,nisMapEntry eq,pres,sub olcDbIndex: uniqueMember eq,pres
Anschliessend wird mit nachfolgendem Befehl der Inhalt der LDIF-Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration hinzugefügt:
# ldapmodify -H ldapi:/// -W -x -D cn=config -f /etc/openldap/ldif.d/config_DbIndex.ldif Enter LDAP Password: modifying entry "olcDatabase={1}mdb,cn=config"
Zur Überprüfung, ob die Veränderungen im DIT Directory Information Tree enthaltenen Indizes der Felder auch richtig gesetzt wurden, kann nachfolgender Befehl genutzt werden, welcher eine entsprechende Anzeige zum Vorschein bringen sollte:
# ldapsearch -H ldapi:/// -W -x -D cn=config -b olcDatabase={1}mdb,cn=config
# ldapsearch -H ldapi:/// -W -x -D cn=config -b olcDatabase={1}mdb,cn=config Enter LDAP Password: # extended LDIF # # LDAPv3 # base <olcDatabase={1}mdb,cn=config> with scope subtree # filter: (objectclass=*) # requesting: ALL # # {1}mdb, config dn: olcDatabase={1}mdb,cn=config objectClass: olcDatabaseConfig objectClass: olcMdbConfig olcDatabase: {1}mdb olcDbDirectory: /var/lib/openldap/openldap-data olcSuffix: dc=tachtler,dc=net olcRootDN: cn=Manager,dc=tachtler,dc=net olcRootPW: {SSHA}t9RX1sH1NkqgkuBWzZIkiS+Aqkk2i3ms olcDbIndex: objectClass eq olcDbIndex: uid pres,eq olcDbIndex: mail pres,sub,eq olcDbIndex: cn,sn pres,sub,eq olcDbIndex: dc eq olcDbIndex: uidNumber,gidNumber,loginShell eq,pres olcDbIndex: memberUid eq,pres,sub olcDbIndex: nisMapName,nisMapEntry eq,pres,sub olcDbIndex: uniqueMember eq,pres olcDbMaxSize: 1073741824 # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Zugriffsrechte
Um die einzelnen im DIT Directory Information Tree enthaltenen Zugriffsrechte anpassen zu können, sollen zuerst die existierenden Zugriffsrechte mit nachfolgendem Befehl aufgelistet werden, um diese Informationen als Grundlage für Anpassungen verwenden zu können:
HINWEIS - Es sollten aktuell noch KEINE Zugriffsrechte vorhanden sein !
# ldapsearch -H ldapi:/// -W -x -D cn=config -b olcDatabase={1}mdb,cn=config
# ldapsearch -H ldapi:/// -W -x -D cn=config -b olcDatabase={1}mdb,cn=config Enter LDAP Password: # extended LDIF # # LDAPv3 # base <olcDatabase={1}mdb,cn=config> with scope subtree # filter: (objectclass=*) # requesting: ALL # # {1}mdb, config dn: olcDatabase={1}mdb,cn=config objectClass: olcDatabaseConfig objectClass: olcMdbConfig olcDatabase: {1}mdb olcDbDirectory: /var/lib/openldap/openldap-data olcSuffix: dc=tachtler,dc=net olcRootDN: cn=Manager,dc=tachtler,dc=net olcRootPW: {SSHA}t9RX1sH1NkqgkuBWzZIkiS+Aqkk2i3ms olcDbIndex: objectClass eq olcDbIndex: uid pres,eq olcDbIndex: mail pres,sub,eq olcDbIndex: cn,sn pres,sub,eq olcDbIndex: dc eq olcDbIndex: uidNumber,gidNumber,loginShell eq,pres olcDbIndex: memberUid eq,pres,sub olcDbIndex: nisMapName,nisMapEntry eq,pres,sub olcDbIndex: uniqueMember eq,pres olcDbMaxSize: 1073741824 # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Zugriffsrechte definieren: /etc/openldap/ldif.d/config_acl.ldif
Mit nachfolgendem Befehl soll nun eine LDIF Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.
LDIF-Datei | Verwendungszweck |
---|---|
/etc/openldap/ldif.d/config_acl.ldif | Setzen von Zugriffsrechten/Beschränkungen |
# touch /etc/openldap/ldif.d/config_acl.ldif
Die LDIF-Datei /etc/openldap/ldif.d/config_acl.ldif
soll nachfolgenden Inhalt bekommen:
dn: olcDatabase={1}mdb,cn=config changetype: modify replace: olcAccess olcAccess: {0}to attrs=userPassword,shadowLastChange,shadowMax,shadowWarning by self write by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" read by anonymous auth by * none olcAccess: {1}to dn="cn=Manager,dc=tachtler,dc=net" by self write by * none olcAccess: {2}to dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by * none olcAccess: {3}to dn.regex="cn=([^,]+),ou=Group,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" read by dn.exact,expand="uid=$1,ou=People,dc=tachtler,dc=net" read by * none olcAccess: {4}to dn.regex="uid=([^,]+),ou=People,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" read by dn.exact,expand="uid=$1,ou=People,dc=tachtler,dc=net" read by * none olcAccess: {5}to * by self write by dn.base="cn=Manager,dc=tachtler,dc=net" write by * read
Zugriffsrechte: Erklärungen
Nachfolgend die Erklärung für die einzelnen olcAccess
-Zeilen.
Zugriffsrecht: attrs=userPassword,shadowLastChange,shadowMax,shadowWarning
olcAccess: {0}to attrs=userPassword,shadowLastChange,shadowMax,shadowWarning by self write by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" read by anonymous auth by * none
Auf die Felder
userPassword
shadowLastChange
shadowMax
shadowWarning
können die nachfolgenden Benutzer mit nachfolgenden Rechten zugreifen:
Zugriffsformulierung | Benutzer | Zugriffsrecht |
---|---|---|
by self write | self (selbst) | schreiben |
by dn=„cn=Manager,dc=tachtler,dc=net“ write | Manager | schreiben |
by dn=„cn=Ersatzbenutzer,dc=tachtler,dc=net“ read | Ersatzbenutzer | lesen |
by anonymous auth | anonymous | Authentifizieren |
by * none | <ALLE ANDEREN> | <KEINE RECHTE> |
Zugriffsrecht: cn=Manager,dc=tachtler,dc=net
olcAccess: {1}to dn="cn=Manager,dc=tachtler,dc=net" by self write by * none
Auf den Eintrag
cn=Manager,dc=tachtler,dc=net
können die nachfolgenden Benutzer mit nachfolgenden Rechten zugreifen:
Zugriffsformulierung | Benutzer | Zugriffsrecht |
---|---|---|
by self write | self (selbst) | schreiben |
by * none | <ALLE ANDEREN> | <KEINE RECHTE> |
Zugriffsrecht: cn=Ersatzbenutzer,dc=tachtler,dc=net
olcAccess: {2}to dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by * none
Auf den Eintrag
cn=Ersatzbenutzer,dc=tachtler,dc=net
können die nachfolgenden Benutzer mit nachfolgenden Rechten zugreifen:
Zugriffsformulierung | Benutzer | Zugriffsrecht |
---|---|---|
by self write | self (selbst) | schreiben |
by dn=„cn=Manager,dc=tachtler,dc=net“ write | Manager | schreiben |
by * none | <ALLE ANDEREN> | <KEINE RECHTE> |
Zugriffsrecht: cn=([^,]+),ou=Group,dc=tachtler,dc=net
olcAccess: {3}to dn.regex="cn=([^,]+),ou=Group,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" read by dn.exact,expand="uid=$1,ou=People,dc=tachtler,dc=net" read by * none
Auf den Eintrag
cn=([^,]+),ou=Group,dc=tachtler,dc=net
können die nachfolgenden Benutzer mit nachfolgenden Rechten zugreifen:
Zugriffsformulierung | Benutzer | Zugriffsrecht |
---|---|---|
by self write | self (selbst) | schreiben |
by dn=„cn=Manager,dc=tachtler,dc=net“ write | Manager | schreiben |
by dn=„cn=Ersatzbenutzer,dc=tachtler,dc=net“ read | Ersatzbenutzer | lesen |
by dn.exact,expand=„uid=$1,ou=People,dc=tachtler,dc=net“ read | (Gruppen)benutzer | lesen |
by * none | <ALLE ANDEREN> | <KEINE RECHTE> |
Der Eintrag steht für die einzelne Gruppe im Teil des DIT Directory Information Tree ou=Group,dc=tachtler,dc=net
für alle dort enthaltenen Einträge.
Zugriffsrecht: {uid=([^,]+),ou=People,dc=tachtler,dc=net
olcAccess: {4}to dn.regex="uid=([^,]+),ou=People,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" read by dn.exact,expand="uid=$1,ou=People,dc=tachtler,dc=net" read by * none
Auf den Eintrag
uid=([^,]+),ou=People,dc=tachtler,dc=net
können die nachfolgenden Benutzer mit nachfolgenden Rechten zugreifen:
Zugriffsformulierung | Benutzer | Zugriffsrecht |
---|---|---|
by self write | self (selbst) | schreiben |
by dn=„cn=Manager,dc=tachtler,dc=net“ write | Manager | schreiben |
by dn=„cn=Ersatzbenutzer,dc=tachtler,dc=net“ read | Ersatzbenutzer | lesen |
by dn.exact,expand=„uid=$1,ou=People,dc=tachtler,dc=net“ read | Benutzer | lesen |
by * none | <ALLE ANDEREN> | <KEINE RECHTE> |
Der Eintrag steht für den einzelnen Benutzer im Teil des DIT Directory Information Tree ou=People,dc=tachtler,dc=net
für alle dort enthaltenen Einträge.
Zugriffsrecht: *
olcAccess: {5}to * by self write by dn.base="cn=Manager,dc=tachtler,dc=net" write by * read
Auf den Eintrag
*
können die nachfolgenden Benutzer mit nachfolgenden Rechten zugreifen:
Zugriffsformulierung | Benutzer | Zugriffsrecht |
---|---|---|
by self write | self (selbst) | schreiben |
by dn=„cn=Manager,dc=tachtler,dc=net“ write | Manager | schreiben |
by * read | <ALLE ANDEREN> | lesen |
Der Eintrag steht für alle Einträge, ohne besondere Beschränkungen.
Zugriffsrechte: Anwendung
Zugriffsrechte: hinzufügen
Anschliessend wird mit nachfolgendem Befehl der Inhalt der LDIF Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration hinzugefügt:
# ldapmodify -H ldapi:/// -W -x -D cn=config -f /etc/openldap/ldif.d/config_acl.ldif
# ldapmodify -H ldapi:/// -W -x -D cn=config -f /etc/openldap/ldif.d/config_acl.ldif Enter LDAP Password: modifying entry "olcDatabase={1}mdb,cn=config"
Zur Überprüfung, ob die Veränderungen im DIT Directory Information Tree enthaltenen Zugriffsrechte auch richtig gesetzt wurden, kann nachfolgender Befehl genutzt werden, welcher eine entsprechende Anzeige zum Vorschein bringen sollte:
# ldapsearch -H ldapi:/// -W -x -D cn=config -b olcDatabase={1}mdb,cn=config
# ldapsearch -H ldapi:/// -W -x -D cn=config -b olcDatabase={1}mdb,cn=config Enter LDAP Password: # extended LDIF # # LDAPv3 # base <olcDatabase={1}mdb,cn=config> with scope subtree # filter: (objectclass=*) # requesting: ALL # # {1}mdb, config dn: olcDatabase={1}mdb,cn=config objectClass: olcDatabaseConfig objectClass: olcMdbConfig olcDatabase: {1}mdb olcDbDirectory: /var/lib/openldap/openldap-data olcSuffix: dc=tachtler,dc=net olcRootDN: cn=Manager,dc=tachtler,dc=net olcRootPW: {SSHA}t9RX1sH1NkqgkuBWzZIkiS+Aqkk2i3ms olcDbIndex: objectClass eq olcDbIndex: uid pres,eq olcDbIndex: mail pres,sub,eq olcDbIndex: cn,sn pres,sub,eq olcDbIndex: dc eq olcDbIndex: uidNumber,gidNumber,loginShell eq,pres olcDbIndex: memberUid eq,pres,sub olcDbIndex: nisMapName,nisMapEntry eq,pres,sub olcDbIndex: uniqueMember eq,pres olcDbMaxSize: 1073741824 olcAccess: {0}to attrs=userPassword,shadowLastChange,shadowMax,shadowWarning b y self write by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenu tzer, dc=tachtler,dc=net" read by anonymous auth by * none olcAccess: {1}to dn="cn=Manager,dc=tachtler,dc=net" by self write by * none olcAccess: {2}to dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" by self write by dn ="cn=Manager,dc=tachtler,dc=net" write by * none olcAccess: {3}to dn.regex="cn=([^,]+),ou=Group,dc=tachtler,dc=net" by self wri te by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer,dc=ta chtler,dc=net" read by dn.exact,expand="uid=$1,ou=People,dc=tachtler,dc=net" read by * none olcAccess: {4}to dn.regex="uid=([^,]+),ou=People,dc=tachtler,dc=net" by self w rite by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer,dc= tachtler,dc=net" read by dn.exact,expand="uid=$1,ou=People,dc=tachtler,dc=net " read by * none olcAccess: {5}to * by self write by dn.base="cn=Manager,dc=tachtler,dc=net" wr ite by * read # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Zugriffsrechte: überprüfen
Zur Überprüfung ob die Zugriffsbeschränkungen tatsächlich auch funktionieren, kann überprüft werden, ob der Benutzer
"uid=klaus,ou=People,dc=tachtler,dc=net"
die Daten des Benutzers
"uid=root,ou=People,dc=tachtler,dc=net"
abfragen kann.
Nachfolgend der Befehl zur Überprüfung:
HINWEIS - Hier ist das Passwort von uid=klaus,ou=People,dc=tachtler,dc=net
einzugeben!
# ldapsearch -LLL -H ldapi:/// -x -W -D "uid=klaus,ou=People,dc=tachtler,dc=net" -b "ou=People,dc=tachtler,dc=net" "uid=root"
# ldapsearch -LLL -H ldapi:/// -x -W -D "uid=klaus,ou=People,dc=tachtler,dc=net" -b "ou=People,dc=tachtler,dc=net" "uid=root"
Enter LDAP Password:
WICHTIG - Es sollte KEINE Datenanzeige erfolgen!!!
Nachfolgender Befehl, sollte jedoch weiterhin ein Ergebnis zurück liefern, da hier als
"cn=Manager,dc=tachtler,dc=net"
die Abfrage durchgeführt wird:
HINWEIS - Hier ist das Passwort von dc=Manager,dc=tachtler,dc=net
einzugeben!
# ldapsearch -LLL -H ldapi:/// -x -W -D "cn=Manager,dc=tachtler,dc=net" -b "ou=People,dc=tachtler,dc=net" "uid=root"
# ldapsearch -LLL -H ldapi:/// -x -W -D "cn=Manager,dc=tachtler,dc=net" -b "ou=People,dc=tachtler,dc=net" "uid=root" Enter LDAP Password: dn: uid=root,ou=People,dc=tachtler,dc=net cn: root gecos: root gidNumber: 0 homeDirectory: /root loginShell: /bin/bash mail: root@tachtler.net objectClass: inetOrgPerson objectClass: posixAccount objectClass: top objectClass: shadowAccount shadowLastChange: 16383 shadowMax: 99999 shadowMin: 0 shadowWarning: 7 sn: root givenName: root uid: root uidNumber: 0 userPassword:: WieimmerbleibtdaseinGeheimnis
Log-Schreibung
Um beim OpenLDAP die LOG-Schreibung zu aktivieren oder zu deaktivieren sind nachfolgende Schritte notwendig.
Log-Level: Erstellen /etc/openldap/ldif.d/config_loglevel_add.ldif
HINWEIS - Damit der Parameter überhaupt verändert werden kann muss dieser zuerst einmal angelegt werden.
Der Parameter olcLogLevel
setzt nach dem angegebenen Wert die Gesprächigkeit der LOG-Schreibung.
Level | Schlüsselwort | Beschreibung |
---|---|---|
-1 | any | Einschalten des kompletten Debugging (enable all debugging) |
0 | kein Debugging (no debugging) | |
1 | (0x1 trace) | trace function calls |
2 | (0x2 packets) | debug packet handling |
4 | (0x4 args) | heavy trace debugging |
8 | (0x8 conns) | connection management |
16 | (0x10 BER) | print out packets sent and received |
32 | (0x20 filter) | search filter processing |
64 | (0x40 config) | configuration processing |
128 | (0x80 ACL) | access control list processing |
256 | (0x100 stats) | stats log connections/operations/results |
512 | (0x200 stats2) | stats log entries sent |
1024 | (0x400 shell) | print communication with shell backends |
2048 | (0x800 parse) | print entry parsing debugging |
16384 | (0x4000 sync) | syncrepl consumer processing |
32768 | (0x8000 none) | only messages that get logged regardless of configured log level |
Mit nachfolgendem Befehl soll nun eine LDIF Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.
LDIF-Datei | Verwendungszweck |
---|---|
/etc/openldap/ldif.d/config_loglevel_add.ldif | Setzen des LOG-Level auf state (Standard) |
# vim /etc/openldap/ldif.d/config_loglevel_add.ldif
Die LDIF Datei /etc/openldap/ldif.d/config_loglevel_add.ldif
soll nachfolgenden Inhalt bekommen:
dn: cn=config changetype: modify add: olcLogLevel olcLogLevel: stats
Anschliessend wird mit nachfolgendem Befehl der Inhalt der LDIF Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration hinzugefügt:
# ldapmodify -H ldapi:/// -W -x -D cn=config -f /etc/openldap/ldif.d/config_loglevel_add.ldif
# ldapmodify -H ldapi:/// -W -x -D cn=config -f /etc/openldap/ldif.d/config_loglevel_add.ldif Enter LDAP Password: modifying entry "cn=config"
Um überprüfen zu können, ob alle Änderungen erfolgreich durchgeführt wurden, kann nachfolgender Befehl genutzt werden und sollte eine Ausgabe wie nachfolgende zur Anzeige bringen:
# ldapsearch -H ldapi:/// -W -x -D cn=config -b cn=config "(objectclass=olcGlobal)"
# ldapsearch -H ldapi:/// -W -x -D cn=config -b cn=config "(objectclass=olcGlobal)" Enter LDAP Password: # extended LDIF # # LDAPv3 # base <cn=config> with scope subtree # filter: (objectclass=olcGlobal) # requesting: ALL # # config dn: cn=config objectClass: olcGlobal cn: config olcArgsFile: /run/openldap/slapd.args olcDisallows: bind_anon olcIdleTimeout: 15 olcPidFile: /run/openldap/slapd.pid olcReferral: ldap://ldap.idmz.tachtler.net olcRequires: authc olcTLSCACertificateFile: /etc/openldap/ssl/certs/CAcert.pem olcTLSCACertificatePath: /etc/openldap/ssl/certs olcTLSCertificateFile: /etc/openldap/ssl/certs/ldap.idmz.tachtler.net.pem olcTLSCertificateKeyFile: /etc/openldap/ssl/private/ldap.idmz.tachtler.net.key olcTLSCipherSuite: HIGH olcTLSProtocolMin: 3.1 olcLogLevel: stats # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Log-Schreibung: ausschalten /etc/openldap/ldif.d/config_loglevel_off.ldif
Um beim OpenLDAP die LOG-Schreibung zu deaktivieren wäre nachfolgender Schritt notwendig.
Mit nachfolgendem Befehl soll nun eine LDIF Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.
LDIF-Datei | Verwendungszweck |
---|---|
/etc/openldap/ldif.d/config_loglevel_off.ldif | Setzen des LOG-Level auf none |
# vim /etc/openldap/ldif.d/config_loglevel_off.ldif
Die LDIF Datei /etc/openldap/ldif.d/config_loglevel_off.ldif
soll nachfolgenden Inhalt bekommen:
dn: cn=config changetype: modify delete: olcLogLevel olcLogLevel: stats - add: olcLogLevel olcLogLevel: none
Eine Aktivierung kann mit nachfolgendem Befehl den Inhalt der LDIF Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration hinzugefügen:
# ldapmodify -H ldapi:/// -W -x -D cn=config -f /etc/openldap/ldif.d/config_loglevel_off.ldif
Eine Überprüfung, ob alle Änderungen erfolgreich durchgeführt wurden, kann mit nachfolgendem Befehl durchgeführt werden:
# ldapsearch -H ldapi:/// -W -x -D cn=config -b cn=config "(objectclass=olcGlobal)"
Log-Schreibung: einschalten /etc/openldap/ldif.d/config_loglevel_default.ldif
Um beim OpenLDAP die LOG-Schreibung wieder zu aktivieren ist nachfolgender Schritt notwendig.
Mit nachfolgendem Befehl soll nun eine LDIF Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.
LDIF-Datei | Verwendungszweck |
---|---|
/etc/openldap/ldif.d/config_loglevel_default.ldif | Setzen des LOG-Level auf state |
# vim /etc/openldap/ldif.d/config_loglevel_default.ldif
Die LDIF Datei /etc/openldap/ldif.d/config_loglevel_default.ldif
soll nachfolgenden Inhalt bekommen:
dn: cn=config changetype: modify delete: olcLogLevel olcLogLevel: none - add: olcLogLevel olcLogLevel: stats
Eine Aktivierung kann mit nachfolgendem Befehl den Inhalt der LDIF Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration hinzugefügen:
# ldapmodify -H ldapi:/// -W -x -D cn=config -f /etc/openldap/ldif.d/config_loglevel_default.ldif
Eine Überprüfung, ob alle Änderungen erfolgreich durchgeführt wurden, kann mit nachfolgendem Befehl durchgeführt werden:
# ldapsearch -H ldapi:/// -W -x -D cn=config -b cn=config "(objectclass=olcGlobal)"
LDAP-Server: Backup
Um im Fall der Fälle ein vollständiges Backup der
- Konfigurationen
- Daten
des OpenLDAP-Servers vorhalten zu können, kann nachfolgende Art Backups zu erzeugen angewandt werden.
Alle Befehle, welche mit ldap
beginnen sind Client-seitige Befehle und alle Befehle, welche mit slap
beginnen, sind Server-seitige Befehle.
Zur Erstellung von Backups soll hier der Befehl slapcat
zum Einsatz kommen.
Vorbereitend kann ein Verzeichnis zur Aufnahme der Backup-Dateien mit nachfolgenden Befehlen neu erstellt werden und mit den entsprechenden Besitz- und Datei-rechten versehen werden, wie nachfolgend dargestellt:
Neuanlage des Verzeichnisses: /var/lib/openldap/openldap-backup
# mkdir /var/lib/openldap/openldap-backup
Setzen der entsprechenden Besitzrechte:
# chown ldap:ldap /var/lib/openldap/openldap-backup
Setzen der entsprechenden Dateirechte:
# chmod 700 /var/lib/openldap/openldap-backup
LDAP-Server: Backup - Konfigurationen
Nachfolgender Befehl erstellt eine Datei im LDIF-Format mit allen Konfigurationen des OpenLDAP-Servers:
# sudo -u ldap slapcat -vF /etc/openldap/slapd.d/ -n 0 -l "/var/lib/openldap/openldap-backup/$(hostname)-ldap-mdb-conf-$(date '+%F_%H_%M_%S').ldif"
# sudo -u ldap slapcat -vF /etc/openldap/slapd.d/ -n 0 -l "/var/lib/openldap/openldap-backup/$(hostname)-ldap-mdb-conf-$(date '+%F_%H_%M_%S').ldif" # id=00000001 # id=00000002 # id=00000003 # id=00000004 # id=00000005 # id=00000006 # id=00000007 # id=00000008 # id=00000009 # id=0000000a # id=0000000b
Nachfolgender Befehl listet den aktuellen Inhalt des Verzeichnisses /var/lib/openldap/openldap-backup
auf:
# ls -l /var/lib/openldap/openldap-backup total 40 -rw-r--r-- 1 ldap ldap 40658 Mar 28 15:14 vml030-ldap-mdb-conf-2022-03-28_15_14_26.ldif
LDAP-Server: Backup - Daten
Nachfolgender Befehl erstellt eine Datei im LDIF-Format mit allen Daten des OpenLDAP-Servers:
# sudo -u ldap slapcat -v -n 1 -l "/var/lib/openldap/openldap-backup/$(hostname)-ldap-mdb-data-$(date '+%F_%H_%M_%S').ldif"
# sudo -u ldap slapcat -v -n 1 -l "/var/lib/openldap/openldap-backup/$(hostname)-ldap-mdb-data-$(date '+%F_%H_%M_%S').ldif" # id=00000001 # id=00000002 # id=00000003 # id=00000004 # id=00000005 # id=00000006 # id=00000007 # id=00000008 # id=00000009 # id=0000000a # id=0000000b
Nachfolgender Befehl listet den aktuellen Inhalt des Verzeichnisses /var/lib/openldap/openldap-backup
auf:
# ls -l /var/lib/openldap/openldap-backup total 48 -rw-r--r-- 1 ldap ldap 40658 Mar 28 15:14 vml030-ldap-mdb-conf-2022-03-28_15_14_26.ldif -rw-r--r-- 1 ldap ldap 7808 Mar 28 15:15 vml030-ldap-mdb-data-2022-03-28_15_15_21.ldif
LDAP-Server: Restore
Um im Fall der Fälle ein vollständiges Restore der
- Konfigurationen
- Daten
des OpenLDAP-Servers wiederherstellen zu können, kann nachfolgende Art angewendet werden.
LDAP-Server: Restore - Server Stopp
Bevor ein vollständiger Restore durchgeführt werden kann, muss der OpenLDAP-Server gestoppt werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl stop slapd.service
Eine Überprüfung, ob der OpenLDAP-Server wirklich nicht mehr läuft und gestoppt wurde, kann mit nachfolgendem Befehl durchgeführt werden:
# systemctl status slapd.service ○ slapd.service - OpenLDAP Server Daemon Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor preset: disabled) Active: inactive (dead) since Mon 2022-03-28 15:16:06 CEST; 3s ago Docs: man:slapd man:slapd-config man:slapd-mdb Process: 2594 ExecStart=/usr/lib/slapd -d 0 -u ldap -g ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS (code=exited, status=> Main PID: 2594 (code=exited, status=0/SUCCESS) CPU: 15ms Mar 28 15:11:29 server slapd[2594]: slapd starting Mar 28 15:11:29 server systemd[1]: Started OpenLDAP Server Daemon. Mar 28 15:16:06 server slapd[2594]: daemon: shutdown requested and initiated. Mar 28 15:16:06 server slapd[2594]: slapd shutdown: waiting for 0 operations/tasks to finish Mar 28 15:16:06 server systemd[1]: Stopping OpenLDAP Server Daemon... Mar 28 15:16:06 server slapd[2594]: DIGEST-MD5 common mech free Mar 28 15:16:06 server slapd[2594]: DIGEST-MD5 common mech free Mar 28 15:16:06 server slapd[2594]: slapd stopped. Mar 28 15:16:06 server systemd[1]: slapd.service: Deactivated successfully. Mar 28 15:16:06 server systemd[1]: Stopped OpenLDAP Server Daemon.
LDAP-Server: Restore - Konfigurationen leeren
Nachfolgender Befehl leert alle Online-Konfigurationen des OpenLDAP-Servers:
# rm -rf /etc/openldap/slapd.d/*
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !
LDAP-Server: Restore - Daten leeren
Nachfolgender Befehl leert alle Daten des OpenLDAP-Servers:
# rm -rf /var/lib/openldap/openldap-data/*
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !
LDAP-Server: Restore - Konfigurationen
Nachfolgender Befehl stellt alle Konfigurationen des OpenLDAP-Servers wieder her:
# sudo -u ldap slapadd -v -n 0 -F /etc/openldap/slapd.d -l /var/lib/openldap/openldap-backup/server-ldap-mdb-conf-2022-03-28_15_14_26.ldif
# sudo -u ldap slapadd -v -n 0 -F /etc/openldap/slapd.d -l /var/lib/openldap/openldap-backup/server-ldap-mdb-conf-2022-03-28_15_14_26.ldif added: "cn=config" (00000001) added: "cn=module{0},cn=config" (00000001) added: "cn=schema,cn=config" (00000001) added: "cn={0}core,cn=schema,cn=config" (00000001) added: "cn={1}cosine,cn=schema,cn=config" (00000001) added: "cn={2}inetorgperson,cn=schema,cn=config" (00000001) added: "cn={3}nis,cn=schema,cn=config" (00000001) added: "olcDatabase={-1}frontend,cn=config" (00000001) added: "olcDatabase={0}config,cn=config" (00000001) added: "olcDatabase={1}mdb,cn=config" (00000001) added: "olcDatabase={2}monitor,cn=config" (00000001) Closing DB...
LDAP-Server: Restore - Daten
Nachfolgender Befehl stellt alle Daten des OpenLDAP-Servers wieder her:
# sudo -u ldap slapadd -v -n 1 -F /etc/openldap/slapd.d -l /var/lib/openldap/openldap-backup/server-ldap-mdb-data-2022-03-28_15_15_21.ldif
# sudo -u ldap slapadd -v -n 1 -F /etc/openldap/slapd.d -l /var/lib/openldap/openldap-backup/server-ldap-mdb-data-2022-03-28_15_15_21.ldif added: "dc=tachtler,dc=net" (00000001) added: "ou=People,dc=tachtler,dc=net" (00000002) added: "ou=Group,dc=tachtler,dc=net" (00000003) added: "cn=root,ou=Group,dc=tachtler,dc=net" (00000004) added: "cn=klaus,ou=Group,dc=tachtler,dc=net" (00000005) added: "cn=petra,ou=Group,dc=tachtler,dc=net" (00000006) added: "cn=lena,ou=Group,dc=tachtler,dc=net" (00000007) added: "cn=luis,ou=Group,dc=tachtler,dc=net" (00000008) added: "uid=root,ou=People,dc=tachtler,dc=net" (00000009) added: "uid=klaus,ou=People,dc=tachtler,dc=net" (0000000a) added: "cn=Ersatzbenutzer,dc=tachtler,dc=net" (0000000b) Closing DB...
LDAP-Server: Restore - Server Start
Abschliessend muss der Start des OpenLDAP-Servers wieder erfolgen, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl start slapd.service
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !
Ob der OpenLDAP-Server, sprich der slapd
-Dienst/Daemon auch tatsächlich als Hintergrundprozess läuft, kann mit nachfolgendem Befehl überprüft werden (Es sollte eine Ausgabe wie nachfolgend dargestellt erfolgen - es kommt auf die zweite Zeile an!):
# ps auxwf | grep slapd root 2733 0.0 0.1 6992 2424 pts/0 S+ 15:21 0:00 \_ grep slapd ldap 2728 0.0 0.7 1087044 16092 ? Ssl 15:21 0:00 /usr/lib/slapd -d 0 -u ldap -g ldap -h ldap:/// ldapi:/// ldaps:///
und nachfolgender Befehl:
# ss -tulpen | grep slapd tcp LISTEN 0 2048 0.0.0.0:389 0.0.0.0:* users:(("slapd",pid=2728,fd=7)) ino:32948 sk:3 cgroup:/system.slice/slapd.service <-> tcp LISTEN 0 2048 0.0.0.0:636 0.0.0.0:* users:(("slapd",pid=2728,fd=10)) ino:32953 sk:5 cgroup:/system.slice/slapd.service <-> tcp LISTEN 0 2048 [::]:389 [::]:* users:(("slapd",pid=2728,fd=8)) ino:32949 sk:6 cgroup:/system.slice/slapd.service v6only:1 <-> tcp LISTEN 0 2048 [::]:636 [::]:* users:(("slapd",pid=2728,fd=11)) ino:32954 sk:9 cgroup:/system.slice/slapd.service v6only:1 <->
bzw. nachfolgender Befehl:
# systemctl status slapd.service ● slapd.service - OpenLDAP Server Daemon Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor pre> Active: active (running) since Mon 2022-03-28 15:21:42 CEST; 37s ago Docs: man:slapd man:slapd-config man:slapd-mdb Main PID: 2728 (slapd) Tasks: 2 (limit: 2340) Memory: 3.7M CPU: 19ms CGroup: /system.slice/slapd.service └─2728 /usr/lib/slapd -d 0 -u ldap -g ldap -h "ldap:/// ldapi:/// > Mar 28 15:21:42 server systemd[1]: Starting OpenLDAP Server Daemon... Mar 28 15:21:42 server slapd[2728]: @(#) $OpenLDAP: slapd 2.6.1 (Jan 20 2022 19> openldap Mar 28 15:21:42 server slapd[2728]: slapd starting Mar 28 15:21:42 server systemd[1]: Started OpenLDAP Server Daemon.