Apache mit LDAP

Aus Linupedia
Wechseln zu: Navigation, Suche

Autor: Stka


Einrichtung einer Authentifizierung von Benutzern am Apache über eine zentrale Benutzerverwaltung mit LDAP

In Netzwerken mit vielen Benutzern und Diensten, macht es Sinn, die Verwaltung von Zugriffsrechten und Benutzern möglichst zentral zu halten. Deshalb ist es möglich, Anmeldungen für einen Apache Web-Server auch über LDAP zu steuern. Für die Authentifizierung muss natürlich ein funktionsfähiger LDAP-Server im Netz laufen, auf den soll hier aber nicht näher eingegangen werden. Hier geht es rein um die Authentifizierung von Benutzern am Apache. Zur Zeit sind in den verschieden Distributionen noch zwei verschieden Versionen des Apache zu finden, zum einen die Version 2.0 und zum anderen die Version 2.2. Bei beiden Versionen wird die Authentifizierung anders Konfiguriert. An diese Stelle sollen beide Versionen erklärt werden. Als Distribution wird Suse vorausgesetzt, Besitzer anderer Distributionen, müssen die Pfade entsprechend anpassen. Bei beiden Verfahren soll davon ausgegangen werden, das Benutzer auf Grund einer Gruppenmitgliedschaft das Recht zur Anmeldung erhalten sollen. Es können auch einzelne Benutzer verwaltet werden, aber in einer größeren Umgebung ist es sinnvoll Zugriffe immer über Gruppen zu regeln. Beide Beispiele verwenden weiterhin als Protokoll https. Die dazugehörigen Zertifikate werden hier auch nicht besprochen. Für die Version 2.0 wir mit einem IP basiertem virtuellen Webserver gearbeitet. Die Konfiguration für die Version 2.2 wird über einen virtuellen Webserver über einen Hostname eingerichtet um zu zeigen das beides möglich ist. Beide Lösungen lassen sich aber auf die jeweils andere Option umstellen.

Authentifizierung mit der Apache Version 2.0

Als erstes müssen in der Datei "/etc/sysconfig/apache2" die Module "ldap" und "auth_ldap" an die Variabel "APACHE_MODULES" angehängt werden, da sonst die Optionen nicht zur Verfügung stehen. Jetzt kann die Datei "/etc/apache2/vhosts.d/server.conf" mit den folgenden Inhalten angelegt werden:

<IfDefine SSL>
<IfDefine !NOSSL>
<VirtualHost 192.168.123.254:443>
        DocumentRoot "/srv/www/phpldapadmin"
        ServerName phpldapadmin.kania-lokal.de:443
        ServerAdmin stefan@kania-online.de
        ErrorLog /var/log/apache2/error_log
        TransferLog /var/log/apache2/access_log
        #-----------Start LDAP Cache Parameter --------------
        LDAPCacheEntries 1024
        LDAPCacheTTL 60
        LDAPOpCacheEntries 1024
        LDAPOpCacheTTL 60
        LDAPSharedCacheSize 200000
        #-----------Ende LDAP Cache Parameter --------------
        SSLEngine on
        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
        SSLCertificateFile /etc/apache2/vhosts.d/phpldapadmincert.pem
        SSLCertificateKeyFile /etc/apache2/vhosts.d/phpldapadmin.pem
        <Files ~ "\.(cgi|shtml|phtml|php3?)$">
            SSLOptions +StdEnvVars
        </Files>
        <Directory "/srv/www/cgi-bin">
            SSLOptions +StdEnvVars
        </Directory>
        SetEnvIf User-Agent ".*MSIE.*" \
                 nokeepalive ssl-unclean-shutdown \
                 downgrade-1.0 force-response-1.0
        CustomLog /var/log/apache2/ssl_request_log   ssl_combined
        <Directory "/srv/www/phpldapadmin">
        Options Indexes FollowSymLinks
        AllowOverride None
        Order deny,allow
        #--------Start LDAP auth ---------------------
        AuthLDAPURL "ldap://fs1.kania-lokal.de:389/dc=kania-lokal,dc=de?uid?sub"
        AuthLDAPGroupAttribute memberUid
        require group cn=phpldapadmin,ou=groups,dc=kania-lokal,dc=de
        # AuthLDAPBindDN und AuthLDAPBindPassword wird benoetigt, wenn
        # keine anonyme suche im LDAP erlaubt ist.
        AuthLDAPBindDN "cn=manager,dc=kania-lokal,dc=de"
        AuthLDAPBindPassword "geheim"
        AuthName "Anmeldung für den phpldapadmin"
        AuthType Basic
        #--------Ende LDAP auth ---------------------
        Allow from all
    </Directory>
