OpenLDAP: Unterschied zwischen den Versionen

Aus Foxwiki
Die Seite wurde neu angelegt: „'''topic''' kurze Beschreibung ==Beschreibung== ==Installation== ==Anwendungen== ==Syntax== ===Optionen=== ===Parameter=== ===Umgebungsvariablen=== ===Exit-Status=== ==Konfiguration== ===Dateien=== ==Sicherheit== ==Dokumentation== ===RFC=== ===Man-Pages=== ===Info-Pages=== ==Siehe auch== ==Links== ===Projekt-Homepage=== ===Weblinks=== ===Einzelnachweise=== <references /> ==Testfragen== <div class="toccolours mw-collapsible mw-collapsed"> ''Testfrage 1'' <…“
 
K Textersetzung - „Man-Pages“ durch „Man-Page“
 
(67 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''topic''' kurze Beschreibung
'''OpenLDAP''' is an open-source implementation of the [[LDAP]] protocol
 
==Beschreibung==
==Beschreibung==
'''OpenLDAP''' ist eine Implementierung des [[Lightweight Directory Access Protocol|LDAP]], die als [[freie Software]] unter der der [[BSD-Lizenz]] ähnlichen OpenLDAP Public License veröffentlicht wird. OpenLDAP ist Bestandteil der meisten aktuellen [[Linux-Distribution]]en und läuft auch unter verschiedenen [[Unix]]-Varianten, [[macOS]] und verschiedenen [[Windows]]-Versionen.
Da OpenLDAP den LDAP-Standard umsetzt, ist es mit OpenLDAP möglich, eine zentrale Benutzerdatenverwaltung aufzubauen und zentral zu warten.
== Vergleich zu anderen Lösungen ==
Da OpenLDAP die Referenzimplementierung des Protokolls ist, werden Schemadateien sorgfältig auf Protokollkonformität geprüft. Dies führt gelegentlich zu Fehlermeldungen, wenn mangelhafte Schemadateien, die von Directory Server Agents (DSA) anderer Hersteller akzeptiert werden, in ein OpenLDAP-System übertragen werden.
Durch die Bereitstellung unterschiedlicher Backends und Overlays lassen sich Protokollerweiterungen und erweiterte Operationen (extended operations) sehr leicht realisieren.
Das [[SQL]]-Backend leitet die Suchergebnisse einer [[Relationale Datenbank|RDBM]]-Suche an den DSA weiter, so dass der auftraggebende LDAP-Client ein protokollgerechtes Datenpaket empfängt.
== Elemente ==
Das Softwarepaket umfasst neben dem Server auch weitere Werkzeuge zur Konfiguration und benötigte Bibliotheken. Es besteht hauptsächlich aus folgenden Bestandteilen:
* slapd – stand-alone LDAP daemon
* backends – über diese wird der eigentliche Zugriff auf die Daten realisiert
* overlays – ermöglichen das Verhalten der Backends und damit des slapd zu modifizieren, ohne diese(n) selbst zu ändern
* syncrepl – Synchronisation und Replikation gemäß RFC 4533
* Bibliotheken, die das LDAP-Protokoll bereitstellen
* Werkzeuge, Hilfsmittel und Beispiele
Folgender Dienst wird nicht mehr mit ausgeliefert, da die Replikation jetzt über die Syncrepl ausgeführt wird.
* slurpd – stand-alone LDAP update replication daemon
* An LDAP server basically is a non-relational database which is optimised for accessing, but not writing, data.
* It is mainly used as an address book (for e.g. email clients) or authentication backend to various services (such as Samba, where it is used to emulate a domain controller, or [https://wiki.archlinux.org/title/LDAP_authentication Linux system authentication], where it replaces <tt>/etc/passwd</tt>) and basically holds the user data.
'''Note:'''
Commands related to OpenLDAP that begin with <tt>ldap</tt> (like <tt>ldapsearch</tt>) are client-side utilities, while commands that begin with <tt>slap</tt> (like <tt>slapcat</tt>) are server-side.
'''Tip:'''
Directory services are an enormous topic.
* Configuration can therefore be complex.
* If you are totally new to those concepts, [https://www.brennan.id.au/20-Shared_Address_Book_LDAP.html this] is a good introduction that is easy to understand and that will get you started, even if you are new to LDAP.
==Installation==
==Installation==
==Anwendungen==
OpenLDAP contains both an LDAP server and client.
 
# apt install slapd ldap-utils
 
==Syntax==
==Syntax==
===Optionen===
===Optionen===
===Parameter===
===Parameter===
===Umgebungsvariablen===
===Umgebungsvariablen===
===Exit-Status===
===Rückgabewert===
==Konfiguration==
==Konfiguration==
Die Konfigurationsdateien für die OpenLDAP-Clients sind unter Linux (siehe auch die [[Man page|Manual Page]] ldap.conf(5)):
* ldap.conf – Basiseinstellungen für Clients
: Auf vielen Unix- bzw.&nbsp;Linux-Systemen gibt es zwei Dateien mit der Bezeichnung ldap.conf, üblicherweise in /etc/ldap.conf und /etc/openldap/ldap.conf. Die Datei /etc/ldap.conf dient ausschließlich der Konfiguration von pam_ldap. Die systemweite Client-Konfiguration ist /etc/openldap/ldap.conf.
* ~/.ldaprc – anwenderspezifische Konfigurationsdatei für Clients
Die OpenLDAP-Server-Konfigurationsdateien sind:
* slapd.conf – Konfiguration des Slapd-Daemon (dies ist aber eine veraltete Methode und wird nur eingesetzt, falls Konfigurationsparameter benötigt werden, die nicht vom Konfigurationsbackend cn=config erkannt werden. Dies sind z.&nbsp;B.&nbsp;in Version OpenLDAP-2.3.34 alle SQL-Backends und einige Overlays).
* Das Verzeichnis slapd.d/ wird für die Online-Konfiguration verwendet. Der slapd kann dort die gesamte Konfiguration als [[LDIF]]-Datei ablegen, so dass slapd.conf nicht mehr benötigt wird. Diese Dateien sollten nicht selbst verändert werden, die Konfiguration des openldap erfolgt über das LDA-Protokoll.
=== Server ===
'''Note:'''
If you have an obsolete <tt>slapd.conf</tt> configuration, you can simply convert it into the new <tt>cn=config</tt> database.
If you already have an OpenLDAP database on your machine and would like to remove it, then it can be removed by deleting everything inside of <tt>/var/lib/openldap/openldap-data/</tt>.
So, backup your <tt>DB_CONFIG</tt>.
Slapd, the server, stores its configuration directly inside its database.
* Thus, we need to write our configuration as an LDIF file and import it.
First, create a file <tt>config.ldif</tt> containing the following minimal sane configuration.
* This file declares the basic configuration structure and a database stored at <tt>/var/lib/openldap/openldap-data</tt>.
config.ldif
# The root config entry
dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /run/openldap/slapd.args
olcPidFile: /run/openldap/slapd.pid
# Schemas
dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema
# TODO: Include further schemas as necessary
include: file:///etc/openldap/schema/core.ldif
# The config database
dn: olcDatabase=config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: config
olcRootDN: cn=Manager,$BASEDN
# The database for our entries
  dn: olcDatabase=mdb,cn=config
  objectClass: olcDatabaseConfig
  objectClass: olcMdbConfig
  olcDatabase: mdb
  olcSuffix: $BASEDN
  olcRootDN: cn=Manager,$BASEDN
  olcRootPW: $PASSWD
  olcDbDirectory: /var/lib/openldap/openldap-data
# TODO: Create further indexes
olcDbIndex: objectClass eq
There are a few options you will need to change: * Every occurence of <tt>$BASEDN</tt> must be replaced with a valid DN.
* If you own a domain <tt>example.com</tt> you will most likely want to choose <tt>dc=example,dc=com</tt>.
* <tt>$PASSWD</tt> must be replaced by a salted and hashed password, which you may generate by running <tt>slappasswd</tt>.
Additionally, you might consider to add further [https://www.openldap.org/doc/admin24/schema.html schemas] and create additional [https://www.openldap.org/doc/admin24/tuning.html#Indexes indexes] to tune the performance of your database.
* The specifics will depend on your use case, but here are a few recommendations.
* For [https://wiki.archlinux.org/title/LDAP_authentication LDAP authentication], you should include the three schemas below to be able to use the <tt>posixAccount</tt> object class used for storing users.
# Additional schemas
# RFC1274: Cosine and Internet X.500 schema
include: file:///etc/openldap/schema/cosine.ldif
# RFC2798: Internet Organizational Person
include: file:///etc/openldap/schema/inetorgperson.ldif
# RFC2307: An Approach for Using LDAP as a Network Information Service
include: file:///etc/openldap/schema/nis.ldif
# Additional indexes
olcDbIndex: objectClass eq
olcDbIndex: uid pres,eq
olcDbIndex: mail pres,sub,eq
olcDbIndex: cn,sn pres,sub,eq
olcDbIndex: dc eq
To import these settings as the <tt>ldap</tt> user using [https://wiki.archlinux.org/title/Sudo sudo]:
# sudo -u ldap slapadd -n 0 -F /etc/openldap/slapd.d/ -l ./config.ldif
Alternatively, you may also run this directly as <tt>root</tt>.
* However, if you do, make sure <tt>/etc/openldap/slapd.d/</tt> is accessible by <tt>ldap</tt>:
# slapadd -n 0 -F /etc/openldap/slapd.d/ -l ./config.ldif
# chown -R ldap:ldap /etc/openldap/*
By default, OpenLDAP will listen unencrypted on all interfaces.
* To make it only listen on local IP interfaces, you may edit the environment file read by <tt>slapd.service</tt>:
/etc/conf.d/slapd
SLAPD_URLS="ldap://127.0.0.1/ ldap://[::1]"
SLAPD_OPTIONS=
Finally, start the slapd daemon by [https://wiki.archlinux.org/title/Start starting] <tt>slapd.service</tt>.
'''Note:''' * If you want to have your directory accept requests from the network, you should consider using TLS.
* See [https://wiki.archlinux.org/title/OpenLDAP#OpenLDAP_over_TLS #OpenLDAP over TLS] for details.
* If you plan to use your LDAP server for authentication, you might want to check access control configuration in [https://wiki.archlinux.org/title/LDAP_authentication#LDAP_Server_Setup LDAP authentication#LDAP Server Setup].
* Berkeley DB (BDB) should no longer be used.
* The mdb backend to [https://man.archlinux.org/man/slapd.8 slapd(8)] is the recommended primary backend for a normal slapd database.
* It uses OpenLDAP's own Lightning Memory-Mapped Database (LMDB) library to store data and is intended to replace the Berkeley DB backend.
* The OpenLDAP package in the [https://wiki.archlinux.org/title/Official_repositories official repositories] defaults to mdb.
=== Client ===
The client configuration file is located at <tt>/etc/openldap/ldap.conf</tt>.
It is simple: you will only have to alter <tt>BASE</tt> to reflect the suffix of the server, and <tt>URI</tt> to reflect the address of the server, like:
;/etc/openldap/ldap.conf
BASE            dc=example,dc=com
URI            ldap://localhost
If you decide to use SSL:
* The protocol (ldap or ldaps) in the <tt>URI</tt> entry has to conform with the slapd configuration
* If you decide to use TLS, add a <tt>TLS_REQCERT allow</tt> line to <tt>ldap.conf</tt>
* If you use a signed certificate from a CA, add the line <tt>TLS_CACERTDIR /usr/share/ca-certificates/trust-source</tt> in <tt>ldap.conf</tt>.
=== Create initial entry ===
'''Note:''' If you plan to use your LDAP server for authentication, you should import the <tt>base.ldif</tt> in the [https://wiki.archlinux.org/title/LDAP_authentication#Populate_LDAP_Tree_with_Base_Data LDAP authentication] article instead of following the instructions here.
Once your client is configured, you probably want to create the root entry, and an entry for the Manager role:
$ ldapadd -x -D 'cn=Manager,dc=example,dc=com' -W
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: Example
description: Example directory
dn: cn=Manager,dc=example,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager
^D
The text after the first line is entered on stdin, or could be read from a file either with the <tt>-f</tt> option or a file redirect.
=== Test your new OpenLDAP installation ===
This is easy, just run the command below:
$ ldapsearch -x '(objectclass=*)' -b 'dc=example,dc=com'
Or authenticating as the rootdn (replacing <tt>-x</tt> by <tt>-D user -W</tt>), using the example configuration we had above:
$ ldapsearch -D "cn=Manager,dc=example,dc=com" -W '(objectclass=*)' -b 'dc=example,dc=com'
Now you should see some information about your database.
=== OpenLDAP over TLS ===
'''Note:''' [https://www.openldap.org/doc/admin24/ upstream documentation] is much more useful/complete than this section
If you access the OpenLDAP server over the network and especially if you have sensitive data stored on the server you run the risk of someone sniffing your data which is sent clear-text.
* The next part will guide you on how to setup an SSL connection between the LDAP server and the client so the data will be sent encrypted.
In order to use TLS, you must have a certificate.
* For testing purposes, a self-signed certificate will suffice.
* To learn more about certificates, see [https://wiki.archlinux.org/title/OpenSSL OpenSSL].
'''Warning:''' OpenLDAP cannot use a certificate that has a password associated to it.
==== Create a self-signed certificate ====
To create a self-signed certificate, type the following:
$ openssl req -new -x509 -nodes -out slapdcert.pem -keyout slapdkey.pem -days 365
You will be prompted for information about your LDAP server.
* Much of the information can be left blank.
* The most important information is the common name.
* This must be set to the DNS name of your LDAP server.
* If your LDAP server's IP address resolves to example.org but its server certificate shows a CN of bad.example.org, LDAP clients will reject the certificate and will be unable to negotiate TLS connections (apparently the results are wholly unpredictable).
Now that the certificate files have been created copy them to <tt>/etc/openldap/ssl/</tt> (create this directory if it does not exist) and secure them. <tt>slapdcert.pem</tt> must be world readable because it contains the public key. <tt>slapdkey.pem</tt> on the other hand should only be readable for the ldap user for security reasons:
# mv slapdcert.pem slapdkey.pem /etc/openldap/ssl/
# chmod -R 755 /etc/openldap/ssl/
# chmod 400 /etc/openldap/ssl/slapdkey.pem
# chmod 444 /etc/openldap/ssl/slapdcert.pem
# chown ldap /etc/openldap/ssl/slapdkey.pem
==== Configure slapd for SSL ====
Edit the configuration to tell LDAP where the certificate files reside by executing the following command:
'''Note:''' The latest version of OpenLDAP (2.4.45) uses OpenSSL and not GnuTLS.
* This means that current versions of OpenLDAP do in fact know how to handle the [https://www.openssl.org/docs/man1.1.1/man1/ciphers.html#CIPHER-STRINGS DEFAULT TLSCipherSuite].
* To prove this one could run <tt>ldd /usr/bin/slapd</tt>.
ldapmodify -D 'cn=Manager,dc=example,dc=com' -W
dn: cn=config
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/ssl/slapdcert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/ssl/slapdkey.pem
If you are using a signed SSL Certificate from a certification authority such as [https://wiki.archlinux.org/title/Let’s_Encrypt Let’s Encrypt], you will also need to specify the path to the root certificates database and your intermediary certificate.
* You will also need to change ownership of the .pem files and intermediary directories to make them readable to the user <tt>ldap</tt>:
ldapmodify -D 'cn=Manager,dc=example,dc=com' -W
dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/letsencrypt/live/ldap.my-domain.com/chain.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/letsencrypt/live/ldap.my-domain.com/cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/letsencrypt/live/ldap.my-domain.com/privkey.pem
-
add: olcTLSCACertificatePath
olcTLSCACertificatePath: /usr/share/ca-certificates/trust-source
SSLv2/v3
Disable SSLv2/v3 and use strong ciphers.
ldapmodify -D 'cn=Manager,dc=example,dc=com' -W
dn: cn=config
add: olcTLSProtocolMin
olcTLSProtocolMin: 3.3
-
add: olcTLSCipherSuite
olcTLSCipherSuite: DEFAULT:!kRSA:!kDHE
-
TLSProtocolMin specifies the minimum version in wire format, so "3.3" actually means TLSv1.2.
The TLSCipherSuite specifies a list of OpenSSL ciphers from which slapd will choose when negotiating TLS connections, in decreasing order of preference.
* In addition to those specific ciphers, you can use any of the wildcards supported by OpenSSL.
* Note: DEFAULT is a wildcard.
* See [https://man.archlinux.org/man/ciphers.1ssl ciphers(1ssl)] for description of ciphers, wildcards and options supported.
'''Note:''' To see which ciphers are supported by your local OpenSSL installation, type the following: <tt>openssl ciphers -v ALL:COMPLEMENTOFALL</tt>.
* Always test which ciphers will actually be enabled by TLSCipherSuite by providing it to OpenSSL command, like this: <tt>openssl ciphers -v 'DEFAULT'</tt>.
==== Start slapd with SSL ====
'''Note:''' This is not needed for StartTLS which listens on the same port as unencrypted LDAP.
You will have to edit the environment file read by <tt>slapd.service</tt> to change the protocol slapd listens on:
;/etc/conf.d/slapd
SLAPD_URLS="ldaps:///"
SLAPD_OPTIONS=
Localhost connections do not need to use SSL.
* So, if you want to access the server locally you should change the <tt>SLAPD_URLS</tt> line to:
SLAPD_URLS="ldap://127.0.0.1 ldaps:///"
Then [https://wiki.archlinux.org/title/Restart restart] <tt>slapd.service</tt>.
* If it was enabled before, reenable it now.
'''Note:''' If you created a self-signed certificate above, be sure to add <tt>TLS_REQCERT allow</tt> to <tt>/etc/openldap/ldap.conf</tt> on the client, or it will not be able connect to the server.
===Dateien===
===Dateien===
==Anwendungen==
=== Next steps ===
You now have a basic LDAP installation.
* The next step is to design your directory.
* The design is heavily dependent on what you are using it for.
* If you are new to LDAP, consider starting with a directory design recommended by the specific client services that will use the directory ([https://wiki.archlinux.org/title/PAM PAM], [https://wiki.archlinux.org/title/Postfix Postfix], etc).
A directory for system authentication is the [https://wiki.archlinux.org/title/LDAP_authentication LDAP authentication] article.
A nice web frontend is [https://wiki.archlinux.org/title/PhpLDAPadmin phpLDAPadmin].
=== Backup LDAP ===
It is imperative that we have a backup of our LDAP database and configuration in case we ever need to restore for any number of reasons.
==== Export configuration ====
$ sudo -u ldap slapcat -vF /etc/openldap/slapd.d -n 0 -l "$(hostname)-ldap-mdb-config-$(date '+%F').ldif"
==== Export database ====
$ sudo -u ldap slapcat -v -n 1 -l "$(hostname)-ldap-database-$(date '+%F').ldif"
=== Restore LDAP ===
==== Import configuration ====
$ sudo -u ldap slapadd -v -n 0 -F /etc/openldap/slapd.d -l <filename from config export>
==== Import database ====
$ sudo -u ldap slapadd -v -n 1 -F /etc/openldap/slapd.d -l <filename from database export>
=== Troubleshooting ===
==== slapd configuration checking ====
You can check configuration settings with
$ slaptest -F /etc/openldap/slapd.d/ -v
==== Client authentication checking ====
If you cannot connect to your server for non-secure authentication:
$ ldapsearch -x -H ldap://ldaservername:389 -D cn=Manager,dc=example,dc=exampledomain
and for TLS secured authentication with:
$ ldapsearch -x -H ldaps://ldaservername:636 -D cn=Manager,dc=example,dc=exampledomain
==== LDAP server stops suddenly ====
If you notice that slapd seems to start but then stops, try running:
# chown -R ldap:ldap /var/lib/openldap
to allow slapd write access to its data directory as the user "ldap".
==== LDAP server does not start ====
Try starting the server from the command line with debugging output enabled:
# slapd -u ldap -g ldap -h ldaps://ldaservername:636 -d Config,Stats
==Sicherheit==
==Sicherheit==
==Dokumentation==
==Dokumentation==
# [https://www.openldap.org/doc/admin24/ Official OpenLDAP Software 2.4 Administrator's Guide]
===RFC===
===RFC===
===Man-Pages===
===Man-Page===
===Info-Pages===
===Info-Pages===
==Siehe auch==
==Siehe auch==
# [https://wiki.archlinux.org/title/LDAP_Authentication LDAP Authentication]
# [https://wiki.archlinux.org/title/LDAP_Hosts LDAP Hosts]
# [https://wiki.archlinux.org/title/PhpLDAPadmin phpLDAPadmin] is a web interface tool in the style of phpMyAdmin.
==Links==
==Links==
===Projekt-Homepage===
===Projekt===
# https://www.openldap.org/
 
===Weblinks===
===Weblinks===
# https://wiki.archlinux.org/title/OpenLDAP
# [https://aur.archlinux.org/packages/apachedirectorystudio/ apachedirectorystudio]AUR from the [https://wiki.archlinux.org/title/Arch_User_Repository Arch User Repository] is an Eclipse-based LDAP viewer. Works perfect with OpenLDAP installations.
== Weblinks ==
* [https://www.openldap.org/ Offizielle Website] (englisch)
* [https://www.openldap.org/doc/admin24/ OpenLDAP Software 2.4 Administrator's Guide] – Referenzdokumentation für Installation und Konfiguration (englisch)
* [http://www.openldap.org/faq/ OpenLDAP Faq-O-Matic] – Antworten auf oft gestellte Fragen (englisch)
* Volker Schwaberow: ''[http://www.linux-magazin.de/Ausgaben/2001/05/Straffe-Verwaltung OpenLDAP-Praxis. Straffe Verwaltung]'' In: ''[[Linux-Magazin]] 05/2001''.
===Einzelnachweise===
===Einzelnachweise===
<references />
<references />
Zeile 43: Zeile 403:
</div>
</div>


[[Kategorie:Entwurf]]


=TMP=
= TMP =
= OpenLDAP unter Debian 11 =
OpenLDAP ist eine freie und quelloffene Softwareimplementierung von LDAP (Lightweight Directory Access Protocol).
* Es ist ein plattformunabhängiges Protokoll, das für die zentralisierte Authentifizierung und für Verzeichniszugriffsdienste wie E-Mail und andere Anwendungen verwendet werden kann.
 
OpenLDAP ist ein eigenständiger LDAP-Daemon, der seine Bibliotheken und Dienstprogramme zur Verfügung stellt.
* Außerdem bietet es Unterstützung für TLS-Zertifikat-Authentifizierung und SASL-Authentifizierung.
 
In diesem Artikel zeigen wir dir, wie du OpenLDAP auf Debian 11 Bullseye installierst und konfigurierst.
 
== Voraussetzungen ==
* Ein Debian 11 Server.
* Ein Nicht-Root-Benutzer mit sudo/root-Rechten.
 
== Installation von OpenLDAP unter Debian 11 ==
Zunächst installierst du die OpenLDAP-Pakete auf dem Debian 11-Server.
* Das Standard-Debian-Repository bietet die stabile Version OpenLDAP v2.4.
 
Bevor du mit der Installation der OpenLDAP-Pakete beginnst, führe den Befehl „apt“ aus, um das Repository von Debian zu aktualisieren.
 
sudo apt update
 
Installiere nun die OpenLDAP-Pakete'''„slapd'''“ und'''„ldap-utils'''„.
* Das Paket'''„slapd'''“ ist das Hauptpaket von OpenLDAP und das Paket'''„ldap-utils'''“ stellt Kommandozeilenprogramme für die Verwaltung des OpenLDAP-Servers bereit.
 
sudo apt install slapd ldap-utils
 
Gib'''„Y'''“ ein und drücke'''„ENTER'''„, um die Installation zu bestätigen.
 
[[Image:Bild1.png|top|alt="Slapd installieren"]]
 
Nun wirst du aufgefordert, das Passwort für den OpenLDAP-Admin-Benutzer festzulegen.
 
Gib dein Passwort ein, wähle'''„OK'''“ und drücke dann'''„ENTER'''„.
 
[[Image:Bild2.png|top|alt="Administrator-Passwort OpenLDAP"]]
 
Wiederhole dein Passwort, wähle'''„OK'''“ und drücke erneut'''„EN'''TER“.
* Die Installation von OpenLDAP ist damit abgeschlossen.
 
[[Image:Bild3.png|top|alt="Wiederholung des Admin-Passworts"]]
 
== OpenLDAP-Server konfigurieren ==
Nachdem du die OpenLDAP-Pakete installiert hast, musst du nun OpenLDAP auf dem Debian-Server einrichten.
 
Bevor wir weitermachen, richten wir mit dem folgenden Befehl den '''FQDN (Fully Qualified Domain Name)''' des Servers ein.
 
sudo hostnamectl set-hostname ldap.mydomain.local
 
Bearbeite nun die Datei''„/etc/hosts''“ mit dem Editor nano.
 
sudo nano /etc/hosts
 
Kopiere die folgende Konfiguration und füge sie ein.
* Achte darauf, dass du die IP-Adresse mit der IP-Adresse deines Servers und den FQDN mit deinem Hostnamen und deinem lokalen Domänennamen änderst.
 
192.168.10.50 ldap.mydomain.local ldap
 
Speichere und schließe die Datei.
 
Melde dich nun von deiner aktuellen SSH-Sitzung ab und logge dich erneut auf deinem Server ein.
 
Als Nächstes führst du den folgenden Befehl aus, um das OpenLDAP-Paket''„slapd''“ neu zu konfigurieren.
 
sudo dpkg-reconfigure slapd
 
Wähle '''Nein''', wenn du gefragt wirst, ob du die alte OpenLDAP-Konfiguration löschen/beenden willst.
* Dadurch bleibt die alte Konfiguration verfügbar.
 
[[Image:Bild4.png|top|alt="Wähle no omit database OpenLDAP"]]
 
Gib nun den lokalen DNS-Domänennamen für deinen OpenLDAP-Server ein und wähle '''OK'''.
 
[[Image:Bild5.png|top|alt="DNS-Domäne OpenLDAP einrichten"]]
 
Gib den Namen der Organisation ein und wähle '''OK'''.
* Optional kannst du ihn als Standard mit demselben Namen wie den Domänennamen belassen.
 
[[Image:Bild6.png|top|alt="Organisationsname OpenLDAP einrichten"]]
 
Gib nun das OpenLDAP-Administratorpasswort ein und wähle '''OK''', um fortzufahren.
 
[[Image:Bild7.png|top|alt="Admin-Passwort eingeben OpenLDAP"]]
 
Bestätige das OpenLDAP-Administratorpasswort und wähle erneut '''OK'''.
 
[[Image:Bild8.png|top|alt="Bestätige das Admin-Passwort"]]
 
Wähle '''NEIN''', wenn du gefragt wirst, ob du die alte slapd-Datenbank löschen willst.
 
[[Image:Bild9.png|top|alt="Alte Datenbank nicht löschen OpenLDAP"]]
 
Wähle nun '''Ja''', um die alte slapd-Datenbank zu verschieben.
 
[[Image:Bild10.png|top|alt="Alte slapd-Datenbank verschieben"]]
 
Die Konfiguration der OpenLDAP-Pakete ist nun abgeschlossen.
 
Um die OpenLDAP-Konfiguration zu überprüfen, führe den unten stehenden Befehl''„slapcat''“ aus.
 
sudo slapcat
 
Jetzt solltest du eine Ausgabe ähnlich dem folgenden Screenshot erhalten.
* Der Domänenname und der Organisationsname für OpenLDAP sind korrekt mit'''„mydomain.local'''“ angegeben.
 
[[Image:Bild11.png|top|alt="slapcat Befehl"]]
 
Starte abschließend den''„slapd''„-Dienst neu, um die neuen Änderungen zu übernehmen. Überprüfe dann den''„slapd''„-Dienst.
sudo systemctl restart slapd
sudo systemctl status slapd
 
Jetzt sollte der''„slapd''„-Dienst den Status'''„aktiv (läuft)'''“ haben.
 
[[Image:Bild12.png|top|alt="Starte und überprüfe den slapd-Dienst neu"]]
 
== Einrichten der UFW-Firewall ==
Wenn du den Debian-Server mit aktivierter UFW-Firewall betreibst, musst du den LDAP- und LDAPS-Dienst zur UFW-Firewall hinzufügen.
 
Es wird empfohlen, die Firewall in deiner lokalen Umgebung zu verwenden, da sie die Sicherheit deines Servers erhöht.
 
Führe nun den unten stehenden ufw-Befehl aus, um den '''LDAP-''' und '''LDAPS-Dienst''' zur ufw-Firewall hinzuzufügen.
 
sudo ufw allow LDAP
sudo ufw allow LDAPS
 
Als nächstes lädst du die UFW-Firewall-Regel mit dem folgenden Befehl neu.
 
sudo ufw reload
 
Überprüfe abschließend die Liste der aktivierten Dienste in deiner UFW-Firewall mit dem folgenden Befehl.
 
sudo ufw status
 
Du solltest eine Ausgabe wie im folgenden Screenshot erhalten.
* Die LDAP- und LDAPS-Dienste wurden zur UFW-Firewall hinzugefügt.
 
[[Image:Bild13.png|top|alt="UFW-Firewall einrichten"]]
 
Jetzt kannst du die Gruppen und Benutzer des OpenLDAP-Servers einrichten.
 
== Einrichten der Benutzergruppe ==
Der OpenLDAP-Server wird oft für die Authentifizierung einer Gruppe von Computern oder Servern verwendet.
* In diesem Schritt richtest du die Gruppe auf dem OpenLDAP-Server mithilfe der LDIF-Datei (LDAP Data Interchange Format) ein.
 
Die LDIF ist eine Formatierungsdatei der LDAP-Einträge und kann zur Verwaltung von Benutzern und Gruppen auf dem OpenLDAP-Server verwendet werden.
 
Erstelle mit dem ''nano-Editor'' eine neue Datei''„/etc/ldap/users.ldif''„.
 
sudo nano /etc/ldap/users.ldif
 
Kopiere die folgende Konfiguration und füge sie ein.
* Mit dieser Konfiguration wird eine neue Gruppe mit dem Namen'''„People'''“ für die Domäne'''„mydomain.local'''“ erstellt.
 
dn: ou=People,dc=mydomain,dc=local
objectClass: organizationalUnit
ou: People
 
Speichere und schließe die Datei.
 
Als Nächstes führst du den Befehl''„ldapadd''“ aus, um die in der Datei''„users.ldif“'' definierte Gruppe hinzuzufügen.
 
sudo ldapadd -D "cn=admin,dc=mydomain,dc=local" -W -H ldapi:/// -f /etc/ldap/users.ldif
 
Du wirst aufgefordert, das „admin“-Passwort des OpenLDAP-Servers einzugeben.
* Wenn der Vorgang erfolgreich abgeschlossen ist, solltest du eine Meldung wie''„adding new entry „ou=People,dc=mydomain,dc=local“''“ sehen.
 
[[Image:Bild14.png|top|alt="Gruppe einrichten Menschen OpenLDAP"]]
 
Um die Gruppe'''„People'''“ zu überprüfen, führe den unten stehenden Befehl''„ldapsearch''“ aus.
* Dieser Befehl zeigt die verfügbaren Gruppen auf dem OpenLDAP-Server an.
 
sudo ldapsearch -x -b "dc=mydomain,dc=local" ou
 
Jetzt solltest du sehen, dass die Gruppe'''„People'''“ auf dem OpenLDAP-Server verfügbar ist.
 
[[Image:Bild15.png|top|alt="Gruppe OpenLDAP anzeigen"]]
 
== Einrichten eines neuen Benutzers ==
Nachdem du die Gruppe auf dem OpenLDAP-Server eingerichtet hast, kannst du nun einen neuen Benutzer zum OpenLDAP-Server hinzufügen.
* Auch das kannst du mit der LDIF-Datei und dem Kommandozeilen-Tool „ldapadd“ machen.
 
Erstelle nun mit dem ''nano-Editor'' eine neue Datei''„alice.ldif''„.
 
sudo nano alice.ldif
 
Kopiere die folgende Konfiguration und füge sie ein.
* Achte darauf, dass du das Passwort'''„AlicePassword'''“ durch ein sicheres Passwort ersetzt.
 
In diesem Beispiel erstellst du einen neuen Benutzer namens'''„alice'''“ mit dem Heimatverzeichnis'''„/home/alice'''“ und der Standardshell'''„/bin/bash'''„.
* Außerdem ist der Benutzer'''„alice'''“ Teil der Gruppe'''„People'''„.
 
<nowiki># Add user alice to LDAP Server</nowiki>
dn: cn=alice,ou=People,dc=mydomain,dc=local
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: alice
uid: alice
uidNumber: 10001
gidNumber: 10001
homeDirectory: /home/alice
userPassword: AlicePassword
loginShell: /bin/bash
 
Speichere und schließe die Datei.
 
Als Nächstes führst du den Befehl''„ldapadd''“ aus, um einen neuen Benutzer auf der Grundlage der Datei''„alice.ldif''“ hinzuzufügen.
 
sudo ldapadd -D "cn=admin,dc=mydomain,dc=local" -W -H ldapi:/// -f alice.ldif
 
Gib das OpenLDAP-Administratorkennwort ein und du solltest die Ausgabe''„adding new entry „cn=alice,ou=People,dc=mydomain,dc=local“''“ erhalten, was bedeutet, dass der neue Benutzer'''„alice'''“ zum OpenLDAP-Server hinzugefügt wurde.
 
[[Image:Bild16.png|top|alt="Neuen Benutzer anlegen OpenLDAP"]]
 
Führe den unten stehenden Befehl''„ldapsearch''“ aus, um die Liste der Benutzer auf dem OpenLDAP-Server zu erhalten.
 
sudo ldapsearch -x -b "ou=People,dc=mydomain,dc=local"
 
Du solltest eine Ausgabe wie im folgenden Screenshot erhalten.
* Der neue Benutzer'''„alice'''“ ist jetzt auf dem OpenLDAP-Server verfügbar.
 
[[Image:Bild17.png|top|alt="Überprüfung von OpenLDAP-Benutzern"]]
 
== Fazit ==
Herzlichen Glückwunsch! Du hast nun erfolgreich den OpenLDAP-Server auf dem Debian 11-Server installiert.
* Außerdem hast du gelernt, wie du mit den LDIF-Dateien (LDAP Data Interchange Format) und dem Kommandozeilen-Tool „ldapadd“ Gruppen und Benutzer hinzufügen kannst.
 
Im nächsten Schritt möchtest du vielleicht mehr darüber erfahren, wie du Linux-Rechner wie Ubuntu und CentOS zum OpenLDAP-Server hinzufügst.
 
Quell: [https://www.howtoforge.de/anleitung/so-installierst-du-openldap-unter-debian-11/ https://www.howtoforge.de/anleitung/so-installierst-du-openldap-unter-debian-11/]
 
= LDAP-Verzeichnis =
OpenLDAP ist eine Umsetzung des LDAP-Protokolls; mit anderen Worten, es ist eine Spezialdatenbank zum Speichern von Verzeichnissen.
* Im gebräuchlichsten Anwendungsfall macht die Verwendung eines LDAP-Servers es möglich, die Verwaltung von Benutzerkonten und der dazugehörigen Berechtigungen zusammenzufassen.
* Außerdem lässt sich eine LDAP-Datenbank leicht kopieren, wodurch die Einrichtung mehrerer synchronisierter LDAP-Server möglich wird.
* Wenn das Netzwerk und die Benutzerzahl schnell anwachsen, kann so die Arbeitslast auf mehrere Server verteilt werden.
 
LDAP-Daten sind strukturiert und hierarchisch.
* Die Struktur wird durch „Schemata“ festgelegt, die die Art der Objekte, die die Datenbank speichern kann, zusammen mit einer Liste all ihrer möglichen Attribute beschreiben.
* Die Syntax, die zum Verweis auf ein bestimmtes Objekt der Datenbank verwendet wird, basiert auf diesen Strukturen, wodurch sich ihre Komplexität erklärt.
 
== Installieren ==
Das Paket slapd enthält den OpenLDAP-Server.
* Das Paket ldap-utils umfasst Befehlszeilen-Werkzeuge für die Zusammenarbeit mit LDAP-Servern.
 
Die Installation von slapd stellt normalerweise nur die Frage nach dem Administratorpasswort und es ist unwahrscheinlich, dass die resultierende Datenbank Ihren Bedürfnissen entspricht.
* Glücklicherweise können Sie mit einem einfachen <tt>dpkg-reconfigure slapd</tt> die LDAP-Datenbank mit mehr Details neu konfigurieren: * Konfigurierung des OpenLDAP-Servers auslassen? Natürlich nicht, wir wollen diesen Dienst konfigurieren.
* DNS-Domain-Name: „<tt>falcot.com</tt>“.
* Name der Organisation: „Falcot Corp.“.
* Ein Verwaltungspasswort muss eingegeben werden.
* Zu verwendendes Datenbank-Backend: „MDB“.
* Möchten Sie, dass die Datenbank entfernt wird, wenn slapd gelöscht wird? Nein.
* Es wäre nicht sinnvoll, den Verlust der Datenbank im Falle eines Versehens zu riskieren.
* Die alte Datenbank verschieben? Diese Frage wird nur gestellt, wenn die Konfigurierung vorgenommen wird, während eine Datenbank bereits existiert.
* Antworten Sie nur mit „ja“, wenn Sie tatsächlich wieder mit einer leeren Datenbank beginnen möchten, zum Beispiel, wenn Sie <tt>dpkg-reconfigure slapd</tt> unmittelbar nach der ersten Installierung ausführen.
 
== LDIF-Format ==
Eine LDIF-Datei (''LDAP Data Interchange Format'') ist eine übertragbare Textdatei, die den Inhalt einer LDAP-Datenbank (oder einen Teil davon) beschreibt; sie kann dazu verwendet werden, die Daten auf einen beliebigen anderen LDAP-Server einzuspeisen.
 
Eine minimale Datenbank ist jetzt konfiguriert, wie die folgende Anfrage zeigt:
$ '''ldapsearch -x -b dc=falcot,dc=com'''
# extended LDIF
#
# LDAPv3
# base <dc=falcot,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# falcot.com
dn: dc=falcot,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: Falcot Corp
dc: falcot
# admin, falcot.com
dn: cn=admin,dc=falcot,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
 
Die Anfrage ergibt zwei Objekte: die Organisation selbst und den verwaltenden Benutzer.
 
== Verzeichnis ausfüllen ==
Da eine leere Datenbank nicht sehr nützlich ist, werden wir alle bestehenden Verzeichnisse in sie einspeisen; hierzu gehören die Benutzer-, Gruppen-, Dienst- und Host-Datenbanken.
 
Das Paket migrationtools stellt einen Satz von Skripten bereit, die dazu dienen, Daten aus den Standard-Unix-Verzeichnissen (<tt>/etc/passwd</tt>, <tt>/etc/group</tt>, <tt>/etc/services</tt>, <tt>/etc/hosts</tt> und so weiter) zu extrahieren, diese Daten zu konvertieren und sie in die LDAP-Datenbank einzuspeisen.
 
Nachdem das Paket installiert ist, muss die Datei <tt>/etc/migrationtools/migrate_common.ph</tt> editiert werden; die Optionen <tt>IGNORE_UID_BELOW</tt> and <tt>IGNORE_GID_BELOW</tt> müssen aktiviert werden (es genügt, das Kommentarzeichen zu entfernen) und die Variablen <tt>DEFAULT_MAIL_DOMAIN</tt>/<tt>DEFAULT_BASE</tt> müssen aktualisiert werden.
 
Der tatsächliche Übertragungsvorgang wird mit dem Befehl <tt>migrate_all_online.sh</tt> folgendermaßen ausgeführt:
 
# '''cd /usr/share/migrationtools'''
# '''PERL5LIB="${PERL5LIB}:/etc/migrationtools" LDAPADD="/usr/bin/ldapadd -c" ETC_ALIASES=/dev/null ./migrate_all_online.sh'''
 
Das Skript <tt>migrate_all_online.sh</tt> stellt einige Fragen zur LDAP-Datenbank, auf die die Daten übertragen werden sollen. [https://debian-handbook.info/browse/de-DE/stable/sect.ldap-directory.html#tab-migrate-all Tabelle] fasst die Antworten zusammen, die im Fallbeispiel Falcot gegeben wurden.
 
'''Antworten auf die vom Skript <tt>migrate_all_online.sh</tt> gestellten Fragen'''
 
{|| class="wikitable sortable" 
|-
! | Frage
! | Antwort
|-
|| X.500 Benennungskontext
|| <tt>dc=falcot,dc=com</tt>
|-
|| Hostname des LDAP-Servers
|| <tt>localhost</tt>
|-
|| Manager-DN
|| <tt>cn=admin,dc=falcot,dc=com</tt>
|-
|| Verbindungslegitimation
|| das Verwaltungspasswort
|-
|| Ein DUAConfigProfil anlegen
|| nein
|-
|}
 
You might notice that we extend the <tt>PERL5LIB</tt> variable.
* This is due to Debian bug report #982666.
 
→ [https://bugs.debian.org/982666 https://bugs.debian.org/982666]
 
As you might have also noticed, we deliberately ignore migration of the <tt>/etc/aliases</tt> file, since the standard schema as provided by Debian does not include the structures that this script uses to describe email aliases.
* Should we want to integrate this data into the directory, the <tt>/etc/ldap/schema/misc.schema</tt> file should be added to the standard schema.
 
'''''HILFSPROGRAMM'' Ein LDAP-Verzeichnis durchsuchen'''
 
Das Programm <tt>jxplorer</tt> (im gleichnamigen Paket) ist ein grafisches Hilfsprogramm, das es ermöglicht, eine LDAP-Datenbank zu durchsuchen und zu editieren.
* Es ist ein interessantes Programm, das einem Administrator einen guten Überblick über die hierarchische Struktur der LDAP-Daten gibt.
 
Beachten Sie auch die Verwendung der Option <tt>-c</tt> des Befehls <tt>ldapadd</tt>; diese Option bestimmt, dass der Verarbeitungsablauf im Falle eines Fehlers nicht abgebrochen wird.
* Die Verwendung dieser Option ist notwendig, da die Konvertierung der Datei <tt>/etc/services</tt> häufig einige Fehler hervorruft, die ohne Gefahr ignoriert werden können.
 
== Konten mit LDAP verwalten ==
Jetzt, da die LDAP-Datenbank einige nützliche Informationen enthält, ist es an der Zeit diese Daten zu nutzen.
* Dieser Abschnitt richtet sein Augenmerk darauf, wie ein Linux-System so zu konfigurieren ist, dass die verschiedenen Systemverzeichnisse die LDAP-Datenbank benutzen.
 
=== NSS konfigurieren ===
Das NSS-System (Name Service Switch, siehe Seitenleiste [https://debian-handbook.info/browse/de-DE/stable/sect.user-group-databases.html#sidebar.intro-nss WEITERE SCHRITTE][https://debian-handbook.info/browse/de-DE/stable/sect.user-group-databases.html#sidebar.intro-nss  NSS und Systemdatenbanken]) ist ein modulares System, das Informationen für Systemverzeichnisse festlegen oder einholen kann.
* Um LDAP als Datenquelle für NSS verwenden zu können, muss das Paket libnss-ldap installiert werden.
* Bei seiner Installierung werden einige Fragen gestellt; die Antworten sind in [https://debian-handbook.info/browse/de-DE/stable/sect.ldap-directory.html#tab-libnss-ldap Tabelle] zusammengefasst.
 
'''Configuring the libnss-ldap package:'''
{|| class="wikitable sortable" 
|-
! | Frage
! | Antwort
|-
|| LDAP server URI (Uniform Resource Identifier)
|| <tt>ldapi://ldap.falcot.com</tt>
|-
|| Kennzeichnender Name der Suchbasis
|| <tt>dc=falcot,dc=com</tt>
|-
|| Zu verwendende LDAP-Version
|| <tt>3</tt>
|-
|| LDAP-Administratorkonto
|| <tt>cn=admin,dc=falcot,dc=com</tt>
|-
|| Passwort des LDAP-Administratorkontos
|| das Verwaltungspasswort
|-
|| Dem LDAP-Administrationskonto erlauben, sich wie lokales Root zu verhalten?
|| <tt>yes</tt>
|-
|| Benötigt die LDAP-Datenbank eine Anmeldung?
|| nein
|-
|}
 
Die Datei <tt>/etc/nsswitch.conf</tt> muss nun angepasst werden, um NSS so zu konfigurieren, dass es das neu installierte <tt>ldap</tt>-Modul benutzt.
* Sie können das in <tt>/usr/share/doc/libnss-ldap/examples/nsswitch.ldap</tt> enthaltene Beispiel verwenden oder Ihre bestehende Konfiguration bearbeiten.
 
; /etc/nsswitch.conf
#ident $Id: nsswitch.ldap,v 2.4 2003/10/02 02:36:25 lukeh Exp $
#
# An example file that could be copied over to /etc/nsswitch.conf; it
# uses LDAP conjunction with files.
#
# "hosts:" and "services:" in this file are used only if the
# /etc/netconfig file has a "-" for nametoaddr_libs of "inet" transports.
# the following lines obviate the "+" entry in /etc/passwd and /etc/group.
passwd:        files ldap
shadow:        files ldap
group:          files ldap
# consult DNS first, we will need it to resolve the LDAP host. (If we
# can't resolve it, we're in infinite recursion, because libldap calls
# gethostbyname().
* Careful!)
hosts:          dns ldap
# LDAP is nominally authoritative for the following maps.
services:  ldap [NOTFOUND=return] files
networks:  ldap [NOTFOUND=return] files
protocols:  ldap [NOTFOUND=return] files
rpc:        ldap [NOTFOUND=return] files
ethers:    ldap [NOTFOUND=return] files
# no support for netmasks, bootparams, publickey yet.
netmasks:  files
bootparams: files
publickey:  files
automount:  files
# I'm pretty sure nsswitch.conf is consulted directly by sendmail,
# here, so we can't do much here. Instead, use bbense's LDAP
# rules ofr sendmail.
aliases:    files
sendmailvars:  files
# Note: there is no support for netgroups on Solaris (yet)
netgroup:  ldap [NOTFOUND=return] files
 
Das <tt>ldap</tt>-Modul wird normalerweise vor den anderen aufgenommen und wird daher zuerst abgefragt.
* Eine beachtenswerte Ausnahme stellt der <tt>hosts</tt>-Dienst dar, da zunächst der DNS befragt werden muss (um <tt>ldap.falcot.com</tt> aufzulösen), bevor mit dem LDAP-Server Verbindung aufgenommen werden kann.
* Ohne diese Ausnahme würde eine Anfrage nach einem Hostnamen an den LDAP-Server gerichtet; dies würde eine Namensauflösung für den LDAP-Server auslösen, und so weiter in einer unendlichen Schleife.
 
Falls der LDAP-Server als maßgeblich angesehen werden soll (und die lokalen vom Modul <tt>files</tt> benutzten Dateien ignoriert werden sollen), können die Dienste mit der folgenden Syntax konfiguriert werden:
<tt>''dienst'': ldap [NOTFOUND=return] files</tt>.
 
Falls der gesuchte Eintrag in der LDAP-Datenbank nicht vorhanden ist, wird die Anfrage die Antwort „nicht vorhanden“ ergeben, selbst wenn er in einer der lokalen Dateien vorhanden ist; diese lokalen Dateien werden nur benutzt, wenn der LDAP-Service abgeschaltet ist.
 
=== PAM konfigurieren ===
Dieser Abschnitt beschreibt die Konfiguration von PAM (siehe Seitenleiste [https://debian-handbook.info/browse/de-DE/stable/basic-configuration.html#sidebar.intro-pam HINTER DEN KULISSEN][https://debian-handbook.info/browse/de-DE/stable/basic-configuration.html#sidebar.intro-pam  ][https://debian-handbook.info/browse/de-DE/stable/basic-configuration.html#sidebar.intro-pam /etc/environment][https://debian-handbook.info/browse/de-DE/stable/basic-configuration.html#sidebar.intro-pam  und ][https://debian-handbook.info/browse/de-DE/stable/basic-configuration.html#sidebar.intro-pam /etc/default/locale]), die es Anwendungen ermöglicht, die gegenüber der LDAP-Datenbank erforderlichen Authentifizierungen vorzunehmen.
 
'''''VORSICHT'' Fehlerhafte Authentifizierung'''
Die Änderung der von verschiedenen Programmen verwendeten standardmäßigen PAM-Konfiguration ist ein heikler Vorgang.
* Ein Fehler kann zu einer fehlerhaften Authentifizierung führen, die das Anmelden verhindern kann.
* Eine gute Vorsichtsmaßnahme besteht daher darin, eine Root-Konsole offen zu halten.
* So können mit geringem Aufwand eventuell auftretende Konfigurierungsfehler behoben und Dienste neu gestartet werden.
 
Das LDAP-Modul für PAM wird von dem Paket libpam-ldap bereitgestellt.
* Beim Installieren dieses Pakets werden einige Fragen gestellt, die denen bei libnss-ldap ähnlich sind; einige Konfigurationsparameter (wie zum Beispiel die URI des LDAP-Servers) werden sogar mit dem Paket libnss-ldap gemeinsam benutzt.
* Die Antworten sind in [https://debian-handbook.info/browse/de-DE/stable/sect.ldap-directory.html#tab-libpam-ldap Tabelle] zusammengefasst.
 
;Konfigurierung von ''libpam-ldap
{|| class="wikitable sortable" 
|-
! | Frage
! | Antwort
|-
|| Dem LDAP-Administrationskonto erlauben, sich wie lokales Root zu verhalten?
|| Ja.
* Dies ermöglicht es, den normalen <tt>passwd</tt>-Befehl zur Änderung von Passwörtern zu verwenden, die in der LDAP-Datenbank gespeichert sind.
|-
|| Erfordert die LDAP-Datenbank eine Anmeldung?
|| nein
|-
|| LDAP account for root:
|| <tt>cn=admin,dc=falcot,dc=com</tt>
|-
|| LDAP administrative password:
|| das Verwaltungspasswort der LDAP-Datenbank
|-
|| Local encryption algorithm to use for passwords:
|| <tt>crypt</tt>
|-
|| PAM profiles to enable:
|| LDAP Authentication is among the enabled profiles
|-
|}
 
Durch das Installieren von libpam-ldap wird die standardmäßige PAM-Konfiguration, die in den Dateien <tt>/etc/pam.d/common-auth</tt>, <tt>/etc/pam.d/common-password</tt> und <tt>/etc/pam.d/common-account</tt> festgelegt ist, automatisch angepasst.
* Dieser Vorgang verwendet das spezielle Hilfsprogramm <tt>pam-auth-update</tt> (vom Paket libpam-runtime bereitgestellt).
* Dieses Programm kann auch vom Administrator eingesetzt werden, falls er PAM-Module aktivieren oder deaktivieren möchte.
 
=== LDAP-Datenaustausch absichern ===
Standardmäßig überträgt das LDAP-Protokoll im Klartext über das Netzwerk; dies gilt auch für die (verschlüsselten) Passwörter.
* Da die verschlüsselten Passwörter aus dem Netzwerk entnommen werden können, werden sie anfällig für Wörterbuchangriffe sein.
* Dies kann durch den Einsatz einer zusätzlichen Kryptografieschicht verhindert werden; die Aktivierung dieser Schicht ist das Thema dieses Abschnitts.
 
==== Den Server konfigurieren ====
Der erste Schritt besteht darin, ein Schlüsselpaar für den LDAP-Server zu erstellen (bestehend aus einem öffentlichen Schlüssel und einem privaten Schlüssel).
* Die Falcot-Administratoren verwenden wieder ''easy-rsa'', um es zu erzeugen (siehe [https://debian-handbook.info/browse/de-DE/stable/sect.x509-cert.html#sect.easy-rsa Abschnitt 10.2.2, „Public-Key-Infrastrultur: ][https://debian-handbook.info/browse/de-DE/stable/sect.x509-cert.html#sect.easy-rsa easy-rsa][https://debian-handbook.info/browse/de-DE/stable/sect.x509-cert.html#sect.easy-rsa “]).
* Wenn Sie <tt>./easyrsa build-server-full ldap.falcot.com nopass</tt> ausführen, werden Sie nach dem "Common Name" gefragt.
* Die Antwort auf diese Frage ''muss'' der vollqualifizierte Hostname für den LDAP-Server sein; in unserem Fall <tt>ldap.falcot.com</tt>.
 
Dieser Befehl erstellt ein Zertifikat in der Datei <tt>pki/issued/ldap.falcot.com.crt</tt>; der dazugehörige private Schlüssel wird in der Datei <tt>pki/private/ldap.falcot.com.key</tt> abgespeichert.
 
Jetzt müssen diese Schlüssel an ihrem Standard-Platz installiert werden, und wir müssen dafür Sorge tragen, dass die private Datei vom LDAP-Sever gelesen werden kann, der unter der Userkennung <tt>openldap</tt> läuft:
# '''adduser openldap ssl-cert'''
Adding user `openldap' to group `ssl-cert' ...
Adding user openldap to group ssl-cert
Done.
# '''mv pki/private/ldap.falcot.com.key /etc/ssl/private/ldap.falcot.com.key'''
# '''chown root.ssl-cert /etc/ssl/private/ldap.falcot.com.key'''
# '''chmod 0640 /etc/ssl/private/ldap.falcot.com.key'''
# '''mv pki/issued/ldap.falcot.com.crt /etc/ssl/certs/ldap.falcot.com.pem'''
# '''chown root.root /etc/ssl/certs/ldap.falcot.com.pem'''
# '''chmod 0644 /etc/ssl/certs/ldap.falcot.com.pem'''
 
Der Hintergrundprozess <tt>slapd</tt> muss ebenfalls dazu gebracht werden, diese Schlüssel für die Kryptografie zu verwenden.
* Die Konfiguration des LDAP-Servers wird dynamisch verwaltet: Die Konfiguration kann mit normalen LDAP-Vorgänge innerhalb der Objekt-Hierarchie <tt>cn=config</tt> aktualisiert werden und der Server aktualisiert <tt>/etc/ldap/slapd.d</tt> in Echtzeit, um die Konfiguration anhaltend zu machen. <tt>Ldapmodify</tt> ist also das geeignete Werkzeug, um die Konfiguration zu aktualisieren:
 
; ''slapd'' für eine Kryptografie konfigurieren
# '''cat >ssl.ldif <<END'''
dn: cn=config
changetype: modify
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ldap.falcot.com.key
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ldap.falcot.com.pem
END
# '''ldapmodify -Y EXTERNAL -H ldapi:/// -f ssl.ldif'''
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
# '''systemctl restart slapd.service'''
# '''ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config -s base | grep TLS'''
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
olcTLSCertificateFile: /etc/ssl/certs/ldap.falcot.com.pem
olcTLSCertificateKeyFile: /etc/ssl/certs/ldap.falcot.com.key
 
; WERKZEUG <tt>ldapvi</tt> um ein LDAP-Verzeichnis zu editieren
 
With ldapvi, you can display an LDIF output of any part of the LDAP directory, make some changes in the text editor, and let the tool do the corresponding LDAP operations for you.
 
Es ist deshalb eine komfortable Methode, die Konfiguration des LDAP-Servers einfach durch Ändern der Hierarchie <tt>cn=config</tt> auf dem Laufenden zu halten.
# '''ldapvi -Y EXTERNAL -h ldapi:/// -b cn=config'''
 
Der letzte Schritt zur Aktivierung der Kryptografie besteht darin, die Variable <tt>SLAPD_SERVICES</tt> in der Datei <tt>/etc/default/slapd</tt> zu ändern.
* Wir gehen dabei auf Nummer Sicher und deaktivieren nicht abgesichertes LDAP vollständig.
 
; ''/etc/default/slapd''
# Default location of the slapd.conf file or slapd.d cn=config directory.
* If
# empty, use the compiled-in default (/etc/ldap/slapd.d with a fallback to
# /etc/ldap/slapd.conf).
SLAPD_CONF=
# System account to run the slapd server under.
* If empty the server
# will run as root.
SLAPD_USER="openldap"
# System group to run the slapd server under.
* If empty the server will
# run in the primary group of its user.
SLAPD_GROUP="openldap"
# Path to the pid file of the slapd server.
* If not set the init.d script
# will try to figure it out from $SLAPD_CONF (/etc/ldap/slapd.d by
# default)
SLAPD_PIDFILE=
# slapd normally serves ldap only on all TCP-ports 389.
* slapd can also
# service requests on TCP-port 636 (ldaps) and requests via unix
# sockets.
# Example usage:
# SLAPD_SERVICES="ldap://127.0.0.1:389/ ldaps:/// ldapi:///"
SLAPD_SERVICES="ldaps:/// ldapi:///"
# If SLAPD_NO_START is set, the init script will not start or restart
# slapd (but stop will still work).  Uncomment this if you are
# starting slapd via some other means or if you don't want slapd normally
# started at boot.
#SLAPD_NO_START=1
# If SLAPD_SENTINEL_FILE is set to path to a file and that file exists,
# the init script will not start or restart slapd (but stop will still
# work).  Use this for temporarily disabling startup of slapd (when doing
# maintenance, for example, or through a configuration management system)
# when you don't want to edit a configuration file.
SLAPD_SENTINEL_FILE=/etc/ldap/noslapd
# For Kerberos authentication (via SASL), slapd by default uses the system
# keytab file (/etc/krb5.keytab).  To use a different keytab file,
# uncomment this line and change the path.
#export KRB5_KTNAME=/etc/krb5.keytab
# Additional options to pass to slapd
SLAPD_OPTIONS=""
 
==== Den Client konfigurieren ====
Auf der Client-Seite muss die Konfiguration der Module ''libpam-ldap'' und ''libnss-ldap'' angepasst werden um einen <tt>ldaps://</tt> URI zu nutzen zu können.
 
LDAP clients also need to be able to authenticate the server.
* In an X.509 public key infrastructure, public certificates are signed by the key of a certificate authority (CA).
* With ''easy-rsa'', the Falcot administrators have created their own CA and they now need to configure the system to trust the signatures of Falcot's CA.
* This can be done by putting the CA certificate in <tt>/usr/local/share/ca-certificates</tt> and running <tt>update-ca-certificates</tt>.
 
# '''cp pki/ca.crt /usr/local/share/ca-certificates/falcot.crt'''
# '''update-ca-certificates'''
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
Adding debian:falcot.pem
done.
done.
 
Nicht zuletzt kann der voreingestellte URI und die Basis-DN, die von diversen Kommandozeilen-Tools verwendet werden, können in <tt>/etc/ldap/ldap.conf</tt> geändert werden.
* Das erspart einiges an Tipparbeit.
 
; /etc/ldap/ldap.conf
#
# 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
# TLS certificates (needed for GnuTLS)
TLS_CACERT      /etc/ssl/certs/ca-certificates.crt
 
Quelle: [https://debian-handbook.info/browse/de-DE/stable/sect.ldap-directory.html https://debian-handbook.info/browse/de-DE/stable/sect.ldap-directory.html]
[[Kategorie:LDAP]]

Aktuelle Version vom 6. November 2024, 13:05 Uhr

OpenLDAP is an open-source implementation of the LDAP protocol

Beschreibung

OpenLDAP ist eine Implementierung des LDAP, die als freie Software unter der der BSD-Lizenz ähnlichen OpenLDAP Public License veröffentlicht wird. OpenLDAP ist Bestandteil der meisten aktuellen Linux-Distributionen und läuft auch unter verschiedenen Unix-Varianten, macOS und verschiedenen Windows-Versionen.

Da OpenLDAP den LDAP-Standard umsetzt, ist es mit OpenLDAP möglich, eine zentrale Benutzerdatenverwaltung aufzubauen und zentral zu warten.

Vergleich zu anderen Lösungen

Da OpenLDAP die Referenzimplementierung des Protokolls ist, werden Schemadateien sorgfältig auf Protokollkonformität geprüft. Dies führt gelegentlich zu Fehlermeldungen, wenn mangelhafte Schemadateien, die von Directory Server Agents (DSA) anderer Hersteller akzeptiert werden, in ein OpenLDAP-System übertragen werden.

Durch die Bereitstellung unterschiedlicher Backends und Overlays lassen sich Protokollerweiterungen und erweiterte Operationen (extended operations) sehr leicht realisieren. Das SQL-Backend leitet die Suchergebnisse einer RDBM-Suche an den DSA weiter, so dass der auftraggebende LDAP-Client ein protokollgerechtes Datenpaket empfängt.

Elemente

Das Softwarepaket umfasst neben dem Server auch weitere Werkzeuge zur Konfiguration und benötigte Bibliotheken. Es besteht hauptsächlich aus folgenden Bestandteilen:

  • slapd – stand-alone LDAP daemon
  • backends – über diese wird der eigentliche Zugriff auf die Daten realisiert
  • overlays – ermöglichen das Verhalten der Backends und damit des slapd zu modifizieren, ohne diese(n) selbst zu ändern
  • syncrepl – Synchronisation und Replikation gemäß RFC 4533
  • Bibliotheken, die das LDAP-Protokoll bereitstellen
  • Werkzeuge, Hilfsmittel und Beispiele

Folgender Dienst wird nicht mehr mit ausgeliefert, da die Replikation jetzt über die Syncrepl ausgeführt wird.

  • slurpd – stand-alone LDAP update replication daemon
  • An LDAP server basically is a non-relational database which is optimised for accessing, but not writing, data.
  • It is mainly used as an address book (for e.g. email clients) or authentication backend to various services (such as Samba, where it is used to emulate a domain controller, or Linux system authentication, where it replaces /etc/passwd) and basically holds the user data.
Note:
Commands related to OpenLDAP that begin with ldap (like ldapsearch) are client-side utilities, while commands that begin with slap (like slapcat) are server-side.
Tip: 
Directory services are an enormous topic. 
* Configuration can therefore be complex. 
* If you are totally new to those concepts, this is a good introduction that is easy to understand and that will get you started, even if you are new to LDAP.

Installation

OpenLDAP contains both an LDAP server and client.

# apt install slapd ldap-utils

Syntax

Optionen

Parameter

Umgebungsvariablen

Rückgabewert

Konfiguration

Die Konfigurationsdateien für die OpenLDAP-Clients sind unter Linux (siehe auch die Manual Page ldap.conf(5)):

  • ldap.conf – Basiseinstellungen für Clients
Auf vielen Unix- bzw. Linux-Systemen gibt es zwei Dateien mit der Bezeichnung ldap.conf, üblicherweise in /etc/ldap.conf und /etc/openldap/ldap.conf. Die Datei /etc/ldap.conf dient ausschließlich der Konfiguration von pam_ldap. Die systemweite Client-Konfiguration ist /etc/openldap/ldap.conf.
  • ~/.ldaprc – anwenderspezifische Konfigurationsdatei für Clients

Die OpenLDAP-Server-Konfigurationsdateien sind:

  • slapd.conf – Konfiguration des Slapd-Daemon (dies ist aber eine veraltete Methode und wird nur eingesetzt, falls Konfigurationsparameter benötigt werden, die nicht vom Konfigurationsbackend cn=config erkannt werden. Dies sind z. B. in Version OpenLDAP-2.3.34 alle SQL-Backends und einige Overlays).
  • Das Verzeichnis slapd.d/ wird für die Online-Konfiguration verwendet. Der slapd kann dort die gesamte Konfiguration als LDIF-Datei ablegen, so dass slapd.conf nicht mehr benötigt wird. Diese Dateien sollten nicht selbst verändert werden, die Konfiguration des openldap erfolgt über das LDA-Protokoll.

Server

Note:
If you have an obsolete slapd.conf configuration, you can simply convert it into the new cn=config database. 
If you already have an OpenLDAP database on your machine and would like to remove it, then it can be removed by deleting everything inside of /var/lib/openldap/openldap-data/. 
So, backup your DB_CONFIG.

Slapd, the server, stores its configuration directly inside its database.

  • Thus, we need to write our configuration as an LDIF file and import it.

First, create a file config.ldif containing the following minimal sane configuration.

  • This file declares the basic configuration structure and a database stored at /var/lib/openldap/openldap-data.

config.ldif

# The root config entry
dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /run/openldap/slapd.args
olcPidFile: /run/openldap/slapd.pid
# Schemas
dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema
# TODO: Include further schemas as necessary
include: file:///etc/openldap/schema/core.ldif
# The config database
dn: olcDatabase=config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: config
olcRootDN: cn=Manager,$BASEDN
# The database for our entries
 dn: olcDatabase=mdb,cn=config
 objectClass: olcDatabaseConfig
 objectClass: olcMdbConfig
 olcDatabase: mdb
 olcSuffix: $BASEDN
 olcRootDN: cn=Manager,$BASEDN
 olcRootPW: $PASSWD
 olcDbDirectory: /var/lib/openldap/openldap-data
# TODO: Create further indexes
olcDbIndex: objectClass eq

There are a few options you will need to change: * Every occurence of $BASEDN must be replaced with a valid DN.

  • If you own a domain example.com you will most likely want to choose dc=example,dc=com.
  • $PASSWD must be replaced by a salted and hashed password, which you may generate by running slappasswd.

Additionally, you might consider to add further schemas and create additional indexes to tune the performance of your database.

  • The specifics will depend on your use case, but here are a few recommendations.
  • For LDAP authentication, you should include the three schemas below to be able to use the posixAccount object class used for storing users.
# Additional schemas
# RFC1274: Cosine and Internet X.500 schema
include: file:///etc/openldap/schema/cosine.ldif
# RFC2798: Internet Organizational Person
include: file:///etc/openldap/schema/inetorgperson.ldif
# RFC2307: An Approach for Using LDAP as a Network Information Service
include: file:///etc/openldap/schema/nis.ldif
# Additional indexes
olcDbIndex: objectClass eq
olcDbIndex: uid pres,eq
olcDbIndex: mail pres,sub,eq
olcDbIndex: cn,sn pres,sub,eq
olcDbIndex: dc eq

To import these settings as the ldap user using sudo:

# sudo -u ldap slapadd -n 0 -F /etc/openldap/slapd.d/ -l ./config.ldif

Alternatively, you may also run this directly as root.

  • However, if you do, make sure /etc/openldap/slapd.d/ is accessible by ldap:
# slapadd -n 0 -F /etc/openldap/slapd.d/ -l ./config.ldif
# chown -R ldap:ldap /etc/openldap/*

By default, OpenLDAP will listen unencrypted on all interfaces.

  • To make it only listen on local IP interfaces, you may edit the environment file read by slapd.service:

/etc/conf.d/slapd SLAPD_URLS="ldap://127.0.0.1/ ldap://[::1]" SLAPD_OPTIONS= Finally, start the slapd daemon by starting slapd.service.

Note: * If you want to have your directory accept requests from the network, you should consider using TLS.

  • See #OpenLDAP over TLS for details.
  • If you plan to use your LDAP server for authentication, you might want to check access control configuration in LDAP authentication#LDAP Server Setup.
  • Berkeley DB (BDB) should no longer be used.
  • The mdb backend to slapd(8) is the recommended primary backend for a normal slapd database.
  • It uses OpenLDAP's own Lightning Memory-Mapped Database (LMDB) library to store data and is intended to replace the Berkeley DB backend.
  • The OpenLDAP package in the official repositories defaults to mdb.

Client

The client configuration file is located at /etc/openldap/ldap.conf.

It is simple: you will only have to alter BASE to reflect the suffix of the server, and URI to reflect the address of the server, like:

/etc/openldap/ldap.conf
BASE            dc=example,dc=com
URI             ldap://localhost

If you decide to use SSL:

  • The protocol (ldap or ldaps) in the URI entry has to conform with the slapd configuration
  • If you decide to use TLS, add a TLS_REQCERT allow line to ldap.conf
  • If you use a signed certificate from a CA, add the line TLS_CACERTDIR /usr/share/ca-certificates/trust-source in ldap.conf.

Create initial entry

Note: If you plan to use your LDAP server for authentication, you should import the base.ldif in the LDAP authentication article instead of following the instructions here.

Once your client is configured, you probably want to create the root entry, and an entry for the Manager role:

$ ldapadd -x -D 'cn=Manager,dc=example,dc=com' -W
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: Example
description: Example directory

dn: cn=Manager,dc=example,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager
^D

The text after the first line is entered on stdin, or could be read from a file either with the -f option or a file redirect.

Test your new OpenLDAP installation

This is easy, just run the command below:

$ ldapsearch -x '(objectclass=*)' -b 'dc=example,dc=com'

Or authenticating as the rootdn (replacing -x by -D user -W), using the example configuration we had above:

$ ldapsearch -D "cn=Manager,dc=example,dc=com" -W '(objectclass=*)' -b 'dc=example,dc=com'

Now you should see some information about your database.

OpenLDAP over TLS

Note: upstream documentation is much more useful/complete than this section

If you access the OpenLDAP server over the network and especially if you have sensitive data stored on the server you run the risk of someone sniffing your data which is sent clear-text.

  • The next part will guide you on how to setup an SSL connection between the LDAP server and the client so the data will be sent encrypted.

In order to use TLS, you must have a certificate.

  • For testing purposes, a self-signed certificate will suffice.
  • To learn more about certificates, see OpenSSL.

Warning: OpenLDAP cannot use a certificate that has a password associated to it.

Create a self-signed certificate

To create a self-signed certificate, type the following:

$ openssl req -new -x509 -nodes -out slapdcert.pem -keyout slapdkey.pem -days 365

You will be prompted for information about your LDAP server.

  • Much of the information can be left blank.
  • The most important information is the common name.
  • This must be set to the DNS name of your LDAP server.
  • If your LDAP server's IP address resolves to example.org but its server certificate shows a CN of bad.example.org, LDAP clients will reject the certificate and will be unable to negotiate TLS connections (apparently the results are wholly unpredictable).

Now that the certificate files have been created copy them to /etc/openldap/ssl/ (create this directory if it does not exist) and secure them. slapdcert.pem must be world readable because it contains the public key. slapdkey.pem on the other hand should only be readable for the ldap user for security reasons:

# mv slapdcert.pem slapdkey.pem /etc/openldap/ssl/
# chmod -R 755 /etc/openldap/ssl/
# chmod 400 /etc/openldap/ssl/slapdkey.pem
# chmod 444 /etc/openldap/ssl/slapdcert.pem
# chown ldap /etc/openldap/ssl/slapdkey.pem

Configure slapd for SSL

Edit the configuration to tell LDAP where the certificate files reside by executing the following command:

Note: The latest version of OpenLDAP (2.4.45) uses OpenSSL and not GnuTLS.

  • This means that current versions of OpenLDAP do in fact know how to handle the DEFAULT TLSCipherSuite.
  • To prove this one could run ldd /usr/bin/slapd.
ldapmodify -D 'cn=Manager,dc=example,dc=com' -W
dn: cn=config
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/ssl/slapdcert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/ssl/slapdkey.pem

If you are using a signed SSL Certificate from a certification authority such as Let’s Encrypt, you will also need to specify the path to the root certificates database and your intermediary certificate.

  • You will also need to change ownership of the .pem files and intermediary directories to make them readable to the user ldap:
ldapmodify -D 'cn=Manager,dc=example,dc=com' -W
dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/letsencrypt/live/ldap.my-domain.com/chain.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/letsencrypt/live/ldap.my-domain.com/cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/letsencrypt/live/ldap.my-domain.com/privkey.pem
-
add: olcTLSCACertificatePath
olcTLSCACertificatePath: /usr/share/ca-certificates/trust-source

SSLv2/v3

Disable SSLv2/v3 and use strong ciphers.

ldapmodify -D 'cn=Manager,dc=example,dc=com' -W
dn: cn=config
add: olcTLSProtocolMin
olcTLSProtocolMin: 3.3
-
add: olcTLSCipherSuite
olcTLSCipherSuite: DEFAULT:!kRSA:!kDHE
-

TLSProtocolMin specifies the minimum version in wire format, so "3.3" actually means TLSv1.2.

The TLSCipherSuite specifies a list of OpenSSL ciphers from which slapd will choose when negotiating TLS connections, in decreasing order of preference.

  • In addition to those specific ciphers, you can use any of the wildcards supported by OpenSSL.
  • Note: DEFAULT is a wildcard.
  • See ciphers(1ssl) for description of ciphers, wildcards and options supported.

Note: To see which ciphers are supported by your local OpenSSL installation, type the following: openssl ciphers -v ALL:COMPLEMENTOFALL.

  • Always test which ciphers will actually be enabled by TLSCipherSuite by providing it to OpenSSL command, like this: openssl ciphers -v 'DEFAULT'.

Start slapd with SSL

Note: This is not needed for StartTLS which listens on the same port as unencrypted LDAP.

You will have to edit the environment file read by slapd.service to change the protocol slapd listens on:

/etc/conf.d/slapd
SLAPD_URLS="ldaps:///"
SLAPD_OPTIONS=

Localhost connections do not need to use SSL.

  • So, if you want to access the server locally you should change the SLAPD_URLS line to:
SLAPD_URLS="ldap://127.0.0.1 ldaps:///"

Then restart slapd.service.

  • If it was enabled before, reenable it now.

Note: If you created a self-signed certificate above, be sure to add TLS_REQCERT allow to /etc/openldap/ldap.conf on the client, or it will not be able connect to the server.

Dateien

Anwendungen

Next steps

You now have a basic LDAP installation.

  • The next step is to design your directory.
  • The design is heavily dependent on what you are using it for.
  • If you are new to LDAP, consider starting with a directory design recommended by the specific client services that will use the directory (PAM, Postfix, etc).

A directory for system authentication is the LDAP authentication article.

A nice web frontend is phpLDAPadmin.

Backup LDAP

It is imperative that we have a backup of our LDAP database and configuration in case we ever need to restore for any number of reasons.

Export configuration

$ sudo -u ldap slapcat -vF /etc/openldap/slapd.d -n 0 -l "$(hostname)-ldap-mdb-config-$(date '+%F').ldif"

Export database

$ sudo -u ldap slapcat -v -n 1 -l "$(hostname)-ldap-database-$(date '+%F').ldif"

Restore LDAP

Import configuration

$ sudo -u ldap slapadd -v -n 0 -F /etc/openldap/slapd.d -l <filename from config export>

Import database

$ sudo -u ldap slapadd -v -n 1 -F /etc/openldap/slapd.d -l <filename from database export>

Troubleshooting

slapd configuration checking

You can check configuration settings with

$ slaptest -F /etc/openldap/slapd.d/ -v

Client authentication checking

If you cannot connect to your server for non-secure authentication:

$ ldapsearch -x -H ldap://ldaservername:389 -D cn=Manager,dc=example,dc=exampledomain

and for TLS secured authentication with:

$ ldapsearch -x -H ldaps://ldaservername:636 -D cn=Manager,dc=example,dc=exampledomain

LDAP server stops suddenly

If you notice that slapd seems to start but then stops, try running:

# chown -R ldap:ldap /var/lib/openldap

to allow slapd write access to its data directory as the user "ldap".

LDAP server does not start

Try starting the server from the command line with debugging output enabled:

# slapd -u ldap -g ldap -h ldaps://ldaservername:636 -d Config,Stats

Sicherheit

Dokumentation

  1. Official OpenLDAP Software 2.4 Administrator's Guide

RFC

Man-Page

Info-Pages

Siehe auch

  1. LDAP Authentication
  2. LDAP Hosts
  3. phpLDAPadmin is a web interface tool in the style of phpMyAdmin.

Links

Projekt

  1. https://www.openldap.org/

Weblinks

  1. https://wiki.archlinux.org/title/OpenLDAP
  2. apachedirectorystudioAUR from the Arch User Repository is an Eclipse-based LDAP viewer. Works perfect with OpenLDAP installations.

Weblinks

Einzelnachweise

Testfragen

Testfrage 1

Antwort1

Testfrage 2

Antwort2

Testfrage 3

Antwort3

Testfrage 4

Antwort4

Testfrage 5

Antwort5


TMP

OpenLDAP unter Debian 11

OpenLDAP ist eine freie und quelloffene Softwareimplementierung von LDAP (Lightweight Directory Access Protocol).

  • Es ist ein plattformunabhängiges Protokoll, das für die zentralisierte Authentifizierung und für Verzeichniszugriffsdienste wie E-Mail und andere Anwendungen verwendet werden kann.

OpenLDAP ist ein eigenständiger LDAP-Daemon, der seine Bibliotheken und Dienstprogramme zur Verfügung stellt.

  • Außerdem bietet es Unterstützung für TLS-Zertifikat-Authentifizierung und SASL-Authentifizierung.

In diesem Artikel zeigen wir dir, wie du OpenLDAP auf Debian 11 Bullseye installierst und konfigurierst.

Voraussetzungen

  • Ein Debian 11 Server.
  • Ein Nicht-Root-Benutzer mit sudo/root-Rechten.

Installation von OpenLDAP unter Debian 11

Zunächst installierst du die OpenLDAP-Pakete auf dem Debian 11-Server.

  • Das Standard-Debian-Repository bietet die stabile Version OpenLDAP v2.4.

Bevor du mit der Installation der OpenLDAP-Pakete beginnst, führe den Befehl „apt“ aus, um das Repository von Debian zu aktualisieren.

sudo apt update

Installiere nun die OpenLDAP-Pakete„slapd“ und„ldap-utils„.

  • Das Paket„slapd“ ist das Hauptpaket von OpenLDAP und das Paket„ldap-utils“ stellt Kommandozeilenprogramme für die Verwaltung des OpenLDAP-Servers bereit.
sudo apt install slapd ldap-utils

Gib„Y“ ein und drücke„ENTER„, um die Installation zu bestätigen.

"Slapd installieren"

Nun wirst du aufgefordert, das Passwort für den OpenLDAP-Admin-Benutzer festzulegen.

Gib dein Passwort ein, wähle„OK“ und drücke dann„ENTER„.

"Administrator-Passwort OpenLDAP"

Wiederhole dein Passwort, wähle„OK“ und drücke erneut„ENTER“.

  • Die Installation von OpenLDAP ist damit abgeschlossen.

"Wiederholung des Admin-Passworts"

OpenLDAP-Server konfigurieren

Nachdem du die OpenLDAP-Pakete installiert hast, musst du nun OpenLDAP auf dem Debian-Server einrichten.

Bevor wir weitermachen, richten wir mit dem folgenden Befehl den FQDN (Fully Qualified Domain Name) des Servers ein.

sudo hostnamectl set-hostname ldap.mydomain.local

Bearbeite nun die Datei„/etc/hosts“ mit dem Editor nano.

sudo nano /etc/hosts

Kopiere die folgende Konfiguration und füge sie ein.

  • Achte darauf, dass du die IP-Adresse mit der IP-Adresse deines Servers und den FQDN mit deinem Hostnamen und deinem lokalen Domänennamen änderst.
192.168.10.50 ldap.mydomain.local ldap

Speichere und schließe die Datei.

Melde dich nun von deiner aktuellen SSH-Sitzung ab und logge dich erneut auf deinem Server ein.

Als Nächstes führst du den folgenden Befehl aus, um das OpenLDAP-Paket„slapd“ neu zu konfigurieren.

sudo dpkg-reconfigure slapd

Wähle Nein, wenn du gefragt wirst, ob du die alte OpenLDAP-Konfiguration löschen/beenden willst.

  • Dadurch bleibt die alte Konfiguration verfügbar.

"Wähle no omit database OpenLDAP"

Gib nun den lokalen DNS-Domänennamen für deinen OpenLDAP-Server ein und wähle OK.

"DNS-Domäne OpenLDAP einrichten"

Gib den Namen der Organisation ein und wähle OK.

  • Optional kannst du ihn als Standard mit demselben Namen wie den Domänennamen belassen.

"Organisationsname OpenLDAP einrichten"

Gib nun das OpenLDAP-Administratorpasswort ein und wähle OK, um fortzufahren.

"Admin-Passwort eingeben OpenLDAP"

Bestätige das OpenLDAP-Administratorpasswort und wähle erneut OK.

"Bestätige das Admin-Passwort"

Wähle NEIN, wenn du gefragt wirst, ob du die alte slapd-Datenbank löschen willst.

"Alte Datenbank nicht löschen OpenLDAP"

Wähle nun Ja, um die alte slapd-Datenbank zu verschieben.

"Alte slapd-Datenbank verschieben"

Die Konfiguration der OpenLDAP-Pakete ist nun abgeschlossen.

Um die OpenLDAP-Konfiguration zu überprüfen, führe den unten stehenden Befehl„slapcat“ aus.

sudo slapcat

Jetzt solltest du eine Ausgabe ähnlich dem folgenden Screenshot erhalten.

  • Der Domänenname und der Organisationsname für OpenLDAP sind korrekt mit„mydomain.local“ angegeben.

"slapcat Befehl"

Starte abschließend den„slapd„-Dienst neu, um die neuen Änderungen zu übernehmen. Überprüfe dann den„slapd„-Dienst.

sudo systemctl restart slapd
sudo systemctl status slapd

Jetzt sollte der„slapd„-Dienst den Status„aktiv (läuft)“ haben.

"Starte und überprüfe den slapd-Dienst neu"

Einrichten der UFW-Firewall

Wenn du den Debian-Server mit aktivierter UFW-Firewall betreibst, musst du den LDAP- und LDAPS-Dienst zur UFW-Firewall hinzufügen.

Es wird empfohlen, die Firewall in deiner lokalen Umgebung zu verwenden, da sie die Sicherheit deines Servers erhöht.

Führe nun den unten stehenden ufw-Befehl aus, um den LDAP- und LDAPS-Dienst zur ufw-Firewall hinzuzufügen.

sudo ufw allow LDAP
sudo ufw allow LDAPS

Als nächstes lädst du die UFW-Firewall-Regel mit dem folgenden Befehl neu.

sudo ufw reload

Überprüfe abschließend die Liste der aktivierten Dienste in deiner UFW-Firewall mit dem folgenden Befehl.

sudo ufw status

Du solltest eine Ausgabe wie im folgenden Screenshot erhalten.

  • Die LDAP- und LDAPS-Dienste wurden zur UFW-Firewall hinzugefügt.

"UFW-Firewall einrichten"

Jetzt kannst du die Gruppen und Benutzer des OpenLDAP-Servers einrichten.

Einrichten der Benutzergruppe

Der OpenLDAP-Server wird oft für die Authentifizierung einer Gruppe von Computern oder Servern verwendet.

  • In diesem Schritt richtest du die Gruppe auf dem OpenLDAP-Server mithilfe der LDIF-Datei (LDAP Data Interchange Format) ein.

Die LDIF ist eine Formatierungsdatei der LDAP-Einträge und kann zur Verwaltung von Benutzern und Gruppen auf dem OpenLDAP-Server verwendet werden.

Erstelle mit dem nano-Editor eine neue Datei„/etc/ldap/users.ldif„.

sudo nano /etc/ldap/users.ldif

Kopiere die folgende Konfiguration und füge sie ein.

  • Mit dieser Konfiguration wird eine neue Gruppe mit dem Namen„People“ für die Domäne„mydomain.local“ erstellt.
dn: ou=People,dc=mydomain,dc=local
objectClass: organizationalUnit
ou: People

Speichere und schließe die Datei.

Als Nächstes führst du den Befehl„ldapadd“ aus, um die in der Datei„users.ldif“ definierte Gruppe hinzuzufügen.

sudo ldapadd -D "cn=admin,dc=mydomain,dc=local" -W -H ldapi:/// -f /etc/ldap/users.ldif

Du wirst aufgefordert, das „admin“-Passwort des OpenLDAP-Servers einzugeben.

  • Wenn der Vorgang erfolgreich abgeschlossen ist, solltest du eine Meldung wie„adding new entry „ou=People,dc=mydomain,dc=local““ sehen.

"Gruppe einrichten Menschen OpenLDAP"

Um die Gruppe„People“ zu überprüfen, führe den unten stehenden Befehl„ldapsearch“ aus.

  • Dieser Befehl zeigt die verfügbaren Gruppen auf dem OpenLDAP-Server an.
sudo ldapsearch -x -b "dc=mydomain,dc=local" ou

Jetzt solltest du sehen, dass die Gruppe„People“ auf dem OpenLDAP-Server verfügbar ist.

"Gruppe OpenLDAP anzeigen"

Einrichten eines neuen Benutzers

Nachdem du die Gruppe auf dem OpenLDAP-Server eingerichtet hast, kannst du nun einen neuen Benutzer zum OpenLDAP-Server hinzufügen.

  • Auch das kannst du mit der LDIF-Datei und dem Kommandozeilen-Tool „ldapadd“ machen.

Erstelle nun mit dem nano-Editor eine neue Datei„alice.ldif„.

sudo nano alice.ldif

Kopiere die folgende Konfiguration und füge sie ein.

  • Achte darauf, dass du das Passwort„AlicePassword“ durch ein sicheres Passwort ersetzt.

In diesem Beispiel erstellst du einen neuen Benutzer namens„alice“ mit dem Heimatverzeichnis„/home/alice“ und der Standardshell„/bin/bash„.

  • Außerdem ist der Benutzer„alice“ Teil der Gruppe„People„.
# Add user alice to LDAP Server
dn: cn=alice,ou=People,dc=mydomain,dc=local
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: alice
uid: alice
uidNumber: 10001
gidNumber: 10001
homeDirectory: /home/alice
userPassword: AlicePassword
loginShell: /bin/bash

Speichere und schließe die Datei.

Als Nächstes führst du den Befehl„ldapadd“ aus, um einen neuen Benutzer auf der Grundlage der Datei„alice.ldif“ hinzuzufügen.

sudo ldapadd -D "cn=admin,dc=mydomain,dc=local" -W -H ldapi:/// -f alice.ldif

Gib das OpenLDAP-Administratorkennwort ein und du solltest die Ausgabe„adding new entry „cn=alice,ou=People,dc=mydomain,dc=local““ erhalten, was bedeutet, dass der neue Benutzer„alice“ zum OpenLDAP-Server hinzugefügt wurde.

"Neuen Benutzer anlegen OpenLDAP"

Führe den unten stehenden Befehl„ldapsearch“ aus, um die Liste der Benutzer auf dem OpenLDAP-Server zu erhalten.

sudo ldapsearch -x -b "ou=People,dc=mydomain,dc=local"

Du solltest eine Ausgabe wie im folgenden Screenshot erhalten.

  • Der neue Benutzer„alice“ ist jetzt auf dem OpenLDAP-Server verfügbar.

"Überprüfung von OpenLDAP-Benutzern"

Fazit

Herzlichen Glückwunsch! Du hast nun erfolgreich den OpenLDAP-Server auf dem Debian 11-Server installiert.

  • Außerdem hast du gelernt, wie du mit den LDIF-Dateien (LDAP Data Interchange Format) und dem Kommandozeilen-Tool „ldapadd“ Gruppen und Benutzer hinzufügen kannst.

Im nächsten Schritt möchtest du vielleicht mehr darüber erfahren, wie du Linux-Rechner wie Ubuntu und CentOS zum OpenLDAP-Server hinzufügst.

Quell: https://www.howtoforge.de/anleitung/so-installierst-du-openldap-unter-debian-11/

LDAP-Verzeichnis

OpenLDAP ist eine Umsetzung des LDAP-Protokolls; mit anderen Worten, es ist eine Spezialdatenbank zum Speichern von Verzeichnissen.

  • Im gebräuchlichsten Anwendungsfall macht die Verwendung eines LDAP-Servers es möglich, die Verwaltung von Benutzerkonten und der dazugehörigen Berechtigungen zusammenzufassen.
  • Außerdem lässt sich eine LDAP-Datenbank leicht kopieren, wodurch die Einrichtung mehrerer synchronisierter LDAP-Server möglich wird.
  • Wenn das Netzwerk und die Benutzerzahl schnell anwachsen, kann so die Arbeitslast auf mehrere Server verteilt werden.

LDAP-Daten sind strukturiert und hierarchisch.

  • Die Struktur wird durch „Schemata“ festgelegt, die die Art der Objekte, die die Datenbank speichern kann, zusammen mit einer Liste all ihrer möglichen Attribute beschreiben.
  • Die Syntax, die zum Verweis auf ein bestimmtes Objekt der Datenbank verwendet wird, basiert auf diesen Strukturen, wodurch sich ihre Komplexität erklärt.

Installieren

Das Paket slapd enthält den OpenLDAP-Server.

  • Das Paket ldap-utils umfasst Befehlszeilen-Werkzeuge für die Zusammenarbeit mit LDAP-Servern.

Die Installation von slapd stellt normalerweise nur die Frage nach dem Administratorpasswort und es ist unwahrscheinlich, dass die resultierende Datenbank Ihren Bedürfnissen entspricht.

  • Glücklicherweise können Sie mit einem einfachen dpkg-reconfigure slapd die LDAP-Datenbank mit mehr Details neu konfigurieren: * Konfigurierung des OpenLDAP-Servers auslassen? Natürlich nicht, wir wollen diesen Dienst konfigurieren.
  • DNS-Domain-Name: „falcot.com“.
  • Name der Organisation: „Falcot Corp.“.
  • Ein Verwaltungspasswort muss eingegeben werden.
  • Zu verwendendes Datenbank-Backend: „MDB“.
  • Möchten Sie, dass die Datenbank entfernt wird, wenn slapd gelöscht wird? Nein.
  • Es wäre nicht sinnvoll, den Verlust der Datenbank im Falle eines Versehens zu riskieren.
  • Die alte Datenbank verschieben? Diese Frage wird nur gestellt, wenn die Konfigurierung vorgenommen wird, während eine Datenbank bereits existiert.
  • Antworten Sie nur mit „ja“, wenn Sie tatsächlich wieder mit einer leeren Datenbank beginnen möchten, zum Beispiel, wenn Sie dpkg-reconfigure slapd unmittelbar nach der ersten Installierung ausführen.

LDIF-Format

Eine LDIF-Datei (LDAP Data Interchange Format) ist eine übertragbare Textdatei, die den Inhalt einer LDAP-Datenbank (oder einen Teil davon) beschreibt; sie kann dazu verwendet werden, die Daten auf einen beliebigen anderen LDAP-Server einzuspeisen.

Eine minimale Datenbank ist jetzt konfiguriert, wie die folgende Anfrage zeigt:

$ ldapsearch -x -b dc=falcot,dc=com
# extended LDIF
#
# LDAPv3
# base <dc=falcot,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# falcot.com
dn: dc=falcot,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: Falcot Corp
dc: falcot

# admin, falcot.com
dn: cn=admin,dc=falcot,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Die Anfrage ergibt zwei Objekte: die Organisation selbst und den verwaltenden Benutzer.

Verzeichnis ausfüllen

Da eine leere Datenbank nicht sehr nützlich ist, werden wir alle bestehenden Verzeichnisse in sie einspeisen; hierzu gehören die Benutzer-, Gruppen-, Dienst- und Host-Datenbanken.

Das Paket migrationtools stellt einen Satz von Skripten bereit, die dazu dienen, Daten aus den Standard-Unix-Verzeichnissen (/etc/passwd, /etc/group, /etc/services, /etc/hosts und so weiter) zu extrahieren, diese Daten zu konvertieren und sie in die LDAP-Datenbank einzuspeisen.

Nachdem das Paket installiert ist, muss die Datei /etc/migrationtools/migrate_common.ph editiert werden; die Optionen IGNORE_UID_BELOW and IGNORE_GID_BELOW müssen aktiviert werden (es genügt, das Kommentarzeichen zu entfernen) und die Variablen DEFAULT_MAIL_DOMAIN/DEFAULT_BASE müssen aktualisiert werden.

Der tatsächliche Übertragungsvorgang wird mit dem Befehl migrate_all_online.sh folgendermaßen ausgeführt:

# cd /usr/share/migrationtools
# PERL5LIB="${PERL5LIB}:/etc/migrationtools" LDAPADD="/usr/bin/ldapadd -c" ETC_ALIASES=/dev/null ./migrate_all_online.sh

Das Skript migrate_all_online.sh stellt einige Fragen zur LDAP-Datenbank, auf die die Daten übertragen werden sollen. Tabelle fasst die Antworten zusammen, die im Fallbeispiel Falcot gegeben wurden.

Antworten auf die vom Skript migrate_all_online.sh gestellten Fragen

Frage Antwort
X.500 Benennungskontext dc=falcot,dc=com
Hostname des LDAP-Servers localhost
Manager-DN cn=admin,dc=falcot,dc=com
Verbindungslegitimation das Verwaltungspasswort
Ein DUAConfigProfil anlegen nein

You might notice that we extend the PERL5LIB variable.

  • This is due to Debian bug report #982666.

https://bugs.debian.org/982666

As you might have also noticed, we deliberately ignore migration of the /etc/aliases file, since the standard schema as provided by Debian does not include the structures that this script uses to describe email aliases.

  • Should we want to integrate this data into the directory, the /etc/ldap/schema/misc.schema file should be added to the standard schema.

HILFSPROGRAMM Ein LDAP-Verzeichnis durchsuchen

Das Programm jxplorer (im gleichnamigen Paket) ist ein grafisches Hilfsprogramm, das es ermöglicht, eine LDAP-Datenbank zu durchsuchen und zu editieren.

  • Es ist ein interessantes Programm, das einem Administrator einen guten Überblick über die hierarchische Struktur der LDAP-Daten gibt.

Beachten Sie auch die Verwendung der Option -c des Befehls ldapadd; diese Option bestimmt, dass der Verarbeitungsablauf im Falle eines Fehlers nicht abgebrochen wird.

  • Die Verwendung dieser Option ist notwendig, da die Konvertierung der Datei /etc/services häufig einige Fehler hervorruft, die ohne Gefahr ignoriert werden können.

Konten mit LDAP verwalten

Jetzt, da die LDAP-Datenbank einige nützliche Informationen enthält, ist es an der Zeit diese Daten zu nutzen.

  • Dieser Abschnitt richtet sein Augenmerk darauf, wie ein Linux-System so zu konfigurieren ist, dass die verschiedenen Systemverzeichnisse die LDAP-Datenbank benutzen.

NSS konfigurieren

Das NSS-System (Name Service Switch, siehe Seitenleiste WEITERE SCHRITTENSS und Systemdatenbanken) ist ein modulares System, das Informationen für Systemverzeichnisse festlegen oder einholen kann.

  • Um LDAP als Datenquelle für NSS verwenden zu können, muss das Paket libnss-ldap installiert werden.
  • Bei seiner Installierung werden einige Fragen gestellt; die Antworten sind in Tabelle zusammengefasst.

Configuring the libnss-ldap package:

Frage Antwort
LDAP server URI (Uniform Resource Identifier) ldapi://ldap.falcot.com
Kennzeichnender Name der Suchbasis dc=falcot,dc=com
Zu verwendende LDAP-Version 3
LDAP-Administratorkonto cn=admin,dc=falcot,dc=com
Passwort des LDAP-Administratorkontos das Verwaltungspasswort
Dem LDAP-Administrationskonto erlauben, sich wie lokales Root zu verhalten? yes
Benötigt die LDAP-Datenbank eine Anmeldung? nein

Die Datei /etc/nsswitch.conf muss nun angepasst werden, um NSS so zu konfigurieren, dass es das neu installierte ldap-Modul benutzt.

  • Sie können das in /usr/share/doc/libnss-ldap/examples/nsswitch.ldap enthaltene Beispiel verwenden oder Ihre bestehende Konfiguration bearbeiten.
/etc/nsswitch.conf
#ident $Id: nsswitch.ldap,v 2.4 2003/10/02 02:36:25 lukeh Exp $
#
# An example file that could be copied over to /etc/nsswitch.conf; it
# uses LDAP conjunction with files.
#
# "hosts:" and "services:" in this file are used only if the
# /etc/netconfig file has a "-" for nametoaddr_libs of "inet" transports.

# the following lines obviate the "+" entry in /etc/passwd and /etc/group.
passwd:         files ldap
shadow:         files ldap
group:          files ldap

# consult DNS first, we will need it to resolve the LDAP host. (If we
# can't resolve it, we're in infinite recursion, because libldap calls
# gethostbyname(). 
  • Careful!)
hosts:          dns ldap

# LDAP is nominally authoritative for the following maps.
services:   ldap [NOTFOUND=return] files
networks:   ldap [NOTFOUND=return] files
protocols:  ldap [NOTFOUND=return] files
rpc:        ldap [NOTFOUND=return] files
ethers:     ldap [NOTFOUND=return] files

# no support for netmasks, bootparams, publickey yet.
netmasks:   files
bootparams: files
publickey:  files
automount:  files

# I'm pretty sure nsswitch.conf is consulted directly by sendmail,
# here, so we can't do much here. Instead, use bbense's LDAP
# rules ofr sendmail.
aliases:    files
sendmailvars:   files

# Note: there is no support for netgroups on Solaris (yet)
netgroup:   ldap [NOTFOUND=return] files

Das ldap-Modul wird normalerweise vor den anderen aufgenommen und wird daher zuerst abgefragt.

  • Eine beachtenswerte Ausnahme stellt der hosts-Dienst dar, da zunächst der DNS befragt werden muss (um ldap.falcot.com aufzulösen), bevor mit dem LDAP-Server Verbindung aufgenommen werden kann.
  • Ohne diese Ausnahme würde eine Anfrage nach einem Hostnamen an den LDAP-Server gerichtet; dies würde eine Namensauflösung für den LDAP-Server auslösen, und so weiter in einer unendlichen Schleife.

Falls der LDAP-Server als maßgeblich angesehen werden soll (und die lokalen vom Modul files benutzten Dateien ignoriert werden sollen), können die Dienste mit der folgenden Syntax konfiguriert werden:

dienst: ldap [NOTFOUND=return] files.

Falls der gesuchte Eintrag in der LDAP-Datenbank nicht vorhanden ist, wird die Anfrage die Antwort „nicht vorhanden“ ergeben, selbst wenn er in einer der lokalen Dateien vorhanden ist; diese lokalen Dateien werden nur benutzt, wenn der LDAP-Service abgeschaltet ist.

PAM konfigurieren

Dieser Abschnitt beschreibt die Konfiguration von PAM (siehe Seitenleiste HINTER DEN KULISSEN[1]/etc/environmentund /etc/default/locale), die es Anwendungen ermöglicht, die gegenüber der LDAP-Datenbank erforderlichen Authentifizierungen vorzunehmen.

VORSICHT Fehlerhafte Authentifizierung
Die Änderung der von verschiedenen Programmen verwendeten standardmäßigen PAM-Konfiguration ist ein heikler Vorgang. 
  • Ein Fehler kann zu einer fehlerhaften Authentifizierung führen, die das Anmelden verhindern kann.
  • Eine gute Vorsichtsmaßnahme besteht daher darin, eine Root-Konsole offen zu halten.
  • So können mit geringem Aufwand eventuell auftretende Konfigurierungsfehler behoben und Dienste neu gestartet werden.

Das LDAP-Modul für PAM wird von dem Paket libpam-ldap bereitgestellt.

  • Beim Installieren dieses Pakets werden einige Fragen gestellt, die denen bei libnss-ldap ähnlich sind; einige Konfigurationsparameter (wie zum Beispiel die URI des LDAP-Servers) werden sogar mit dem Paket libnss-ldap gemeinsam benutzt.
  • Die Antworten sind in Tabelle zusammengefasst.
Konfigurierung von libpam-ldap
Frage Antwort
Dem LDAP-Administrationskonto erlauben, sich wie lokales Root zu verhalten? Ja.
  • Dies ermöglicht es, den normalen passwd-Befehl zur Änderung von Passwörtern zu verwenden, die in der LDAP-Datenbank gespeichert sind.
Erfordert die LDAP-Datenbank eine Anmeldung? nein
LDAP account for root: cn=admin,dc=falcot,dc=com
LDAP administrative password: das Verwaltungspasswort der LDAP-Datenbank
Local encryption algorithm to use for passwords: crypt
PAM profiles to enable: LDAP Authentication is among the enabled profiles

Durch das Installieren von libpam-ldap wird die standardmäßige PAM-Konfiguration, die in den Dateien /etc/pam.d/common-auth, /etc/pam.d/common-password und /etc/pam.d/common-account festgelegt ist, automatisch angepasst.

  • Dieser Vorgang verwendet das spezielle Hilfsprogramm pam-auth-update (vom Paket libpam-runtime bereitgestellt).
  • Dieses Programm kann auch vom Administrator eingesetzt werden, falls er PAM-Module aktivieren oder deaktivieren möchte.

LDAP-Datenaustausch absichern

Standardmäßig überträgt das LDAP-Protokoll im Klartext über das Netzwerk; dies gilt auch für die (verschlüsselten) Passwörter.

  • Da die verschlüsselten Passwörter aus dem Netzwerk entnommen werden können, werden sie anfällig für Wörterbuchangriffe sein.
  • Dies kann durch den Einsatz einer zusätzlichen Kryptografieschicht verhindert werden; die Aktivierung dieser Schicht ist das Thema dieses Abschnitts.

Den Server konfigurieren

Der erste Schritt besteht darin, ein Schlüsselpaar für den LDAP-Server zu erstellen (bestehend aus einem öffentlichen Schlüssel und einem privaten Schlüssel).

  • Die Falcot-Administratoren verwenden wieder easy-rsa, um es zu erzeugen (siehe Abschnitt 10.2.2, „Public-Key-Infrastrultur: easy-rsa).
  • Wenn Sie ./easyrsa build-server-full ldap.falcot.com nopass ausführen, werden Sie nach dem "Common Name" gefragt.
  • Die Antwort auf diese Frage muss der vollqualifizierte Hostname für den LDAP-Server sein; in unserem Fall ldap.falcot.com.

Dieser Befehl erstellt ein Zertifikat in der Datei pki/issued/ldap.falcot.com.crt; der dazugehörige private Schlüssel wird in der Datei pki/private/ldap.falcot.com.key abgespeichert.

Jetzt müssen diese Schlüssel an ihrem Standard-Platz installiert werden, und wir müssen dafür Sorge tragen, dass die private Datei vom LDAP-Sever gelesen werden kann, der unter der Userkennung openldap läuft:

# adduser openldap ssl-cert
Adding user `openldap' to group `ssl-cert' ...
Adding user openldap to group ssl-cert
Done.
# mv pki/private/ldap.falcot.com.key /etc/ssl/private/ldap.falcot.com.key
# chown root.ssl-cert /etc/ssl/private/ldap.falcot.com.key
# chmod 0640 /etc/ssl/private/ldap.falcot.com.key
# mv pki/issued/ldap.falcot.com.crt /etc/ssl/certs/ldap.falcot.com.pem
# chown root.root /etc/ssl/certs/ldap.falcot.com.pem
# chmod 0644 /etc/ssl/certs/ldap.falcot.com.pem

Der Hintergrundprozess slapd muss ebenfalls dazu gebracht werden, diese Schlüssel für die Kryptografie zu verwenden.

  • Die Konfiguration des LDAP-Servers wird dynamisch verwaltet: Die Konfiguration kann mit normalen LDAP-Vorgänge innerhalb der Objekt-Hierarchie cn=config aktualisiert werden und der Server aktualisiert /etc/ldap/slapd.d in Echtzeit, um die Konfiguration anhaltend zu machen. Ldapmodify ist also das geeignete Werkzeug, um die Konfiguration zu aktualisieren:
slapd für eine Kryptografie konfigurieren
# cat >ssl.ldif <<END
dn: cn=config
changetype: modify
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ldap.falcot.com.key
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ldap.falcot.com.pem
END
# ldapmodify -Y EXTERNAL -H ldapi:/// -f ssl.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
# systemctl restart slapd.service
# ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config -s base | grep TLS
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
olcTLSCertificateFile: /etc/ssl/certs/ldap.falcot.com.pem
olcTLSCertificateKeyFile: /etc/ssl/certs/ldap.falcot.com.key
WERKZEUG ldapvi um ein LDAP-Verzeichnis zu editieren

With ldapvi, you can display an LDIF output of any part of the LDAP directory, make some changes in the text editor, and let the tool do the corresponding LDAP operations for you.

Es ist deshalb eine komfortable Methode, die Konfiguration des LDAP-Servers einfach durch Ändern der Hierarchie cn=config auf dem Laufenden zu halten.

# ldapvi -Y EXTERNAL -h ldapi:/// -b cn=config

Der letzte Schritt zur Aktivierung der Kryptografie besteht darin, die Variable SLAPD_SERVICES in der Datei /etc/default/slapd zu ändern.

  • Wir gehen dabei auf Nummer Sicher und deaktivieren nicht abgesichertes LDAP vollständig.
/etc/default/slapd
# Default location of the slapd.conf file or slapd.d cn=config directory. 
  • If
# empty, use the compiled-in default (/etc/ldap/slapd.d with a fallback to
# /etc/ldap/slapd.conf).
SLAPD_CONF=

# System account to run the slapd server under. 
  • If empty the server
# will run as root.
SLAPD_USER="openldap"

# System group to run the slapd server under. 
  • If empty the server will
# run in the primary group of its user.
SLAPD_GROUP="openldap"

# Path to the pid file of the slapd server. 
  • If not set the init.d script
# will try to figure it out from $SLAPD_CONF (/etc/ldap/slapd.d by
# default)
SLAPD_PIDFILE=

# slapd normally serves ldap only on all TCP-ports 389. 
  • slapd can also
# service requests on TCP-port 636 (ldaps) and requests via unix
# sockets.
# Example usage:
# SLAPD_SERVICES="ldap://127.0.0.1:389/ ldaps:/// ldapi:///"
SLAPD_SERVICES="ldaps:/// ldapi:///"

# If SLAPD_NO_START is set, the init script will not start or restart
# slapd (but stop will still work).  Uncomment this if you are
# starting slapd via some other means or if you don't want slapd normally
# started at boot.
#SLAPD_NO_START=1

# If SLAPD_SENTINEL_FILE is set to path to a file and that file exists,
# the init script will not start or restart slapd (but stop will still
# work).  Use this for temporarily disabling startup of slapd (when doing
# maintenance, for example, or through a configuration management system)
# when you don't want to edit a configuration file.
SLAPD_SENTINEL_FILE=/etc/ldap/noslapd

# For Kerberos authentication (via SASL), slapd by default uses the system
# keytab file (/etc/krb5.keytab).  To use a different keytab file,
# uncomment this line and change the path.
#export KRB5_KTNAME=/etc/krb5.keytab

# Additional options to pass to slapd
SLAPD_OPTIONS=""

Den Client konfigurieren

Auf der Client-Seite muss die Konfiguration der Module libpam-ldap und libnss-ldap angepasst werden um einen ldaps:// URI zu nutzen zu können.

LDAP clients also need to be able to authenticate the server.

  • In an X.509 public key infrastructure, public certificates are signed by the key of a certificate authority (CA).
  • With easy-rsa, the Falcot administrators have created their own CA and they now need to configure the system to trust the signatures of Falcot's CA.
  • This can be done by putting the CA certificate in /usr/local/share/ca-certificates and running update-ca-certificates.
# cp pki/ca.crt /usr/local/share/ca-certificates/falcot.crt
# update-ca-certificates
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

Adding debian:falcot.pem
done.
done.

Nicht zuletzt kann der voreingestellte URI und die Basis-DN, die von diversen Kommandozeilen-Tools verwendet werden, können in /etc/ldap/ldap.conf geändert werden.

  • Das erspart einiges an Tipparbeit.
/etc/ldap/ldap.conf
#
# 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

# TLS certificates (needed for GnuTLS)
TLS_CACERT      /etc/ssl/certs/ca-certificates.crt

Quelle: https://debian-handbook.info/browse/de-DE/stable/sect.ldap-directory.html