Pure-FTPd mit MySQL und Quotas

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:

Quellcode

  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:

Quellcode

  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:

Quellcode

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

Quellcode

  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:

Quellcode

  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:

Quellcode

  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")
Alles anzeigen
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:

Quellcode

  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-Abfrage

  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;
Alles anzeigen
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-Abfrage

  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-Abfrage

  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:

Quellcode

  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.
Über den Autor
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.

664 mal gelesen

Kommentare 0

Es wurden keine Einträge gefunden.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen