Server Hosting · 5 min read · Feb 11, 2026

Virtuelles Hosting Mit vsftpd Und MySQL Auf Debian Squeeze

Vsftpd ist einer der sichersten und schnellsten FTP-Server für Linux. Normalerweise wird vsftpd so konfiguriert, dass es mit Systembenutzern arbeitet. Dieses Dokument beschreibt, wie man einen vsftpd-Server installiert, der virtuelle Benutzer aus einer MySQL-Datenbank anstelle von echten Systembenutzern verwendet. Dies ist viel leistungsfähiger und ermöglicht es, Tausende von FTP-Benutzern auf einer einzigen Maschine zu haben.

Für die Verwaltung der MySQL-Datenbank können Sie webbasierte Tools wie phpMyAdmin verwenden, die ebenfalls in diesem Howto installiert werden. phpMyAdmin ist eine komfortable grafische Schnittstelle, was bedeutet, dass Sie sich nicht mit der Befehlszeile herumschlagen müssen.

Dieses Tutorial basiert auf Debian Squeeze (Debian 6.0). Sie sollten bereits ein grundlegendes Debian Squeeze-System eingerichtet haben.

Dieses Howto ist als praktische Anleitung gedacht; es behandelt nicht die theoretischen Hintergründe. Diese werden in vielen anderen Dokumenten im Web behandelt.

Dieses Dokument kommt ohne jegliche Gewährleistung! Ich möchte sagen, dass dies nicht der einzige Weg ist, ein solches System einzurichten. Es gibt viele Möglichkeiten, dieses Ziel zu erreichen, aber dies ist der Weg, den ich wähle. Ich gebe keine Garantie, dass dies bei Ihnen funktioniert!

1 Vorbemerkung

In diesem Tutorial verwende ich den Hostnamen server1.example.com mit der IP-Adresse 192.168.0.100. Diese Einstellungen können bei Ihnen abweichen, daher müssen Sie sie gegebenenfalls anpassen.

2 Installieren von vsftpd, MySQL Und phpMyAdmin

Vsftpd hat keine eingebaute MySQL-Unterstützung, daher müssen wir PAM verwenden, um gegen die MySQL-Datenbank zu authentifizieren. Daher installieren wir libpam-mysql zusätzlich zu vsftpd, MySQL und phpMyAdmin:

apt-get install vsftpd libpam-mysql mysql-server mysql-client phpmyadmin

Sie werden nach folgenden Fragen gefragt:

Neues Passwort für den MySQL “root”-Benutzer: <– yourrootsqlpassword
Wiederholen Sie das Passwort für den MySQL “root”-Benutzer: <– yourrootsqlpassword
Webserver automatisch neu konfigurieren: <– apache2
Datenbank für phpmyadmin mit dbconfig-common konfigurieren? <– Nein

3 Erstellen Sie Die MySQL-Datenbank Für vsftpd

Jetzt erstellen wir eine Datenbank namens vsftpd und einen MySQL-Benutzer namens vsftpd, den der vsftpd-Daemon später verwenden wird, um sich mit der vsftpd-Datenbank zu verbinden:

mysql -u root -p
CREATE DATABASE vsftpd;  
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'ftpdpass';  
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';  
FLUSH PRIVILEGES;

Ersetzen Sie die Zeichenfolge ftpdpass durch das Passwort, das Sie für den MySQL-Benutzer vsftpd verwenden möchten. Immer noch in der MySQL-Shell erstellen wir die benötigte Datenbanktabelle (ja, es gibt nur eine Tabelle!):

USE vsftpd;
CREATE TABLE `accounts` (  
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,  
`username` VARCHAR( 30 ) NOT NULL ,  
`pass` VARCHAR( 50 ) NOT NULL ,  
UNIQUE (  
`username`  
)  
) ENGINE = MYISAM ;
quit;

Wie Sie vielleicht bemerkt haben, haben wir mit dem Befehl quit; die MySQL-Shell verlassen und sind zurück in der Linux-Shell.

Übrigens, (ich gehe davon aus, dass der Hostname Ihres FTP-Servers server1.example.com ist) können Sie phpMyAdmin unter http://server1.example.com/phpmyadmin/ (Sie können auch die IP-Adresse anstelle von server1.example.com verwenden) in einem Browser aufrufen und sich als Benutzer vsftpd anmelden. Dann können Sie sich die Datenbank ansehen. Später können Sie phpMyAdmin verwenden, um Ihren vsftpd-Server zu verwalten.

