mod_auth_mysql, Apache 2.2 und Debian Etch
Authentifizierung gegen eine MySQL Datenbank mit Apache 2.2 wird dem Anwender unter Debian Etch ziemlich schwer gemacht. Warum? Es gibt das allseits beliebte libapache2-mod-auth-mysql Paket nicht mehr im Etch Repository, da es nicht sauber gegen Apache 2.2 gebaut werden kann. Da ich alle anderen Lösungen für unnötig kompliziert oder zu unsicher halte, hier eine kleine Anleitung, um das Modul per Hand zu kompilieren.
Ein installierter Apache wird vorausgesetzt, die restlichen Komponenten werden wie folgt nachinstalliert:
aptitude install apache2-dev libmysqlclient-dev patch
Nun laden wir Quellcode und Patch von der Entwicklerseite herunter, entpacken das heruntergeladene Paket und wechseln in den neu erstellten Ordner:
wget http://heanet.dl.sourceforge.net/sourceforge/modauthmysql/mod_auth_mysql-3.0.0.tar.gz wget http://dl.adminlife.net/apache22.diff tar xzf mod_auth_mysql-3.0.0.tar.gz mv apache22.diff mod_auth_mysql-3.0.0/ cd mod_auth_mysql-3.0.0
Nun wird der Patch angewandt, der eine Funktion mit der in Debian Etch enthaltenen Apache 2.2 Version garantiert:
patch -p1 <apache22.diff
Nun bauen wir das Modul mit apxs2 und installieren dieses:
apxs2 -c -L/usr/lib/mysql -I/usr/include/mysql -lmysqlclient -lm -lz mod_auth_mysql.c apxs2 -i mod_auth_mysql.la
Nun bauen wir uns noch eine Debian-typische .load Datei, um das Modul in Apache zu laden und aktivieren das Modul mit einem Softlink:
echo "LoadModule mysql_auth_module /usr/lib/apache2/modules/mod_auth_mysql.so" > /etc/apache2/mods-available/mod_auth_mysql.load ln -s /etc/apache2/mods-available/mod_auth_mysql.load /etc/apache2/mods-enabled/mod_auth_mysql.load
Eine Konfiguration kann wie folgt aussehen:
<directory /var/www/www.my-vhost.com>
AuthName "VIP only"
AuthType Basic
AuthBasicAuthoritative Off
AuthGroupFile /dev/null
AuthUserFile /dev/null
AuthMySQLEnable On
AuthMySQLHost localhost
AuthMySQLUser authuser
AuthMySQLPassword geheim
AuthMySQLDB auth
AuthMySQLUserTable user
AuthMySQLNameField username
AuthMySQLPasswordField password
AuthMySQLPwEncryption md5
AuthMySQLUserCondition "active = 1"
AuthMySQLAuthoritative On
require valid-user
</directory>
Weitere Konfigurationsparameter finden sich in der zugehörigen README.
Wichtig: Das Modul arbeitet mit der threadbasierten Version von Apache (apache2-mpm-worker) nicht korrekt zusammen. Tut euch und euren Usern einen Gefallen und nutzt die klassische Prefork Variante vom Apache (apache2-mpm-prefork), um sporadischen Fehlern bei der Nutzung von mod_auth_mysql aus dem Weg zu gehen.
Related posts:
- Vorsicht: lighttpd Update für Debian Etch Nachdem ich heute morgen eine kritische Lücke in der lighttpd Version unter Debian Etch mit...
- Apache vs. IIS Im Folgenden zwei Grafiken zum Vergleich der Systemaufrufe von Apache und IIS. Na, fällt jemandem...
- MSSQL Zugriff unter Debian Etch mit unixODBC und FreeTDS Wer von unixoiden Systemen auf Datenbanksysteme in der Windows Welt zugreifen wollte, hatte es bisher...
- Howto: MailScanner Tuning unter Debian Etch Ich nutze zum Aufspüren von Spam und Viren MailScanner in Verbindung mit Postfix auf unserem...
- Zeitsynchronisation unter Debian Etch mit chrony PCs speichern ihre Uhrzeit mithilfe eines kleinen Chips: der Realtime Clock (RTC). Häufig ist dies...



