Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:apache_http_server_archlinux_-_mod_ldap_-_ldap-authentifizierung

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.

* 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

/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 Authentifizierung
  • AuthName - Muss der definierte Realm sein !*
  • AuthBasicProvider - Legt den/die Authentifizierungsanbieter für diesen Schutzraum fest
  • AuthLDAPURL - URL unter der der LDAP-Server zu erreichen ist
  • AuthLDAPBindDN - DN (Anmeldename), der bei der Bindung an den LDAP-Server verwendet wird
  • AuthLDAPBindPassword - Passwort, das in Verbindung mit dem DN (Anmeldenamen) verwendet wird
  • Require 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ötigt mod_auth_basic)
  • Digest (benötigt mod_auth_digest)
  • Form (benötigt mod_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

/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 Authentifizierung
  • AuthName - Muss der definierte Realm sein !*
  • AuthBasicProvider - Legt den/die Authentifizierungsanbieter für diesen Schutzraum fest
  • AuthLDAPURL - URL unter der der LDAP-Server zu erreichen ist
  • AuthLDAPBindDN - DN (Anmeldename), der bei der Bindung an den LDAP-Server verwendet wird
  • AuthLDAPBindPassword - Passwort, das in Verbindung mit dem DN (Anmeldenamen) verwendet wird
  • Require 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ötigt mod_auth_basic)
  • Digest (benötigt mod_auth_digest)
  • Form (benötigt mod_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:

ArchLinux - Apache HTTP Server - Mozilla Firefox - Basic Authentifizierung: LDAP(S) - Dialog

ArchLinux - Apache HTTP Server - Mozilla Firefox - Let's Encrypt - Apache - Test HTTPS - Wildcard

:!: 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:

ArchLinux - Apache HTTP Server - Mozilla Firefox - /ldap-status

Durch Auswahl des ersten Links mit der Bezeichnung LDAP URL Cache kann nachfolgende Anzeige zum Vorschein gebracht werden:

ArchLinux - Apache HTTP Server - Mozilla Firefox - /ldap-status - LDAP URL Cache

Durch Auswahl der Links mit den Bezeichnungen

können nachfolgende Anzeigen zum Vorschein gebracht werden:

ArchLinux - Apache HTTP Server - Mozilla Firefox - /ldap-status - Searches ArchLinux - Apache HTTP Server - Mozilla Firefox - /ldap-status - Compares ArchLinux - Apache HTTP Server - Mozilla Firefox - /ldap-status - DNCompares

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/apache_http_server_archlinux_-_mod_ldap_-_ldap-authentifizierung.txt · Zuletzt geändert: 2022/06/16 09:30 von klaus