4 Konfigurieren Sie vsftpd

Zuerst erstellen wir einen nicht privilegierten Benutzer namens vsftpd (mit dem Homedir /home/vsftpd), der zur Gruppe nogroup gehört. Wir werden vsftpd unter diesem Benutzer ausführen, und die FTP-Verzeichnisse unserer virtuellen Benutzer werden im Verzeichnis /home/vsftpd liegen (z.B. /home/vsftpd/user1, /home/vsftpd/user2, usw.).

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

Dann machen wir eine Sicherung der ursprünglichen /etc/vsftpd.conf-Datei und erstellen unsere eigene:

cp /etc/vsftpd.conf /etc/vsftpd.conf_orig  
cat /dev/null > /etc/vsftpd.conf  
vi /etc/vsftpd.conf

Die Datei sollte folgenden Inhalt haben:

| listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES nopriv_user=vsftpd chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/vsftpd.pem guest_enable=YES guest_username=vsftpd local_root=/home/vsftpd/$USER user_sub_token=$USER virtual_use_local_privs=YES user_config_dir=/etc/vsftpd_user_conf |

Die Konfigurationsoptionen werden auf http://vsftpd.beasts.org/vsftpd_conf.html erklärt. Die wichtigen Optionen für unser virtuelles Setup sind chroot_local_user, guest_enable, guest_username, user_sub_token, local_root und virtual_use_local_privs.

Mit der Option user_config_dir können Sie ein Verzeichnis für benutzerspezifische Konfigurationsdateien angeben, die Teile der globalen Einstellungen überschreiben. Dies ist völlig optional und liegt an Ihnen, ob Sie diese Funktion nutzen möchten. Wir sollten jedoch jetzt dieses Verzeichnis erstellen:

mkdir /etc/vsftpd_user_conf

Jetzt müssen wir PAM konfigurieren, damit es die MySQL-Datenbank verwendet, um unsere virtuellen FTP-Benutzer anstelle von /etc/passwd und /etc/shadow zu authentifizieren. Die PAM-Konfiguration für vsftpd befindet sich in /etc/pam.d/vsftpd. Wir machen eine Sicherung der ursprünglichen Datei und erstellen eine neue:

cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_orig  
cat /dev/null > /etc/pam.d/vsftpd  
vi /etc/pam.d/vsftpd

| auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 |

Bitte stellen Sie sicher, dass Sie das MySQL-Passwort durch Ihr eigenes ersetzen!

Anschließend starten wir vsftpd neu:

/etc/init.d/vsftpd restart

5 Erstellen Sie Den Ersten Virtuellen Benutzer

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

mysql -u root -p
USE vsftpd;

Jetzt erstellen wir den virtuellen Benutzer testuser mit dem Passwort secret (das verschlüsselt mit der PASSWORD-Funktion von MySQL gespeichert wird):

INSERT INTO accounts (username, pass) VALUES('testuser', PASSWORD('secret'));  
quit;

das Homedir von testuser ist /home/vsftpd/testuser; leider erstellt vsftpd dieses Verzeichnis nicht automatisch, wenn es nicht existiert. Daher erstellen wir es jetzt manuell und machen es dem Benutzer vsftpd und der Gruppe nogroup zugeordnet:

mkdir /home/vsftpd/testuser  
chown vsftpd:nogroup /home/vsftpd/testuser

Jetzt öffnen Sie Ihr FTP-Client-Programm auf Ihrem Arbeitsplatz (etwas wie FileZilla oder FireFTP) und versuchen Sie, eine Verbindung herzustellen. Als Hostnamen verwenden Sie server1.example.com (oder die IP-Adresse des Systems), der Benutzername ist testuser und das Passwort ist secret.

Wenn Sie sich verbinden können - herzlichen Glückwunsch! Wenn nicht, ist etwas schiefgelaufen.

6 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 vsftpd-Datenbank zu verwalten.

Wann immer Sie einen Benutzer erstellen oder ändern, stellen Sie sicher, dass Sie die PASSWORD-Funktion von MySQL verwenden, um das Passwort dieses Benutzers zu verschlüsseln. Außerdem, wenn Sie einen neuen virtuellen Benutzer erstellen, vergessen Sie bitte nicht, das Homedir dieses Benutzers in der Shell zu erstellen, wie am Ende des vorherigen Kapitels gezeigt.

7 Links

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.