stevie
Vielen Dank für die gute Anleitung. Sie half mir meine Auths auf dem Entwicklungsserver zu zentralisieren.
Allerdings scheint es so, als ob
require group xxx"nicht funktioniert. Er macht zwar die SQL-Abfrage, aber gewährt keinen Zugang – zumindestens in meinem Test.Aber wenn es unbedingt die Gruppezugehörigkeit sein soll, die geprüft werden soll, so kann man dies ja über
AuthMySQLUserCondition "active = 1 AND group = 'xxx' "lösen undrequire valid-userbestehen lassen.Internetagentur
Danke … genau hier nach hatte ich gesucht. Einmal gegoogled, sofort gefunden.
basti
Super Anleitung!! Herzlichen Dank!
exxcubitor
Bitte um Hilfe. Ich erhalte nun endlich das Authentifizierungsfenster jedoch bekomme ich keinen Zugang.
Hier meine 000-default:
AuthName “VIP only”
AuthType Basic
AuthBasicAuthoritative Off
AuthGroupFile /dev/null
AuthUserFile /var/www/accessc/user (hier ist meine mittels htpasswd erstellte Datei)
AuthMySQLEnable On
AuthMySQLHost localhost
AuthMySQLUser testuser
AuthMySQLPassword testpasswort (in Klarschrift)
AuthMySQLDB testdb
AuthMySQLUserTable user_info
AuthMySQLNameField user_name
AuthMySQLPasswordField user_passwd
AuthMySQLPwEncryption md5
AuthMySQLUserCondition “active = 1″
AuthMySQLAuthoritative On
require valid-user
Meine mysql testdb hat folgenden Aufbau:
Feldname Typ NULL? Schlüssel Standardwert Extras
user bigint(20) Nein Primär NULL auto_increment
user_name char(30) Nein Keines NULL
user_passwd char(20) Nein Keines NULL
user_group char(10) Ja Keines NULL
matthias
Wofür benötigst du eine Passwortdatei, wenn du dich gegen eine SQL DB authentifizieren willst?
AuthUserFile /var/www/accessc/user
gegen
AuthUserFile /dev/null
tauschen.
Außerdem sollten die Apache Logfiles dir weiterhelfen.
exxcubitor
Vielen Dank für die prompte Antwort, Matthias.
Leider ist mir immer noch der Zugang verweigert.
Meine log sagt folgendes:
MySQL ERROR: Unknown colum ‘active’ in ‘where clause’: /testdb
MySQL user testuser not found: /testdb
Ich habe in meiner Datenbanktabelle den user bigint(20) Nein Primär NULL auto_increment angelegt – ist das die unknown colum?
Der user testuser ist korrekt eingetragen – wird aber augenscheinlich nicht gefunden.
P.S. Ich bin ein MySQL rookie und gerade von windows auf ubuntu umgestiegen- Vielen Dank für Deine Hilfe.
exxcubitor
Fehler:
MySQL ERROR: Unknown colum ‘active’ in ‘where clause’: /testdb
Lösung:
Column active der DB hinzugefügt und als TINYINT(1) deklariert.
Anonymous
Da diese Website hier recht früh in den Google-ergebnissen angezeigt wird, hier ne Info :
Scheinbar ändert sich der Syntax für das Modul unter Debian mit jedem Release, zum Beispiel heisst es bei mir “Auth_MySQL_Username_Field” statt (wie oben) “AuthMySQLNameField”. Welcher Syntax für die eigene Kiste gerade gültige ist sieht man in der “DIRECTIVES”-Datei des Moduls, bei mir liegt diese im Pfad “/usr/share/doc/libapache2-mod-auth-mysql/DIRECTIVES”, zusätzlich dazu sollte man sich einmal die “USAGE” anschauen.
–> also nicht wundern wenn 99% der Angaben auf diversen Websites nicht funktionieren, die o.g. Datei gibt mehr Aufschluss und stimmt mit Sicherheit.