Sven (κ): Dynamische Benutzerauthentifizierung anhand URL

Beitrag lesen

Hallo Christian,

vom letzten Teilsatz wirst du dich vermutlich verabschieden müssen. Warum nicht in jedes der Benutzerverzeichnisse eine separate .htaccess packen, die z.B. die Direktive
require user ingrid
enthält? Eine Vorlage für diese .htaccess kannst du ja irgendwo ablegen, so dass du sie nur noch in das jeweilige Verzeichnis kopieren und den Benutzernamen anpassen musst.
Jain, das ist gar nicht mal nötig. Es reicht vollkommen aus, wenn Du folgende Verzeichnisstruktur hast:
[..]
Die Auth-Einstellungen werden dann automatisch von der höherliegenden .htaccess "geerbt", die Authentifizierung wird aber nur in den einzelnen Verzeichnissen per require forciert.

ja gut, das ist klar (und außerdem hat Der Martin das so gemeint, wenn ich ihn richtig verstehe). So eine Lösung ist allerdings recht unpraktisch, wenn z.B. die Verzeichnisse von einem Benutzer über FTP erstellt werden - ich müsste dann z.B. einen Daemon im Hintergrund laufen lassen, der das Hauptverzeichnis überwacht und bei einem neuen Verzeichnis automatisch einen Befehl à la

$ echo "Require dirname" > .htaccess

absetzt. Und das ist leider nicht so vollautomatisch, wie ich es gerne hätte.

Nach einigen Stunden grübeln bin ich zu der Lösung gekommen, dass ich meine Idee vermutlich am ehesten verwirklichen kann, in dem ich den ganzen Verzeichnisinhalt über Web unerreichbar mache (deny from all) und schließlich die URLs per mod_rewrite auf ein kleines CGI-Script weiterleite. Und das kann ja dann ganz einfach in einer Passwortdatei mit dem vorher extrahierten Verzeichnisnamen eine HTTP-Authentifikation durchführen. Allerdings hat das ganze den fahlen Nachgeschmack, dass alle Dateien dann über das CGI-Script laufen (dies bringt einen nicht unerheblichen Perfomance-Nachteil, vom CGI-Script selbst mal abgesehen) und - das ist gerade in meinem Fall blöd - ich die automatischen Verzeichnislistings von mod_autoindex nicht nutzen kann, sondern mir eigene basteln muss ;-)

Na gut, es waren ein paar Minuten Programmierung, aber jetzt habe ich so eine Lösung in PHP. Schade, dass die seit Apache 2.2. umstrukturierten Authentifikationsmechanismen so etwas nicht unterstützen. Im Endeffekt würde es ja reichen, wenn man sowas wie

Require ${REQUEST_URI}

schreiben könnte und in der htpasswd anschließend die Verzeichnisse quasi per Globbing auflöst:

/verzeichnis*:passwort
/anderesverzeichnis*:passwort

Bei einer Integration des ganzen in mod_rewrite (das klingt etwas abenteuerlich ;) ) würde man sicher einiges an Flexibilität hinzugewinnen.

Wo wir gerade bei Apaches neu strukturiertem Authentifikationsmodell sind: Ich finde es recht traurig, dass Apache nicht einfach PAM benutzt, anstelle für alle möglichen Authentifikations-Backends eigene Implementierungen zu schreiben (flat files, shadow, MySQL, Ldap - das gibts alles, und noch mehr, schon über PAM).

Viele Grüße,

Sven