Pure-FTPd mit MySQL und Quotas

Warning: This page is a part of an archive now and will be removed in the future.

Da es kaum richtige und vor allem funktionierende Tutorials zur Installation eines FTP-Servers auf Linux mit einer Benutzerschnittstelle zur MySQL-Datenbank gibt, möchte ich nun einmal schreiben, wie es bei mir funktioniert hat.
Am Ende dieses Tutorials sollte man erfolgreich einen FTP-Server benutzen können, bei dem man Benutzer einfach über MySQL hinzufügen kann. Die Home-Verzeichnisse werden dann automatisch beim ersten Login erstellt. Außerdem kann man die maximale Größe des Verzeichnisses und die maximale Anzahl an Dateien über Quotas bestimmen.

Warum Pure-FTPD?
Pure-FTPD war der einzige FTP-Server, bei dem ich es letztendlich ohne Probleme geschafft habe, einen FTP-Server mit Benutzerschnittstelle zu MySQL zu konfigurieren. Bei anderen FTP-Servern gab es zwar viele Tutorials, jedoch hatten diese immer irgendwo einen Fehler, bei mir hat zumindest keines funktioniert.

Ich gehe hier von einem Debian Lenny Linux System aus, auf dem schon MySQL installiert und konfiguriert wurde. Dort darf also nichts falsch sein, sonst kann es nicht funktionieren.

Damit die neueste Version installiert wird, nacheinander folgende Befehle über SSH ausführen:

Source Code

  1. aptitude update
  2. aptitude safe-upgrade
  3. aptitude install pure-ftpd pure-ftpd-mysql
Nun legen wir eine neue Benutzergruppe und einen neuen Benutzer an, mit dem sich dann Pure-FTPD über MySQL einloggt:

Source Code

  1. groupadd -g 2001 ftpgroup
  2. useradd -u 2001 -s /bin/false -d /home/ftp -c “pureftpd user” -g ftpgroup ftpuser
Sollten die IDs schon vergeben sein, einfach andere wählen. Diese müssen dann bei den folgenden Befehlen eventuell auch angepasst werden, also nicht wahllos, sondern aufmerksam kopieren.

Der FTP-Server würde in der Standardeinstellung im Modus inetd starten, was aber nicht empfehlenswert ist. Deshalb stellen wir das auf standalone um. Wir öffnen also die entsprechende Konfigurations-Datei mit:

Source Code

  1. pico /etc/default/pure-ftpd-common
Dort steht nun:

Source Code

  1. # STANDALONE_OR_INETD
  2. # valid values are "standalone" and "inetd".
  3. # Any change here overrides the setting in debconf.
  4. STANDALONE_OR_INETD=inetd
Hier wird die letzte Zeile verändert, indem das inetd entfernt und ein standalone hingeschrieben wird:

Source Code

  1. STANDALONE_OR_INETD=standalone
Nun geht es an die Konfiguration für MySQL. Erst einmal sollte die Datei /etc/pure-ftpd/db/mysql.conf gesichert werden, bevor sie bearbeitet wird. Danach öffnet man sie, löscht den gesamten Inhalt und trägt folgendes ein:

Source Code

  1. MYSQLSocket /var/run/mysqld/mysqld.sock
  2. MYSQLUser pureftpd
  3. MYSQLPassword geheimespasswort
  4. MYSQLDatabase pureftpd
  5. MYSQLCrypt md5
  6. MYSQLGetPW SELECT password FROM ftpd WHERE user="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
  7. MYSQLGetUID SELECT uid FROM ftpd WHERE user="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
  8. MYSQLGetGID SELECT gid FROM ftpd WHERE user="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
  9. MYSQLGetDir SELECT dir FROM ftpd WHERE user="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
  10. MySQLGetBandwidthUL SELECT ulbandwidth FROM ftpd WHERE user="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
  11. MySQLGetBandwidthDL SELECT dlbandwidth FROM ftpd WHERE user="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
  12. MySQLGetQTASZ SELECT quotasize FROM ftpd WHERE user="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
  13. MySQLGetQTAFS SELECT quotafiles FROM ftpd WHERE user="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
Display All
Zu guter Letzt werden alle Benutzer nun noch geCHRooted und geben einen Befehl aus, damit Pure-FTPD automatisch das Home-Verzeichnis erstellt, wenn sich ein Benutzer das erste Mal einloggt. Außerdem wird der anonyme Zugriff auf den Server mit der dritten Eingabe verhindert:

Source Code

  1. echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone
  2. echo "yes" > /etc/pure-ftpd/conf/CreateHomeDir
  3. echo "yes" > /etc/pure-ftpd/conf/NoAnonymous
Der FTP-Server ist nun konfiguriert, es geht nun an die Konfiguration bzw. die Datenbank in MySQL. Zuerst einmal wird hier eine erstellt und mit einer Tabelle bestückt:

SQL-Query

  1. CREATE DATABASE pureftpd;
  2. CREATE TABLE `ftpd` (
  3. `user` varchar(16) NOT NULL default '',
  4. `status` enum('0','1') NOT NULL default '0',
  5. `password` varchar(64) NOT NULL default '',
  6. `uid` varchar(11) NOT NULL default '-1',
  7. `gid` varchar(11) NOT NULL default '-1',
  8. `dir` varchar(128) NOT NULL default '',
  9. `ulbandwidth` smallint(5) NOT NULL default '0',
  10. `dlbandwidth` smallint(5) NOT NULL default '0',
  11. `comment` tinytext NOT NULL,
  12. `ipaccess` varchar(15) NOT NULL default '*',
  13. `quotasize` smallint(5) NOT NULL default '0',
  14. `quotafiles` int(11) NOT NULL default '0',
  15. PRIMARY KEY (user),
  16. UNIQUE KEY user (user)
  17. ) TYPE=MyISAM;
Display All
Dann wird ein Benutzer erstellt, der die vollen Rechte für diese Datenbank bekommt. Dieser wurde auch schon in die Konfiguration geschrieben (siehe /etc/pure-ftpd/db/mysql.conf):

SQL-Query

  1. GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'geheimsepasswort';
Als letztes fehlt nur noch ein Benutzer. Dieser wird mit dieser Abfrage erstellt:

SQL-Query

  1. INSERT INTO `ftpd` (
  2. `user`, `status`, `password`, `uid`, `gid`, `dir`, `ulbandwidth`, `dlbandwidth`, `comment`, `ipaccess`, `quotasize`, `quotafiles`
  3. ) VALUES (
  4. 'user-1', '1', MD5('geheimespasswort2'), '2001', '2001', '/home/ftp', '100', '100', 'Benutzer-1', '*', '50', '0'
  5. );
Um nun alle Änderungen wirksam zu machen, muss noch kurz der FTP-Server neu gestartet werden. Dies geht über diesen Befehl in SSH:

Source Code

  1. invoke-rc.d pure-ftpd-mysql restart
Voilà, nun kann man sich mit dem Benutzer user-1 und dem Passwort geheimespasswort2 über FTP mit dem Server verbinden.
About the Author
Ich bin Webentwickler in Stuttgart und administriere Server seit vielen Jahren. In diesem Blog erstelle ich hauptsächlich Tutorials für andere Webentwickler, Webdesigner und Serveradministratoren.
-------------------------------------------------------------------------------------------------------------------------------------
I’m a web developer in Stuttgart, Germany, and server administrator since many years. This blog mainly contains a tutorial set for other web developer, web designer and server administrators.

764 times read

Comments 0

There are not any items at the moment.

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.