Christian Seiler: Apache2 gemischte Autorisierung File/LDAP

Beitrag lesen

Hallo!

Nunja, Du willst - wenn ich es richtig verstanden habe - folgendes machen:

1. Die Authentifizierung (AuthN, Überprüfung der Zugangsdaten eines Users) vollständig über LDAP erledigen.
2. Die Autorisierung (AuthZ, Überprüfung, ob ein bekannter User einen bestimmten Inhalt sehen darf) vollständig über die AuthGroupFile erledigen.

Zuerst einmal: Apache 2. Das ist leider etwas unspezifisch. Es gibt Apache 2.0 und Apache 2.2 - und in 2.2 hat sich *einiges* getan bezüglich Authentifizierung - wenn man nicht gerade eine stinknormale .htpasswd-Datei hat, dann sind .htaccess-Dateien zwischen 2.0 und 2.2 bezüglich Authentifizierung nicht kompatibel zueinander. In der nächsten Apache-Version nach 2.2 wird sich außerdem noch was bezüglich Autorisierung tun.

Dann: Vergiss die "Authoritative"-Einstellung. Die ist absolut nicht das, was Du hier willst (auch wenn es einleuchtet, warum Du meinst, dass die die richtige wäre). Außerdem ist die Authoritative-Einstellung ein Relikt. Mit der Version nach Apache 2.2 wird die völlig überflüssig werden, für die Authentifizierung ist sie schon für Apache 2.2 überflüssig. Nur in Apache 2.0 braucht man sie noch für beides (in bestimmten Fällen).

Wozu braucht man nun die Authoritative-Einstellung? Wenn man mehrere Module haben will, die das *gleiche* tun - zum Beispiel wenn Usernamen + Passwörter *sowohl* im LDAP *als auch* in einer Datei liegen.

Wenn Du aber Authentifizierung nur mit Modul A und Autorisierung nur mit Modul B machen willst, brauchst Du die Authoritative-Einstellung nicht, weil das völlig verschiedene Schritte sind.

Im folgenden habe ich folgendes Testsetup verwendet:

* Gentoo Linux
 * OpenLDAP 2.3.41
 * Apache 2.0.63, kompiliert mit --enable-ldap --enable-auth-ldap --with-ldap
 * Apache 2.2.8, kompiliert mit --enable-ldap --enable-authnz-ldap --with-ldap

Folgendes Beispiel-LDAP-Verzeichnis habe ich benutzt:

dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: Example

dn: ou=Users,dc=example,dc=com
objectClass: organizationalUnit
ou: Users

dn: uid=user1,ou=Users,dc=example,dc=com
objectClass: person
objectClass: uidObject
uid: user1
cn: User 1
sn: User 1
userPassword: {SSHA}XSiIEWlDogK5azxrjW4sqzfVFsaGGiLX

dn: uid=user2,ou=Users,dc=example,dc=com
objectClass: person
objectClass: uidObject
uid: user2
cn: User 2
sn: User 2
userPassword: {SSHA}XSiIEWlDogK5azxrjW4sqzfVFsaGGiLX

(Passwort ist in beiden Fällen 'test')

Folgende .htgroups-Datei habe ich verwendet (in beiden Apache-Fällen):

admins: user1

Folgende .htaccess-Datei habe ich für den Apache 2.0 verwendet:

AuthType Basic  
AuthName "Test area"  
  
AuthLDAPEnabled On  
AuthLDAPUrl "ldap://localhost/dc=example,dc=com??sub?(objectClass=person)"  
AuthLDAPRemoteUserIsDN Off  
  
AuthGroupFile /pfad/.htgroups  
  
require group admins

Folgende .htaccess-Datei habe ich für den Apache 2.2 verwendet:

AuthType Basic  
AuthName "Test area"  
  
AuthBasicProvider ldap  
  
AuthLDAPUrl "ldap://localhost/dc=example,dc=com??sub?(objectClass=person)"  
AuthLDAPRemoteUserIsDN Off  
  
AuthGroupFile /pfad/.htgroups  
  
require group admins

Ich hoffe, ich konnte Dir damit weiterhelfen. Wenn nicht, frage nochmal nach.

Viele Grüße,
Christian