Apache mit LDAP
Autor: Stka
Inhaltsverzeichnis
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