</VirtualHost>
</IfDefine>
</IfDefine>


Nach einem Neustart des Apache Webservers kann jetzt auf den neuen viruellen Webserver zugegriffen werden.


Authentifizierung mit der Apache Version 2.2

Mit der Version 2.2 des Apache hat sich bei dem Authentifizierungsmodul einiges geändert, des hier nun die Konfiguration für diese Version. Auch hier müssen als erstes in der Datei "/etc/sysconfig/apache2" Module zusätzlich geladen werden. Dazu werden die Module "ldap" und "authnz_ldap" am Ende der Variablen "APACHE_MODULES" eingetragen. Anschließend wir der Apache neu gestartet. Jetzt kommt dann die Konfigurationsdatei für den virtuellen Webserver:

#-----------LDAP Parameter --------------
LDAPCacheEntries 1024
LDAPCacheTTL 60
LDAPOpCacheEntries 1024
LDAPOpCacheTTL 60
LDAPSharedCacheSize 200000
#-----------LDAP Parameter --------------
<IfDefine SSL>
<IfDefine !NOSSL>
<VirtualHost *:443>
        DocumentRoot "/srv/www/lam"
        ServerName lam.home.stka:443
        ServerAdmin stefan@kania-online.de
        ErrorLog /var/log/apache2/lam-error_log
        TransferLog /var/log/apache2/lam-access_log
        SSLEngine on
        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
        SSLCertificateFile /etc/ssl/private/lamcert.pem
        SSLCertificateKeyFile /etc/ssl/private/lamkey.pem
        <Files ~ "\.(cgi|shtml|phtml|php3?)$">
            SSLOptions +StdEnvVars
        </Files>
        <Directory "/srv/www/cgi-bin">
            SSLOptions +StdEnvVars
        </Directory>
        SetEnvIf User-Agent ".*MSIE.*" \
                 nokeepalive ssl-unclean-shutdown \
                 downgrade-1.0 force-response-1.0
        CustomLog /var/log/apache2/ssl_request_log   ssl_combined
        <Directory "/srv/www/lam">
        Options Indexes FollowSymLinks
        AllowOverride None
        Order deny,allow
        #-------- LDAP auth ---------------------
        AuthType Basic
        AuthBasicProvider ldap
        AuthzLDAPAuthoritative On
        # AuthLDAPBindDN und AuthLDAPBindPassword wird benoetigt, da
        # keine anonyme suche im LDAP erlaubt ist.
        AuthLDAPBindDN "cn=manager,dc=home,dc=stka"
        AuthLDAPBindPassword "geheim"
        AuthName "Anmeldung für den LAM"
        AuthLDAPURL "ldap://ldapserver.home.stka:389/dc=home,dc=stka?uid?sub"
        require ldap-group cn=lamadmin,ou=groups,dc=home,dc=stka
        # "AuthLDAPGroupAttributeIsDN" muss auf "Off" gesetzt sein, 
        # sonst wird in der Mitgliederliste
        # immer nach dem vollständigen DN des Benutzers gesucht 
        # und nicht nur nach der uid
        AuthLDAPGroupAttributeIsDN Off
        AuthLDAPGroupAttribute memberUid
        #-------- LDAP auth ---------------------
        Allow from all
    </Directory>
</VirtualHost>
</IfDefine>
</IfDefine>


Jetzt werden die Parameter für den LDAP Cache nicht mehr in den Bereich des virtuellen Hosts eingetragen sondern davor, weiterhin haben sich einige Parameter geändert und neue sind hinzu gekommen. Ganz wichtig ist der Parameter " AuthLDAPGroupAttributeIsDN", der sorgt dafür, dass wenn in der LDAP-Gruppe die "memberUid" nur aus dem Namen des Objekts besteht (z.B. nur "stka" und nicht "uid=stka",ou=users,dc=home,dc=stka"), das Mitglied trotzdem gefunden wird. Ohne diesen Parameter funktioniert die Suche nach Gruppenmitgliedern nicht. Nach einem Neustart des Apache kann nun auf den virtuellen Webserver zugegriffen werden.

Quellen und weiterführende Links

  • hier kommen noch Links und Quellen hin
  • hier kommen noch Links und Quellen hin
  • hier kommen noch Links und Quellen hin

zurück zu LAMP
zurück zu LDAP