Hosting · 6 min read · Jan 20, 2026
Virtuelles Hosting Mit PureFTPd Und MySQL (Incl. Quota Und Bandbreitenmanagement) Auf Debian Lenny - Seite 2
5 Konfigurieren Sie PureFTPd
Bearbeiten Sie /etc/pure-ftpd/db/mysql.conf. Es sollte so aussehen:
cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
cat /dev/null > /etc/pure-ftpd/db/mysql.conf
vi /etc/pure-ftpd/db/mysql.conf| MYSQLSocket /var/run/mysqld/mysqld.sock #MYSQLServer localhost #MYSQLPort 3306 MYSQLUser pureftpd MYSQLPassword ftpdpass MYSQLDatabase pureftpd #MYSQLCrypt md5, cleartext, crypt() oder password() - md5 ist SEHR EMPFEHLENSWERT bei Klartext MYSQLCrypt md5 MYSQLGetPW SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetUID SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetGID SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetDir SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") |
Stellen Sie sicher, dass Sie den String ftpdpass mit dem tatsächlichen Passwort für den MySQL-Benutzer pureftpd in der Zeile MYSQLPassword ersetzen! Bitte beachten Sie, dass wir md5 als MYSQLCrypt-Methode verwenden, was bedeutet, dass wir die Passwörter der Benutzer als MD5-String in der Datenbank speichern, was viel sicherer ist als die Verwendung von Klartext-Passwörtern!
Erstellen Sie dann die Datei /etc/pure-ftpd/conf/ChrootEveryone, die einfach den String yes enthält:
echo "yes" > /etc/pure-ftpd/conf/ChrootEveryoneDies wird PureFTPd dazu bringen, jeden virtuellen Benutzer in seinem Home-Verzeichnis zu chrooten, sodass er nicht in Verzeichnisse und Dateien außerhalb seines Home-Verzeichnisses browsen kann.
Erstellen Sie auch die Datei /etc/pure-ftpd/conf/CreateHomeDir, die erneut einfach den String yes enthält:
echo "yes" > /etc/pure-ftpd/conf/CreateHomeDirDies wird PureFTPd dazu bringen, das Home-Verzeichnis eines Benutzers zu erstellen, wenn der Benutzer sich anmeldet und das Home-Verzeichnis noch nicht existiert.
Jetzt müssen wir PureFTPd als eigenständigen Daemon konfigurieren (es wird derzeit von inetd gesteuert). Dazu öffnen wir /etc/default/pure-ftpd-common und ändern den Wert des Parameters STANDALONE_OR_INETD in standalone:
vi /etc/default/pure-ftpd-common| # Konfiguration für pure-ftpd # (diese Datei wird von /bin/sh geladen, entsprechend bearbeiten) # STANDALONE_OR_INETD # gültige Werte sind "standalone" und "inetd". # Jede Änderung hier überschreibt die Einstellung in debconf. STANDALONE_OR_INETD=standalone # VIRTUALCHROOT: # ob die Binärdatei mit Virtualchroot-Unterstützung verwendet werden soll # gültige Werte sind "true" oder "false" # Jede Änderung hier überschreibt die Einstellung in debconf. VIRTUALCHROOT=false # UPLOADSCRIPT: wenn dies gesetzt ist und der Daemon im Standalone-Modus läuft, # wird pure-uploadscript auch ausgeführt, um das unten angegebene Programm # zum Verarbeiten von Uploads zu starten. siehe /usr/share/doc/pure-ftpd/README.gz oder # pure-uploadscript(8) # Beispiel: UPLOADSCRIPT=/usr/local/sbin/uploadhandler.pl UPLOADSCRIPT= # wenn gesetzt, wird pure-uploadscript $UPLOADSCRIPT mit dem # angegebenen uid und gid ausführen UPLOADUID= UPLOADGID= |
Als nächstes ändern wir /etc/inetd.conf und kommentieren die ftp-Zeile aus:
vi /etc/inetd.conf| [...] #:STANDARD: Dies sind Standarddienste. #ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper [...] |
Anschließend starten wir Inetd und PureFTPd neu:
/etc/init.d/openbsd-inetd restart
/etc/init.d/pure-ftpd-mysql restart6 Füllen Sie Die Datenbank Und Testen
Um die Datenbank zu füllen, können Sie die MySQL-Shell verwenden:
mysql -u root -pUSE pureftpd;Jetzt erstellen wir den Benutzer exampleuser mit dem Status 1 (was bedeutet, dass sein FTP-Konto aktiv ist), das Passwort secret (das verschlüsselt mit der MD5-Funktion von MySQL gespeichert wird), die UID und GID 2001 (verwenden Sie die Benutzer-ID und Gruppen-ID des Benutzers/der Gruppe, die Sie am Ende von Schritt zwei erstellt haben!), das Home-Verzeichnis /home/www.example.com, eine Upload- und Download-Bandbreite von 100 KB/s. (Kilobyte pro Sekunde) und ein Kontingent von 50 MB:
INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('exampleuser', '1', MD5('secret'), '2001', '2001', '/home/www.example.com', '100', '100', '', '*', '50', '0');quit;Öffnen Sie jetzt Ihr FTP-Client-Programm auf Ihrem Arbeitsplatz (etwas wie WS_FTP oder SmartFTP, wenn Sie ein Windows-System verwenden, oder gFTP auf einem Linux-Desktop) und versuchen Sie, eine Verbindung herzustellen. Als Hostname verwenden Sie server1.example.com (oder die IP-Adresse des Systems), der Benutzername ist exampleuser und das Passwort ist secret.
Wenn Sie sich verbinden können - herzlichen Glückwunsch! Wenn nicht, ist etwas schiefgegangen.
Wenn Sie jetzt
ls -l /homeausführen, sollten Sie sehen, dass das Verzeichnis /home/www.example.com (das Home-Verzeichnis von exampleuser) automatisch erstellt wurde und es dem ftpuser und ftpgroup gehört (dem Benutzer/der Gruppe, die wir am Ende von Schritt drei erstellt haben):
server1:~# ls -l /home
total 8
drwxr-xr-x 2 administrator administrator 4096 2009-02-16 13:18 administrator
drwxr-xr-x 2 ftpuser ftpgroup 4096 2009-06-05 16:09 www.example.com
server1:~#7 Datenbankverwaltung
Für die meisten Menschen ist es einfacher, wenn sie eine grafische Benutzeroberfläche für MySQL haben; daher können Sie auch phpMyAdmin (in diesem Beispiel unter http://server1.example.com/phpmyadmin/) verwenden, um die pureftpd-Datenbank zu verwalten.

Wann immer Sie einen neuen Benutzer erstellen möchten, müssen Sie einen Eintrag in der Tabelle ftpd erstellen, daher werde ich die Spalten dieser Tabelle hier erklären:
ftpd Tabelle:
- User: Der Name des virtuellen PureFTPd-Benutzers (z.B. exampleuser).
- status: 0 oder 1. 0 bedeutet, dass das Konto deaktiviert ist, der Benutzer kann sich nicht anmelden.
- Password: Das Passwort des virtuellen Benutzers. Stellen Sie sicher, dass Sie die MD5-Funktion von MySQL verwenden, um das Passwort verschlüsselt als MD5-String zu speichern:

- UID: Die Benutzer-ID des FTP-Benutzers, den Sie am Ende von Schritt zwei erstellt haben (z.B. 2001).
- GID: Die Gruppen-ID der FTP-Gruppe, die Sie am Ende von Schritt zwei erstellt haben (z.B. 2001).
- Dir: Das Home-Verzeichnis des virtuellen PureFTPd-Benutzers (z.B. /home/www.example.com). Wenn es nicht existiert, wird es erstellt, wenn der neue Benutzer sich das erste Mal über FTP anmeldet. Der virtuelle Benutzer wird in dieses Home-Verzeichnis eingesperrt, d.h. er kann nicht auf andere Verzeichnisse außerhalb seines Home-Verzeichnisses zugreifen.
- ULBandwidth: Upload-Bandbreite des virtuellen Benutzers in KB/s. (Kilobyte pro Sekunde). 0 bedeutet unbegrenzt.
- DLBandwidth: Download-Bandbreite des virtuellen Benutzers in KB/s. (Kilobyte pro Sekunde). 0 bedeutet unbegrenzt.
- comment: Hier können Sie einen Kommentar eingeben (z.B. für Ihre interne Verwaltung). Normalerweise lassen Sie dieses Feld leer.
- ipaccess: Geben Sie hier IP-Adressen ein, die sich mit diesem FTP-Konto verbinden dürfen. * bedeutet, dass jede IP-Adresse sich verbinden darf.
- QuotaSize: Speicherplatz in MB (nicht KB, wie in ULBandwidth und DLBandwidth!), den der virtuelle Benutzer auf dem FTP-Server verwenden darf. 0 bedeutet unbegrenzt.
- QuotaFiles: Anzahl der Dateien, die der virtuelle Benutzer auf dem FTP-Server speichern darf. 0 bedeutet unbegrenzt.
8 Anonymer FTP
Wenn Sie ein anonymes FTP-Konto erstellen möchten (ein FTP-Konto, auf das sich jeder ohne Passwort anmelden kann), können Sie es so machen:
Zuerst erstellen Sie einen Benutzer ftp (mit dem Home-Verzeichnis /home/ftp) und die Gruppe ftp:
groupadd ftp
useradd -s /bin/false -d /home/ftp -m -c "anonymer ftp" -g ftp ftpErstellen Sie dann die Datei /etc/pure-ftpd/conf/NoAnonymous, die den String no enthält:
echo "no" > /etc/pure-ftpd/conf/NoAnonymousMit dieser Konfiguration wird PureFTPd anonyme Anmeldungen zulassen.
Starten Sie PureFTPd neu:
/etc/init.d/pure-ftpd-mysql restartDann erstellen wir das Verzeichnis /home/ftp/incoming, das anonymen Benutzern das Hochladen von Dateien ermöglicht. Wir geben dem Verzeichnis /home/ftp/incoming die Berechtigungen 311, sodass Benutzer hochladen können, aber keine Dateien in diesem Verzeichnis sehen oder herunterladen können. Das Verzeichnis /home/ftp erhält die Berechtigungen 555, die das Sehen und Herunterladen von Dateien erlauben:
cd /home/ftp
mkdir incoming
chown ftp:nogroup incoming/
chmod 311 incoming/
cd ../
chmod 555 ftp/Jetzt können sich anonyme Benutzer anmelden, und sie können Dateien aus /home/ftp herunterladen, aber Uploads sind auf /home/ftp/incoming beschränkt (und sobald eine Datei in /home/ftp/incoming hochgeladen wurde, kann sie von dort nicht mehr gelesen oder heruntergeladen werden; der Server-Administrator muss sie zuerst nach /home/ftp verschieben, um sie anderen zur Verfügung zu stellen).
9 Links
- PureFTPd: http://www.pureftpd.org
- MySQL: http://www.mysql.com
- phpMyAdmin: http://www.phpmyadmin.net
- Debian: http://www.debian.org
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.