HowTo: mod_SQL

Diese Anleitung beschreibt die Installation von ProFTPD mit mod_sql bei Verwendung einer mySQL Datenbank. Grundsätzlich ist auch der Einsatz unter Postgres möglich. Eine weitere englische Anleitung findet sich unter:  http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-SQL.html

 

Anregung und Kritik bitte ins Forum.




Wieso mod_sql ?

Trennung der FTP User von den System Usern
Verwendung anderer Passwörter für die FTP User, damit die System Passwörter nicht unverschlüsselt übertragen werden
die Möglichkeit der Verwaltung der User durch ein übersichtliches Webfrontend
die Möglichkeit weitere Zugangsbeschränkungen in Abhängigkeit von Felder in der SQL Datenbank

 

 


Vorraussetzungen für mod_sql

Eine jeweils aktuelle Version von mod_sql liegt dem ProFTPD Sourcecode bei, wird jedoch per Default nicht mit kompiliert. Um ProFTPD mit mod_sql zu erweitern muss also auf jeden Fall ProFTPD neu kompiliert werden, für SuSE stehen auch inoffizielle RPMs zur Verfügung. Um ProFTPD mit mod_sql zu kompilieren benötigt man folgende Pakete:

ProFTPD Sourcecode
mySQL Server
mySQL Client
mySQL Header
mySQL Libraries
Apache mit PHP (nur benötigt bei Verwendung eines Webfrontends)

 

 


MySQL Tabellen anlegen

Zunächst müssen einmal die Voraussetzungen in der mySQL Datenbank geschaffen werden. Es empfiehlt sich zunächst einen extra User für die ProFTPD Tabellen anzulegen, dieses lässt sich relativ einfach z.B. durch die Weboberfläche phpMyAdmin erledigen. Anschliessend werden die Tabellen angelegt.

User in mysql Anlegen.
Tabellenbeschreibung downloaden
mit dem Befehl mysql -u "USERNAME" -p < proftpd_sql.sql die tabellen installieren. Hier bitte "USERNAME" durch den anlegten User ersetzen

ProFTPD kompilieren

Nachdem die Voraussetzungen geschaffen sind, können wir nun anfangen ProFTPD zu kompilieren. Dieses geschieht im einfachsten Fall mit:

./configure --with-modules=mod_sql:mod_sql_mysql

 

Diese Optionen geben an, das mod_sql verwendet werden soll und das Datenbank Modul "mod_sql_mysql". Dieses wird jedoch meist scheitern, da zumindest unter SuSE und Debian die Libraries und Header nicht gefunden werden. Diese muss man in diesem Fall explizit angeben:

   ./configure \

    --with-modules=mod_sql:mod_sql_mysql \

    --with-includes=/usr/include/mysql \

    --with-libraries=/usr/lib/mysql

 

Anschliessend wird mit "make" und "make install" ProFTPD kompiliert und installiert.

 


ProFTPD.conf anpassen

Nun passen wir die proftpd.conf an. mod_sql bietet viele Möglichkeiten, so z.B. User und Gruppenverwaltung, verschiedene Arten die Passwörter zu verschlüsseln, die Integration von Quota oder Access Kontrollen. In diesem Beispiel richten wir nun eine ganz einfache Konfiguration ein, für mehr verweise ich auf die Dokumentation.

SQLAuthTypes Plaintext

SQLAuthenticate users*

SQLConnectInfo db@localhost username password

SQLDefaultGID 65534

SQLDefaultUID 65534

SQLMinUserGID  100

SQLMinUserUID            500

SQLUserInfo ftp username password uid gid homedir shell

 

Hierzu einige Anmerkungen:

"SQLAuthTypes Plaintext" gibt an, dass die Passwörter unverschlüsselt angelegt werden
das "*" hinter "SQLAuthenticate users*" gibt an, dass nur die SQL Datenbank zur Authentifizierung benutzt wird, die normalen System User keinen Zugang haben. Würde das "*" fehlen, dann würden zusätzlich noch die normalen Systemuser geprüft.
Die Defaultwerte geben an, welche UID und GID genommen werden, wenn entweder die in der SQL DB angegeben werden kleiner als die Mindestwerte (stehen darunter) sind oder garkeine angegeben werden. In meinem Beispiel "mappe" ich die UID und GID auf den User "nobody:nogroup". Man muss nicht unbedingt eine UID und GID nehmen, die am System existiert, jedoch ist meiner Meinung nach so besser zu verstehen.
In der letzten Zeile werden dann der Tabellenname (hier "ftp"), sowie die Feldbezeichnungen von Usernamen, password usw. angegeben.

ProFTPD testen

Seit Version 1.2.9 werden die SQL Befehle nicht mehr im normalen Debug Mode von ProFTPD ausgegeben. Fehler in der SQL Konfiguration äussern sich dann entweder einfach in "Access denied" oder im Hinweis der Debug Logs auf Probleme mit dem "Scoreboard File" oder gar "SIG 11". Sollten Probleme auftauchen so kann mit mittels:

 

SQLLOGFILE /var/log/proftpd.sql.log

 

die Komunikation mit der SQL Datenbank mitloggen und so detailliert sehen, welche Probleme ggf. exisitieren.