ProFTPd - FTP-Server mit virtuellen MySQL-Benutzern

How-To: ProFTPd mit MySQL und Benutzerverwaltung zum Download

ProFTPd ist ein leistungsfähiger und umfangreicher FTP-Server für Linux-Systeme, der auf zahlreichen Servern zum Einsatz kommt, um Benutzern per FTP Zugriff auf die Verzeichnisse und Dateien zu gewährleisten. ProFTPd unterstützt standardmäßig die Authentifizierung über die Linux Systembenutzer (sprich die Benutzer, welche auf dem Linux System angelegt wurden), was auf Dauer und bei mehreren Servern unpraktisch werden kann, da man stets die Benutzer inkl. Passwort manuell per useradd oder der jeweiligen Benutzerverwaltung anlegen muss.

Die Alternative sind so genannte virtuelle ProFTPd-Benutzer. ProFTPd unterstützt beispielsweise die Anbindung an eine SQL-Datenbank, so dass die Benutzer und Passwörter in Datenbank-Tabellen gepflegt werden können. ProFTPd greift auf diese Datenbank-Tabellen zu und authentifiziert die Benutzer darüber. Die lästige Verwaltung der Linux Systembenutzer entfällt. Ein weiterer Vorteil: liegen die Login-Daten erst einmal in einer Datenbank, lässt sich eine Benutzerverwaltung für ProFTPd programmieren, so dass FTP-Benutzer auf einfache Art und Weise neu erstellt, bearbeitet und gelöscht werden können.

Dieser Artikel zeigt im ersten Schritt, wie man ProFTPd für die Anbindung an eine MySQL-Datenbank konfiguriert und wie die benötigten Datenbank-Tabellen erstellt werden. Im zweiten Schritt wird erklärt, wie man eine ProFTPd-Benutzerverwaltung programmiert, so dass man bequem mit einem einfachen Webbrowser die FTP-Benutzer administrieren kann. Die ProFTPd-Benutzerverwaltung kann man anschließend natürlich auch herunterladen.

ProFTPd Benutzerverwaltung mit einem einfachen Webbrowser (Mozilla Firefox, Internet Explorer & Co)
ProFTPd Benutzerverwaltung mit einem einfachen Webbrowser (Mozilla Firefox, Internet Explorer & Co)

Voraussetzungen

  • MySQL-Datenbank und -Grundkenntnisse: Alternativ können auch andere DBMS wie Microsoft SQL verwendet werden.
  • Lauffähiger ProFTPd-Server
  • Apache-Webserver, um die Benutzer per Webbrowser verwalten zu können
  • PHP-Support und -Grundkenntnisse, da die Programmierung in PHP erfolgt

Vorteile virtueller ProFTPd-Benutzer in einer MySQL-Datenbank

  • Vereinfachte Benutzerverwaltung: Keine Linux Systembenutzer mehr nötig. Benutzer werden in SQL-Tabellen gespeichert, so dass Anwendungen und Eigenentwicklungen (in PHP) darauf zugreifen können.
  • Migration und Datensicherung: die Benutzer können inkl. Passwort gesichert und auf ein beliebiges anderes System migriert werden.

Anleitung: ProFTPd mit MySQL-Anbindung

Bevor wir ProFTPd konfigurieren können, benötigen wir die MySQL-Datenbank und -Tabelle mit den Login-Daten (an dieser Stelle wird nicht erklärt, wie man Datenbanken und Tabellen in MySQL erstellt. Die Erstellung könnte beispielsweise mit PHPMyAdmin erfolgen). Wir erstellen nun eine Datenbank mit folgender Struktur:

Datenbank: proftpd
Tabelle: ftpuser
Felder: id (MySQL Unique ID), uid (Linux User ID), gid (Linux Group ID), username (FTP-Loginname), password (FTP-Login-Passwort), homedir (FTP-Heimatverzeichnis), shell (Linux Shell des FTP-Users)

Hier der passende SQL-Query, welche die Tabelle erstellt:

CREATE TABLE `ftpuser` (
`id` int(3) NOT NULL AUTO_INCREMENT,
`username` varchar(60) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`uid` int(11) DEFAULT NULL,
`gid` int(11) DEFAULT NULL,
`password` varchar(30) DEFAULT NULL,
`homedir` varchar(250) DEFAULT NULL,
`shell` varchar(60) DEFAULT NULL,
PRIMARY KEY (`id`)
);

Die Tabellenfelder sind selbsterklärend und enthalten die Informationen, welche ProFTPd für die Authentifizierung enthält. Wenn die Datenbank proftpd und die Tabelle ftpuser angelegt wurden, kann nun mit der Konfiguration des ProFTPd-Server begonnen werden. Dazu ergänzen wir die Konfigurationsdatei proftpd.conf, welche sich in der Regel im /etc Verzeichnis befindet:

 # Allgemeine Anleitung
