Inhaltsverzeichnis
Apache HTTP Server ArchLinux - mod_ldap - LDAP-Authentifizierung
Die Apache HTTP Server-Module mod_ldap
und mod_authnz_ldap
werden benötigt um LDAP/LDAPS Kommunikation unverschlüsselt und verschlüsselt betreiben zu können. Die Kommunikation mit einem LDAP-Server via ldap
auf Port 389 und, die Kommunikation mit einem LDAPS-Server via ldaps
auf Port 636, kann so realisiert werden.
Um eine LDAPS Kommunikation verschlüsselt betreiben zu können, ist bei Verwendung eines Self-signed-certificate, das ROOT-Zertifikat des LDAPS-Servers dem Apache HTTP Server bekannt zu machen.
Die beiden Module
mod_ldap
mod_authnz_ldap
werden benötigt um den Zugriff auf einen LDAP-Server bzw. LDAPS-Server, hier in dieser Beschreibung der OpenLDAP zu realisieren.
Beschreibung | Externer Link |
---|---|
Homepage | https://httpd.apache.org/ |
Dokumentation | https://httpd.apache.org/docs/ |
mod_ssl | https://httpd.apache.org/docs/current/mod/mod_ldap.html |
ArchWiki | https://wiki.archlinux.org/title/Apache_HTTP_Server |
* Quellen: Buch: Sascha Kersken - Apache 2.4 Das umfassende Handbuch
WICHTIG - Nachfolgende Konfigurationen setzen die Einrichtung eines OpenLDAP-Servers und eines Apache HTTP Servers, wie unter nachfolgenden internen Links beschrieben, voraus:
HINWEIS - Eine explizite Installation des Moduls mod_ldap
ist nicht erforderlich, da das Modul im Pakete apache
bereits enthalten ist!
Ab hier werden root
-Rechte zur Ausführung der nachfolgenden Befehle benötigt. Um root
zu werden geben Sie bitte folgenden Befehl ein:
$ su - Password:
Vorbereitung
/etc/httpd/conf/secret.txt
Da ein „anonymouse bind“ nicht erlaubt ist, d.h. keine unautorisierten Anfragen gegen den LDAP-Server gestattet sind, sondern NUR Anfragen mit Autorisierung und stellt das dazugehörige Passwort des Benutzers dar, der als Hilfsbenutzer zum bind
gegen den LDAP-Server verwendet werden soll.
Damit das Passwort nicht im Klartext in der Konfigurationsdatei /etc/httpd/conf/httpd.conf
enthalten ist, soll dieses in einer separaten Datei, mit entsprechenden Besitz- und Dateirechten ausgelagert werden.
Dazu ist es erforderlich die Datei /etc/httpd/conf/secret.txt
wie folgt zu erstellen und mit den entsprechenden Besitz- und Dateirechten auszustatten, wie nachfolgende Befehle zeigen:
Datei mit Inhalt erstellen:
# vim /etc/httpd/conf/secret.txt
Besitzrechte setzen
# chown root:root /etc/httpd/conf/secret.txt
Dateirechte setzen
# chmod 600 /etc/httpd/conf/secret.txt
LDAP Authentifizierung
Eine erheblich sicherere Methode, gegenüber der Apache HTTP Server ArchLinux - Basic Authentifizierung - Basic Authentifizierung: htpasswd , und der Apache HTTP Server ArchLinux - Digest Authentifizierung - Digest Authentifizierung: htdigest stellt die Apache HTTP Server ArchLinux - mod_ldap - LDAP-Authentifizierung - LDAP-Authentifizierung dar.
/etc/httpd/conf/httpd.conf
Zuerst sind nachfolgende minimale Änderungen, hier an der Konfigurationsdatei
/etc/httpd/conf/httpd.conf
durchzuführen:
(Nur relevanter Ausschnitt):
# Tachtler # default: #LoadModule authnz_ldap_module modules/mod_authnz_ldap.so LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
Erklärungen:
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
Die Einbindung des Moduls mod_authnz_ldap
ist erforderlich und ermöglicht die Verwendung eines LDAP-Verzeichnisses zur Speicherung der Datenbank für die HTTP-Basisauthentifizierung.
(Nur relevanter Ausschnitt):
# Tachtler # default: #LoadModule ldap_module modules/mod_ldap.so LoadModule ldap_module modules/mod_ldap.so
Erklärungen:
LoadModule ldap_module modules/mod_ldap.so
Die Einbindung des Moduls mod_ldap
ist erforderlich zum LDAP-Verbindungspooling und zur Verwendung von Ergebnis-Caching-Diensten zur Nutzung durch andere LDAP-Module.
Um die Apache HTTP Server ArchLinux - mod_ldap - LDAP-Authentifizierung nutzen zu können, müssen die Apache HTTP Server-Module - mod_authnz_ldap
und mod_ldap
geladen werden.
Anschliessend sind nachfolgende minimale Änderungen, hier an der Konfigurationsdatei
/etc/httpd/conf/httpd.conf
im Bereich DocumentRoot
durchzuführen:
(Nur relevanter Ausschnitt):
# # DocumentRoot: The directory out of which you will serve your # documents. By default, all requests are taken from this directory, but # symbolic links and aliases may be used to point to other locations. # DocumentRoot "/srv/http" <Directory "/srv/http"> # # Possible values for the Options directive are "None", "All", # or any combination of: # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # # Note that "MultiViews" must be named *explicitly* --- "Options All" # doesn't give it to you. # # The Options directive is both complicated and important. Please see # http://httpd.apache.org/docs/2.4/mod/core.html#options # for more information. # # Tachtler # default: Options Indexes FollowSymLinks Options -Indexes +FollowSymLinks +MultiViews # # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # AllowOverride FileInfo AuthConfig Limit # AllowOverride None # # Controls who can get stuff from this server. # # Tachtler # default: Require all granted AuthType Basic AuthName "Password protected area!" AuthBasicProvider ldap AuthLDAPURL "ldap://ldap.idmz.tachtler.net:389/ou=People,dc=tachtler,dc=net?uid" AuthLDAPBindDN "cn=Ersatzbenutzer,dc=tachtler,dc=net" AuthLDAPBindPassword "exec:/usr/bin/cat /etc/httpd/conf/secret.txt" Require ldap-user klaus </Directory>
Erklärungen:
# Tachtler # default: Require all granted AuthType Basic AuthName "Password protected area!" AuthBasicProvider ldap AuthLDAPURL "ldap://ldap.idmz.tachtler.net:389/ou=People,dc=tachtler,dc=net?uid" AuthLDAPBindDN "cn=Ersatzbenutzer,dc=tachtler,dc=net" AuthLDAPBindPassword "exec:/usr/bin/cat /etc/httpd/conf/secret.txt" Require ldap-user klaus
Anstelle der Standard Zugriffsrechte - Require all granted
ist es erforderlich die vorhergehend gezeigt Konfiguration, welche minimal aus den Komponenten:
AuthType
- Art der AuthentifizierungAuthName
- Muss der definierte Realm sein !*AuthBasicProvider
- Legt den/die Authentifizierungsanbieter für diesen Schutzraum festAuthLDAPURL
- URL unter der der LDAP-Server zu erreichen istAuthLDAPBindDN
- DN (Anmeldename), der bei der Bindung an den LDAP-Server verwendet wirdAuthLDAPBindPassword
- Passwort, das in Verbindung mit dem DN (Anmeldenamen) verwendet wirdRequire ldap-user
- Zugriffsformulierung, hier „gültige LDAP-Benutzer“
AuthType
Die Direktive AuthType Basic
bestimmt den Typ der Methode der Authentifizierung. Nachfolgende Authntifizerungstypen sind möglich:
None
Basic
(benötigtmod_auth_basic
)Digest
(benötigtmod_auth_digest
)Form
(benötigtmod_auth_form
)
AuthName
Die Direktive AuthName „Password protected area!“
präsentiert die angegebene Zeichenkette im Authentifizierungsdialog. Die erleichtert die Unterscheidung, welcher Benutzername und welches Passwort eingegeben werden muss, da es den Zugriff noch einmal, zusätzlich zur URL, identifiziert.
AuthBasicProvider
Die Direktive AuthBasicProvider ldap
bestimmt, gegen welches System (Datei, LDAP, Datenbank usw.) letztendlich authentifiziert werden soll.
AuthLDAPURL
Die Direktive
AuthLDAPURL "ldap://ldap.idmz.tachtler.net:389/ou=People,dc=tachtler,dc=net?uid"
bestimmt den
- LDAP-Zugriffstyp
- LDAP-Server-URL
- LDAP-Server-Port
- LDAP-Eintrag im LDAP-Baum
- LDAP-Eintrag Feld in dem der Benutzername steht
zur Überprüfung des Benutzernamens und des dazugehörigen Passwortes.
AuthLDAPBindDN
Die Direktive
AuthLDAPBindDN "cn=Ersatzbenutzer,dc=tachtler,dc=net"
wird NUR benötigt, falls ein „anonymouse bind“ nicht erlaubt ist, d.h. keine unautorisierten Anfragen gegen den LDAP-Server gestattet sind, sondern NUR Anfragen mit Autorisierung und stellt das dazugehörige Passwort des Benutzers dar, der als Hilfsbenutzer zum bind
gegen den LDAP-Server verwendet werden soll.
AuthLDAPBindPassword
Die Direktive
AuthLDAPBindPassword "exec:/usr/bin/cat /etc/httpd/conf/secret.txt"
wird NUR benötigt, falls ein „anonymouse bind“ nicht erlaubt ist, d.h. keine unautorisierten Anfragen gegen den LDAP-Server gestattet sind, sondern NUR Anfragen mit Autorisierung und stellt das dazugehörige Passwort des Benutzers dar, der als Hilfsbenutzer zum bind
gegen den LDAP-Server verwendet werden soll. Die hier Verwendete Methode für den Befehl cat
aus, um den Inahlt der Datei /etc/httpd/conf/secret.txt
auszugeben, wobei nur die Ausgabe der ersten Zeile der Datei verwendet werden kann.
Require
Die Direktive Require ldap-user klaus
testet, ob der angegebene Benutzer, hier klaus
, ein gütiger LDAP-Benutzer in diesem LDAP-Kontext ist. Eine Mehrfachnennung ist ebenfalls möglich.
LDAPS Authentifizierung
Eine erheblich sicherere Methode, gegenüber der Apache HTTP Server ArchLinux - Basic Authentifizierung - Basic Authentifizierung: htpasswd , und der Apache HTTP Server ArchLinux - Digest Authentifizierung - Digest Authentifizierung: htdigest stellt die Apache HTTP Server ArchLinux - mod_ldap - LDAP-Authentifizierung - LDAPS-Authentifizierung dar.
/etc/httpd/conf/httpd.conf
Auch hier sind nachfolgende minimale Änderungen, hier an der Konfigurationsdatei
/etc/httpd/conf/httpd.conf
durchzuführen:
(Nur relevanter Ausschnitt):
# Tachtler # default: #LoadModule authnz_ldap_module modules/mod_authnz_ldap.so LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
Erklärungen:
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
Die Einbindung des Moduls mod_authnz_ldap
ist erforderlich und ermöglicht die Verwendung eines LDAP-Verzeichnisses zur Speicherung der Datenbank für die HTTP-Basisauthentifizierung.
(Nur relevanter Ausschnitt):
# Tachtler # default: #LoadModule ldap_module modules/mod_ldap.so LoadModule ldap_module modules/mod_ldap.so
Erklärungen:
LoadModule ldap_module modules/mod_ldap.so
Die Einbindung des Moduls mod_ldap
ist erforderlich zum LDAP-Verbindungspooling und zur Verwendung von Ergebnis-Caching-Diensten zur Nutzung durch andere LDAP-Module.
Um die Apache HTTP Server ArchLinux - mod_ldap - LDAP-Authentifizierung nutzen zu können, müssen die Apache HTTP Server-Module - mod_authnz_ldap
und mod_ldap
geladen werden.
Anschliessend sind nachfolgende minimale Änderungen, hier an der Konfigurationsdatei
/etc/httpd/conf/httpd.conf
im Bereich DocumentRoot
durchzuführen:
(Nur relevanter Ausschnitt):
# # DocumentRoot: The directory out of which you will serve your # documents. By default, all requests are taken from this directory, but # symbolic links and aliases may be used to point to other locations. # DocumentRoot "/srv/http" <Directory "/srv/http"> # # Possible values for the Options directive are "None", "All", # or any combination of: # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # # Note that "MultiViews" must be named *explicitly* --- "Options All" # doesn't give it to you. # # The Options directive is both complicated and important. Please see # http://httpd.apache.org/docs/2.4/mod/core.html#options # for more information. # # Tachtler # default: Options Indexes FollowSymLinks Options -Indexes +FollowSymLinks +MultiViews # # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # AllowOverride FileInfo AuthConfig Limit # AllowOverride None # # Controls who can get stuff from this server. # # Tachtler # default: Require all granted AuthType Basic AuthName "Password protected area!" AuthBasicProvider ldap AuthLDAPURL "ldaps://ldap.idmz.tachtler.net:636/ou=People,dc=tachtler,dc=net?uid" AuthLDAPBindDN "cn=Ersatzbenutzer,dc=tachtler,dc=net" AuthLDAPBindPassword "exec:/usr/bin/cat /etc/httpd/conf/secret.txt" Require ldap-user klaus </Directory>
Erklärungen:
# Tachtler # default: Require all granted AuthType Basic AuthName "Password protected area!" AuthBasicProvider ldap AuthLDAPURL "ldaps://ldap.idmz.tachtler.net:636/ou=People,dc=tachtler,dc=net?uid" AuthLDAPBindDN "cn=Ersatzbenutzer,dc=tachtler,dc=net" AuthLDAPBindPassword "exec:/usr/bin/cat /etc/httpd/conf/secret.txt" Require ldap-user klaus
Anstelle der Standard Zugriffsrechte - Require all granted
ist es erforderlich die vorhergehend gezeigt Konfiguration, welche minimal aus den Komponenten:
AuthType
- Art der AuthentifizierungAuthName
- Muss der definierte Realm sein !*AuthBasicProvider
- Legt den/die Authentifizierungsanbieter für diesen Schutzraum festAuthLDAPURL
- URL unter der der LDAP-Server zu erreichen istAuthLDAPBindDN
- DN (Anmeldename), der bei der Bindung an den LDAP-Server verwendet wirdAuthLDAPBindPassword
- Passwort, das in Verbindung mit dem DN (Anmeldenamen) verwendet wirdRequire ldap-user
- Zugriffsformulierung, hier „gültige LDAP-Benutzer“
AuthType
Die Direktive AuthType Basic
bestimmt den Typ der Methode der Authentifizierung. Nachfolgende Authntifizerungstypen sind möglich:
None
Basic
(benötigtmod_auth_basic
)Digest
(benötigtmod_auth_digest
)Form
(benötigtmod_auth_form
)
AuthName
Die Direktive AuthName „Password protected area!“
präsentiert die angegebene Zeichenkette im Authentifizierungsdialog. Die erleichtert die Unterscheidung, welcher Benutzername und welches Passwort eingegeben werden muss, da es den Zugriff noch einmal, zusätzlich zur URL, identifiziert.
AuthBasicProvider
Die Direktive AuthBasicProvider ldap
bestimmt, gegen welches System (Datei, LDAP, Datenbank usw.) letztendlich authentifiziert werden soll.
AuthLDAPURL
Die Direktive
AuthLDAPURL "ldaps://ldap.idmz.tachtler.net:636/ou=People,dc=tachtler,dc=net?uid"
bestimmt den
- LDAPS-Zugriffstyp - NEU:
ldaps
- LDAPS-Server-URL
- LDAPS-Server-Port - NEU: Port
636
- LDAP-Eintrag im LDAP-Baum
- LDAP-Eintrag Feld in dem der Benutzername steht
zur Überprüfung des Benutzernamens und des dazugehörigen Passwortes.
AuthLDAPBindDN
Die Direktive
AuthLDAPBindDN "cn=Ersatzbenutzer,dc=tachtler,dc=net"
wird NUR benötigt, falls ein „anonymouse bind“ nicht erlaubt ist, d.h. keine unautorisierten Anfragen gegen den LDAP-Server gestattet sind, sondern NUR Anfragen mit Autorisierung und stellt das dazugehörige Passwort des Benutzers dar, der als Hilfsbenutzer zum bind
gegen den LDAP-Server verwendet werden soll.
AuthLDAPBindPassword
Die Direktive
AuthLDAPBindPassword "exec:/usr/bin/cat /etc/httpd/conf/secret.txt"
wird NUR benötigt, falls ein „anonymouse bind“ nicht erlaubt ist, d.h. keine unautorisierten Anfragen gegen den LDAP-Server gestattet sind, sondern NUR Anfragen mit Autorisierung und stellt das dazugehörige Passwort des Benutzers dar, der als Hilfsbenutzer zum bind
gegen den LDAP-Server verwendet werden soll. Die hier Verwendete Methode für den Befehl cat
aus, um den Inahlt der Datei /etc/httpd/conf/secret.txt
auszugeben, wobei nur die Ausgabe der ersten Zeile der Datei verwendet werden kann.
Require
Die Direktive Require ldap-user klaus
testet, ob der angegebene Benutzer, hier klaus
, ein gütiger LDAP-Benutzer in diesem LDAP-Kontext ist. Eine Mehrfachnennung ist ebenfalls möglich.
Self-Signed-Certificate
HINWEIS - Nachfolgende Konfigurationen sind nur durchzuführen, wenn im
- OpenLDAP-Server ein „Self-Signed-Certificate“
zum Einsatz kommt!
Siehe auch nach folgende internen Link:
Wie unter vorstehenden internen Link beschrieben, wurde bei der Installation des OpenLDAP-Servers ein „Self-Signed-Certificate“ zur Absicherung mittels Verschlüsselung erzeugt und zum Einsatz gebracht.
Aufbauend auf der Annahme, das das „Self-Signed-Certificate“ bzw. genauer gesagt dessen Root-CA aus der das „Self-Signed-Certificate“ erzeugt wurde, unter der nachfolgenden globalen Zertifikats-Konfigurationsdatei eingebunden wurde:
/etc/ca-certificates/extracted/ca-bundle.trust.crt
Somit sind zusätzlich nachfolgende Konfigurationszeilen am Ende der Konfigurationsdatei
/etc/httpd/conf/httpd.conf
hinzuzufügen, damit das „Self-Signed-Certificate“ vom Apache HTTP Server anerkannt und eine verschlüsselte Verbindung genutzt werden kann:
(Nur relevanter Ausschnitt):
<IfModule ldap_module> <IfModule authnz_ldap_module> LDAPTrustedGlobalCert CA_BASE64 /etc/ca-certificates/extracted/ca-bundle.trust.crt LDAPVerifyServerCert Off </IfModule> </IfModule>
Erklärungen
LDAPTrustedGlobalCert CA_BASE64 /etc/ca-certificates/extracted/ca-bundle.trust.crt
Legt die Datei oder Datenbank fest, die eine globale vertrauenswürdige Zertifizierungsstelle oder ein globales Client-Zertifikate enthält.
LDAPVerifyServerCert Off
Deaktiviert hier die Erzwingung der Überprüfung des Serverzertifikats, da es sich um ein „Self-Signed-Certificate“ handelt.
Neustart
Nach den vorangegangenen Konfigurationsschritten, sollte einem Neustart nichts im Wege stehen:
# systemctl restart httpd.service
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !
LDAP(S) Authentifizierung: Test
Nachdem der Neustart des Apache HTTP Server erfolgreich durchgeführt wurde, kann die Abfrage mittels eines Browsers erfolgen, wie im nachfolgenden Bild dargestellt:
HINWEIS - Der Aufruf der Seite erfolgt verschlüsselt mittels Eingabe von https://www.apache.tachtler.net !
info-Konfiguration
Nachfolgende Konfiguration ermöglicht es zwei URL-Erweiterungen zu implementieren, welche unter
/ldap-status
- Statusinformationen LDAP-Cache
abgerufen werden können.
info-Konfiguration: /etc/httpd/conf/extra/httpd-info.conf
Verzeichnis/Name | Beschreibung |
---|---|
/etc/httpd/conf/extra/httpd-info.conf | Beinhaltet Einstellungen zu Statusmeldungen und Informationen des Servers, abrufbar unter speziellen URL-Ergänzungen /server-status , /server-info und neu ldap-status |
/etc/httpd/conf/extra/httpd-info.conf
Erklärungen:
<Location /ldap-status>
Wendet die enthaltenen Direktiven nur auf die entsprechenden URL an.
SetHandler ldap-status
Erzwingt die Verarbeitung aller passenden Dateien durch den Handler für LDAP.
Require all granted
Zugriff auf die URL-Erweiterung /ldap-status
, ohne Beschränkungen.
Siehe auch nachfolgenden externen Link: Require
HINWEIS - Der Zugriff auf diese URL-Erweiterung sollte durch eine Zugriffsbeschränkung eingeschränkt werden
Siehe auch nachfolgende internen Links:
</Location>
Schliesst die Anwendung auf die enthaltenen Direktiven nur auf die entsprechenden URL ab.
info-Konfiguration: Neustart
Nach den vorangegangenen Konfigurationsschritten, sollte einem Neustart nichts im Wege stehen:
# systemctl restart httpd.service
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !
info-Konfiguration: Tests
Wenn ein erneuter Neustart des Apache HTTP Server erfolgreich durchgeführt wurde, können nachfolgende Abfragen mittels eines Browsers erfolgen, wie in nachfolgenden Bildern dargestellt durchgeführt werden:
Durch anhängen nachfolgenden Zusatzes an die URL: /ldap-status
kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:
Durch Auswahl des ersten Links mit der Bezeichnung LDAP URL Cache kann nachfolgende Anzeige zum Vorschein gebracht werden:
Durch Auswahl der Links mit den Bezeichnungen
können nachfolgende Anzeigen zum Vorschein gebracht werden: