Ich möchte den Zugriff auf bestimmte von Apache bereitgestellte Verzeichnisse beschränken. Der Client muss einen Benutzernamen und ein Passwort eingeben, aber dann soll Apache den eingegebenen Benutzernamen und das Passwort als Argumente an ein Python-Skript übergeben, das ich zur Authentifizierung geschrieben habe. Anschließend soll Apache basierend auf der Ausgabe des Skripts den Zugriff entweder zulassen oder verweigern. Ist das möglich?
Antwort1
Die einzige mir bekannte Möglichkeit hierfür ist die Verwendungmod_auth_external
oder mod_python
. Mit dem ersten können Sie benutzerdefinierte Authentifizierungssysteme implementieren; mit dem zweiten erhalten Sie einen eingebetteten Python-Interpreter für Apache, mit dem SieSchreiben Sie ein benutzerdefiniertes Authentifizierungsskript. Keines von beiden ist ein Standardmodul, und es handelt sich auch nicht um ein sehr beliebtes Modul.
Jedoch...
am einfachsten wäre es, wenn Ihr Authentifizierungssystem einfach die von Apache verwendete Passwortliste aktualisiert. Apache verfügt über alle Tools, die Sie zum Hinzufügen/Aktualisieren/Löschen von Benutzern aus einer .htpasswd- oder .htdigest-Datei benötigen (es sollte trivial sein, die Befehle htpasswd
oder htdigest
in jedes Benutzerverwaltungssystem einzubinden).
Oderkönnen Sie mod_auth
(das Standardauthentifizierungssystem von Apache) über die folgenden Module aus einer Datenbank lesen lassen:
mod_auth_dbm
- ein Standardmodul, das Ihnen die Nutzung derDBM-Familie prärelationaler Datenbankenmod_auth_mysql
- ein Drittanbietermodul, das Ihnen die Verwendung von MySQL-Datenbanken ermöglicht- Sie können möglicherweise auch PostgreSQL und andere SQL-Datenbanken verwenden, indem Sie
mod_dbd
Undmod_authn_dbd
.
Ich persönlich würde diesen Weg gehen, da er eleganter ist, als die Hashes Ihrer Benutzerkennwörter (hoffentlich speichern Sie nicht die Kennwörter selbst) in einer separaten Textdatei zu duplizieren, und die Erstellung eines neuen Authentifizierungssystems scheint wie eine Neuerfindung des Rades.
Antwort2
Sie können .htaccess verwenden, um den Zugriff auf bestimmte Verzeichnisse zu beschränken.
http://www.elated.com/articles/password-protecting-your-pages-with-htaccess/
Sie müssen eine htpasswd-Datei erstellen, auf die Sie von der .htaccess-Datei aus verweisen
http://www.htaccesstools.com/htpasswd-generator/
Python: Es scheint eine Bibliothek zu geben, die htpasswd-Dateien verarbeiten kann:
http://pacopablo.com/wiki/pacopablo/blog/htpasswd-with-python
Mehr zu Python und htpasswd:
http://packages.python.org/passlib/lib/passlib.apache.html
Ich kenne mich mit Python nicht aus und kann Ihnen keine vollständige Lösung anbieten. Ich denke jedoch, dass es möglich ist und wahrscheinlich nicht zu kompliziert ist, wenn Sie mit Python vertraut sind und ein bisschen googeln.