# www.proftpd.de/SQL-Anleitung.30.0.html

# Authentifizierung über Klartext, Passwörter liegen als Klartext in der DB
# www.proftpd.org/docs/directives/linked/config_ref_SQLAuthTypes.html
SQLAuthTypes Plaintext

# Benutzer als Login verwenden. Alternative wäre groups.
# Das * bedeutet, das Unix-Systemaccounts nicht geprüft werden
# www.proftpd.org/docs/directives/linked/config_ref_SQLAuthenticate.html
SQLAuthenticate users*

# Zugriffsinformationen auf die Datenbank
# www.proftpd.de/SQLConnectInfo.212.0.html
SQLConnectInfo datenbank@server login passwort

# Standard-Gruppen ID
# www.proftpd.org/docs/directives/linked/config_ref_SQLDefaultGID.html
SQLDefaultGID 81

# Standard-Benutzer ID
# www.proftpd.org/docs/directives/linked/config_ref_SQLDefaultUID.html
SQLDefaultUID 21

# SQLMinUserGID wird immer überprüft wenn eine User GID empfangen wird.
# Ist der empfangene Wert kleiner dem Wert von SQLMinUserGID, wird die
# GID mit dem minimalen Wert angegeben.
# www.proftpd.de/SQLMinUserGID.239.0.html
SQLMinUserGID 81

# SQLMinUserUID wird immer überprüft wenn eine User UID empfangen wird. Ist der
# empfangene Wert kleiner dem Wert von SQLMinUserUID, wird die UID mit dem
# minimalen Wert angegeben.
# www.proftpd.de/SQLMinUserUID.238.0.html
SQLMinUserUID 21

# Wie heißen die Tabellenfelder in der Datenbank?
# Default: [ user-table user-name passwd uid gid home-dir shell]
# www.proftpd.org/docs/directives/linked/config_ref_SQLUserInfo.html
SQLUserInfo ftpuser username password uid gid homedir shell

# ProFTPd-Logfile
SQLLOGFILE /var/log/proftpd/proftpd.sql.log

Die einzelnen Einstellungen wurden durch Kommentare (#) erklärt. Wer die UID und GID von seinem Linux System nicht kennt, sollte einen Blick in die /etc/passwd werden.

Die Konfiguration ist an dieser Stelle bereits abgeschlossen. Ein /etc/init.d/proftpd reload lässt die neuen Einstellungen einlesen und aktivieren.

Download: ProFTPd-Benutzerverwaltung per Webbrowser

Man könnte nun die FTP-Benutzer manuell in die MySQL-Datenbank einpflegen (beispielsweise mit PHPMyAdmin), was ziemlich unkomfortabel ist. Für diesen Zweck bietet PC-Erfahrung.de eine kleine Eigenentwicklung zum Download an, mit der man Benutzer per Webbrowser anlegen, bearbeiten und löschen kann. Man benötigt lediglich einen funktionierenden Apache-Webserver.

Download - ProFTPd-Benutzerverwaltung

Erklärung

Das Download-Paket kann einfach an die entsprechende Stelle des Webservers entpackt werden. Die Zugriffsbeschränkung erfolgt mittes htaccess-Datei, welche noch angepasst werden muss (neue Benutzer und Passwörter anlegen). Des Weiteren müssen in der index.php noch die SQL-Logindaten angepasst werden, um Zugriff zur erstellten MySQL-Datenbank zu erhalten. In der index.php findet man folgenden Quellcode:

define('MYSQL_HOST',     'localhost'); # MySQL-Server
define('MYSQL_USER', 'sqlUSER'); # MySQL-Benutzer
define('MYSQL_PASS', 'geheim'); # Passwort des MySQL-Benutzers
define('MYSQL_DATABASE', 'proftpd'); # Datenbank

Hier eine Übersicht aller Dateien:

.htaccess: Zugriffsbeschränkung (bitte den Pfad AuthUserFile anpassen!)
.htpasswd: Hier die Benutzer und Passwörter eintragen (ein Benutzer administrator mit Passwort techniker existiert bereits)
index.php: die eigentliche Programmierung der Benutzerverwaltung (bitte die SQL-Logindaten anpassen)
style.css: Layout - CSS Stylesheet
tmpl_footer.html: Layout
tmpl_header.html: Layout

data/proftpd.conf: enthält die Einstellungen für die Proftpd-Konfigurationsdatei
data/proftpd.sql: enthält den SQL-Query, um die Datenbanktabelle anzulegen