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/ChrootEveryone

Dies 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/CreateHomeDir

Dies 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 restart

6 Füllen Sie Die Datenbank Und Testen

Um die Datenbank zu füllen, können Sie die MySQL-Shell verwenden:

mysql -u root -p
USE 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 /home

ausfü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 ftp

Erstellen Sie dann die Datei /etc/pure-ftpd/conf/NoAnonymous, die den String no enthält:

echo "no" > /etc/pure-ftpd/conf/NoAnonymous

Mit dieser Konfiguration wird PureFTPd anonyme Anmeldungen zulassen.

Starten Sie PureFTPd neu:

/etc/init.d/pure-ftpd-mysql restart

Dann 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

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.