Da ich mir dachte die .htaccess Dateien sind immer eine Qual, habe ich folgendes Konzept verwirklicht:
Zugriff auf ein Verzeichnis welches in der Apache Konfiguration enthalten ist, mit einem Passwort und Bentuzernamen zu schützen welches in einer MySQL Datenbank steht. Folgende Voraussetzungen sind dafür zu treffen:
Benötigte debian packete
| apt-get install gcc apache2-threaded-dev apache2-dev libmysqlclient-dev patch |
Nachdem die Module installiert sind können wir auch schon loslegen, die Packete können von folgenden Server mittels wget herunter geladen werden:
|
wget http://www.alllinux.de/apache2_mysql_auth/mod_auth_mysql-3.0.0.tar.gz
|
Dann noch die Patch Datei:
| wget http://www.alllinux.de/apache2_mysql_auth/apache22.diff |
als nächsten Schritt entpacken wir die mod_auth_mysql-3.0.0.tar.gz im Download Verzeichnis
| tar xzf mod_auth_mysql-3.0.0.tar.gz |
Die Datei apache22.diff wird dann noch in das neue Verzeichnis verschoben
| mv apache22.diff mod_auth_mysql-3.0.0/ |
nun müssen wir das Modul in die Apache Shared librarys implementieren das geht folgendermaßen:
|
cd mod_auth_mysql-3.0.0
patch -p1 < apache22.diff
apxs2 -c -L/usr/lib/mysql -I/usr/include/mysql -lmysqlclient -lm -lz mod_auth_mysql.c
apxs2 -i mod_auth_mysql.la
|
Sollten die oben angeführten Schritte nicht korrekt abgehandelt werden, einfach nochmal überprüfen ob auch wirklich die development Packete für Apache2 und den MySQL-Client installiert sind, sollte dies nicht der Fall sein so muß es Nachgeholt werden und die oben angeführten commands neu ausgeführt werden.
Nun erstellen wir uns eine load Datei im /etc/apache2/modules/ Verzeichnis
| echo "LoadModule mysql_auth_module /usr/lib/apache2/modules/mod_auth_mysql.so" > /etc/apache2/mods-available/mod_auth_mysql.load |
Diese muß nun noch verlinkt werden:
| ln -s /etc/apache2/mods-available/mod_auth_mysql.load /etc/apache2/mods-enabled/mod_auth_mysql.load |
Es wird eine MySQL Datenbank benötigt, ich habe dies wie folgt gemacht:
In die MySQl Console einloggen:
MySQL Vorbereitungen
| mysql -uroot -p***** |
Datenbank und Tabelle anlegen:
|
create database admin_users;
use admin_users;
CREATE TABLE `users` (
`users_id` int(8) NOT NULL auto_increment,
`users_login` varchar(255) NOT NULL,
`users_password` varchar(255) NOT NULL,
`users_active` int(11) NOT NULL default '1',
PRIMARY KEY (`users_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=0;
|
Diese kann nun mit Useren gefüllt werden die Zugriff auf ein bestimmtes Verzeichnis bekommen sollen.
z.b.
| insert into users (users_login, users_password, users_active) values ("mein_user", MD5('mein_passwort'), 1); |
Sollte man jetzt den Zugriff für einen bestimmten Benutzer vorübergehend deaktivieren wollen kann man das Feld users_active auf 0 setzten und schon kann dieser sich nicht mehr einloggen.
Als letzten Schritt benötigen wir noch die korrekten Einträge für den Apache2 Server diese können entweder in der Location oder Directory Direktive angegeben werden. Eine Beispiel Konfiguration könnte etwa so aussehen:
AuthName "Mein Authfenstername"
AuthType Basic
AuthBasicAuthoritative Off
AuthGroupFile /dev/null
AuthUserFile /dev/null
AuthMySQLEnable On
AuthMySQLHost localhost
AuthMySQLUser datenbanknutzer
AuthMySQLPassword geheim
AuthMySQLDB admin_users
AuthMySQLUserTable users
AuthMySQLNameField users_login
AuthMySQLPasswordField users_password
AuthMySQLPwEncryption md5
AuthMySQLUserCondition "users_active = 1"
AuthMySQLAuthoritative On
require valid-user
|
Nun einfach den Apache2 reloaden und schon können nur noch in die Datenbank eingetragene Benutzer auf dieses Verzeichnis zugreifen:
| /etc/init.d/apache2 reload |
Viel Spaß beim Administrieren,
Stephan Kasdorf