Dieses Dokument beschreibt, wie Sie einen PureFTPd-Server installieren, 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 einem einzigen Computer zu haben. Darüber hinaus werde ich die Verwendung von Kontingenten und Upload/Download-Bandbreitenlimits mit diesem Setup zeigen. Passwörter werden verschlüsselt als MD5-Strings in der Datenbank gespeichert.
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 Oberfläche, was bedeutet, dass Sie sich nicht mit der Befehlszeile herumschlagen müssen.
Dieses Tutorial basiert auf Ubuntu 9.10. Sie sollten bereits ein grundlegendes Ubuntu 9.10-Serversystem eingerichtet haben, wie in den ersten acht Kapiteln dieses Tutorials beschrieben:https://www.howtoforge.com/perfect-server-ubuntu-9.10-karmic-koala-ispconfig-2
Dieses Howto ist als praktischer Leitfaden gedacht; es deckt nicht die theoretischen Hintergründe ab. Sie werden in vielen anderen Dokumenten im Internet behandelt.
Dieses Dokument wird ohne jegliche Gewährleistung geliefert! Ich möchte sagen, dass dies nicht die einzige Möglichkeit ist, ein solches System einzurichten. Es gibt viele Wege, dieses Ziel zu erreichen, aber ich gehe diesen Weg. Ich gebe keine Garantie dafür, 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 für Sie abweichen, daher müssen Sie sie gegebenenfalls ersetzen.
Stellen Sie sicher, dass Sie als root angemeldet sind (geben Sie
einsudo su
um root zu werden), da wir alle Schritte aus diesem Tutorial als root-Benutzer ausführen müssen.
2 Installieren Sie MySQL und phpMyAdmin
Dies alles kann mit einem einzigen Befehl installiert werden:
aptitude install mysql-server mysql-client phpmyadmin apache2
Ihnen werden folgende Fragen gestellt:
Neues Passwort für den MySQL-„root“-Benutzer:<-- yourrootsqlpassword
Passwort für den MySQL-„root“-Benutzer wiederholen:<-- yourrootsqlpassword
Webserver zur automatischen Neukonfiguration:<-- apache2
Datenbank für phpmyadmin mit dbconfig-common konfigurieren? <-- Nein
3 Installieren Sie PureFTPd mit MySQL-Unterstützung
Für Ubuntu 9.10 ist ein vorkonfiguriertes Paket pure-ftpd-mysql verfügbar. Installieren Sie es wie folgt:
aptitude install pure-ftpd-mysql
Dann erstellen wir eine FTP-Gruppe (ftpgroup) und einen Benutzer (ftpuser), denen alle unsere virtuellen Benutzer zugeordnet werden. Ersetzen Sie die Gruppen- und Benutzerkennung 2001 durch eine auf Ihrem System freie Nummer:
groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser
4 Erstellen Sie die MySQL-Datenbank für PureFTPd
Jetzt erstellen wir eine Datenbank namens pureftpd und einen MySQL-Benutzer namens pureftpd, den der PureFTPd-Daemon später verwenden wird, um sich mit der pureftpd-Datenbank zu verbinden:
mysql -u root -p
CREATE DATABASE pureftpd;
GEWÄHREN SIE AUSWAHL, EINFÜGEN, UPDATE, LÖSCHEN, ERSTELLEN, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
GEWÄHREN SIE SELECT, INSERT, AKTUALISIEREN, LÖSCHEN, ERSTELLEN, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';
FLUSH PRIVILEGES;
Ersetzen Sie die Zeichenfolge ftpdpass durch das Passwort, das Sie für den MySQL-Benutzer pureftpd verwenden möchten. Immer noch auf der MySQL-Shell erstellen wir die Datenbanktabelle, die wir brauchen (ja, es gibt nur eine Tabelle!):
Verwenden Sie pureftpd;
CREATE TABLE ftpd (
Benutzer varchar(16) NOT NULL default '',
status enum('0','1') NOT NULL default '0',
Password varchar (64) NOT NULL Standard '',
Uid varchar(11) NOT NULL Standard '-1',
Gid varchar(11) NOT NULL Standard '-1',
Dir varchar( 128) NOT NULL Standard '',
ULBandwidth smallint(5) NOT NULL Standard '0',
DLBandwidth smallint(5) NOT NULL Standard '0',
kommentieren Sie tinytext NOT NULL,
ipaccess varchar(15) NICHT NULL Standard '*',
QuotaSize smallint(5) NICHT NULL Standard '0',
QuotaFiles int(11) NICHT NULL Standard 0,
PRIMARY KEY (Benutzer),
UNIQUE KEY Benutzer (Benutzer)
) TYPE=MyISAM;
beenden;
Wie Sie vielleicht bemerkt haben, mit dem Beenden; Befehl haben wir die MySQL-Shell verlassen und befinden uns wieder auf der Linux-Shell.
Übrigens (ich gehe davon aus, dass der Hostname Ihres FTP-Serversystems server1.example.com ist) Sie können auf phpMyAdmin unter http://server1.example.com/phpmyadmin/ zugreifen (Sie können auch die IP-Adresse anstelle von server1 verwenden .example.com) in einem Browser und melden Sie sich als Benutzer pureftpd an. Dann können Sie einen Blick in die Datenbank werfen. Später können Sie phpMyAdmin verwenden, um Ihren PureFTPd-Server zu verwalten.
5 PureFTPd konfigurieren
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 3306MYSQLUser pureftpdMYSQLPassword ftpdpassMYSQLDatabase pureftpd#MYSQLCrypt md5, Klartext, crypt() oder Passwort () - md5 ist SEHR EMPFEHLENSWERT auf cleartextMYSQLCrypt md5MYSQLGetPW 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 WIE "\R")MySQ LGetQTASZ WÄHLE QuotaSize FROM ftpd AUS, WO User="\L"UND Status="1" UND (ipaccess ="*" ODER ipaccess LIKE "\R")MySQLGetQTAFS WÄHLE QuotaFiles FROM ftpd AUS, WO User="\L"UND Status="1". " UND (ipaccess ="*" ODER ipaccess LIKE "\R") |
Achten Sie darauf, dass Sie in der Zeile MYSQLPassword den String ftpdpass durch das echte Passwort für den MySQL-Benutzer pureftpd ersetzen! Bitte beachten Sie, dass wir md5 als MYSQLCrypt-Methode verwenden, was bedeutet, dass wir die Passwörter der Benutzer als MD5-Zeichenfolge in der Datenbank speichern, was weitaus sicherer ist als die Verwendung von Klartext-Passwörtern!
Erstellen Sie dann die Datei /etc/pure-ftpd/conf/ChrootEveryone, die einfach die Zeichenfolge yes:
enthältecho "yes"> /etc/pure-ftpd/conf/ChrootEveryone
Dadurch wird PureFTPd jeden virtuellen Benutzer in seinem Home-Verzeichnis chrooten, sodass er nicht in der Lage sein wird, Verzeichnisse und Dateien außerhalb seines Home-Verzeichnisses zu durchsuchen.
Erstellen Sie auch die Datei /etc/pure-ftpd/conf/CreateHomeDir, die wiederum einfach den String yes enthält:
echo "yes"> /etc/pure-ftpd/conf/CreateHomeDir
Dadurch erstellt PureFTPd das Home-Verzeichnis eines Benutzers, wenn sich der Benutzer anmeldet und das Home-Verzeichnis noch nicht existiert.
Erstellen Sie abschließend die Datei /etc/pure-ftpd/conf/DontResolve, die wiederum einfach den String yes enthält:
echo "ja"> /etc/pure-ftpd/conf/DontResolve
Dadurch sucht PureFTPd nicht nach Hostnamen, was Verbindungen erheblich beschleunigen und die Bandbreitennutzung reduzieren kann.
Danach starten wir PureFTPd neu:
/etc/init.d/pure-ftpd-mysql Neustart
6 Datenbank füllen und testen
Um die Datenbank zu füllen, können Sie die MySQL-Shell verwenden:
mysql -u root -p
Verwenden Sie pureftpd;
Jetzt erstellen wir den Benutzer exampleuser mit dem Status 1 (was bedeutet, dass sein FTP-Konto aktiv ist), dem Passwort geheim (das mit der MD5-Funktion von MySQL verschlüsselt gespeichert wird), der UID und GID 2001 (verwenden Sie die Benutzer- und Gruppen-ID des Benutzers / 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/Sek. (Kilobyte pro Sekunde) und ein Kontingent von 50 MB:
INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, ` QuotaSize`, `QuotaFiles`) WERTE ('exampleuser', '1', MD5('secret'), '2001', '2001', '/home/www.example.com', '100', '100' , '', '*', '50', '0');
beenden;
Öffnen Sie nun Ihr FTP-Client-Programm auf Ihrer Workstation (etwa FileZilla, WS_FTP, SmartFTP oder gFTP) 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 schief gelaufen.
Nun, wenn Sie laufen
ls -l /home
Sie sollten sehen, dass das Verzeichnis /home/www.example.com (das Home-Verzeichnis des Beispielbenutzers) automatisch erstellt wurde und im Besitz von ftpuser und ftpgroup ist (dem Benutzer/der Gruppe, die wir am Ende von Schritt zwei erstellt haben):
[E-Mail-geschützt]:~# ls -l /home
insgesamt 8
drwxr-xr-x 2 Administrator Administrator 4096 2010-01-04 15:38 Administrator
drwxr-xr -x 2 ftpuser ftpgroup 4096 2010-01-04 16:38 www.example.com
[email protected]:~#
7 Datenbankverwaltung
Für die meisten Leute ist es einfacher, wenn sie ein grafisches Frontend 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.
Immer wenn Sie einen neuen Benutzer anlegen möchten, müssen Sie einen Eintrag in der Tabelle ftpd erstellen, daher erkläre ich hier die Spalten dieser Tabelle:
ftpd-Tabelle:
- Benutzer:Der Name des virtuellen PureFTPd-Benutzers (z. B. exampleuser).
- Status:0 oder 1. 0 bedeutet, dass das Konto deaktiviert ist, der Benutzer sich nicht anmelden kann.
- Passwort: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 vorhanden ist, wird es erstellt, wenn sich der neue Benutzer zum ersten 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/Sek. (Kilobyte pro Sekunde). 0 bedeutet unbegrenzt.
- DLBandwidth:Download-Bandbreite des virtuellen Benutzers in KB/Sek. (Kilobyte pro Sekunde). 0 bedeutet unbegrenzt.
- Kommentar:Hier können Sie einen beliebigen Kommentar (z.B. für Ihre interne Verwaltung) eingeben. Normalerweise lassen Sie dieses Feld leer.
- ipaccess:Geben Sie hier IP-Adressen ein, die sich mit diesem FTP-Account verbinden dürfen. * bedeutet, dass jede IP-Adresse eine Verbindung herstellen darf.
- QuotaSize:Speicherplatz in MB (nicht KB, wie bei ULBandwidth und DLBandwidth!), den der virtuelle Benutzer auf dem FTP-Server nutzen darf. 0 bedeutet unbegrenzt.
- QuotaFiles:Anzahl der Dateien, die der virtuelle Benutzer auf dem FTP-Server speichern darf. 0 bedeutet unbegrenzt.
8 Anonymes FTP
Wenn Sie ein anonymes FTP-Konto erstellen möchten (ein FTP-Konto, bei dem sich jeder ohne Passwort anmelden kann), können Sie dies folgendermaßen tun:
Erstellen Sie zuerst einen Benutzer ftp (mit dem Homedir /home/ftp) und die Gruppe ftp:
groupadd ftp
useradd -s /bin/false -d /home/ftp -m -c "anonymous ftp" -g ftp ftp
Erstellen Sie dann die Datei /etc/pure-ftpd/conf/NoAnonymous, die den String no:
enthältecho "no"> /etc/pure-ftpd/conf/NoAnonymous
Mit dieser Konfiguration erlaubt PureFTPd anonyme Anmeldungen.
Starten Sie PureFTPd neu:
/etc/init.d/pure-ftpd-mysql Neustart
Dann erstellen wir das Verzeichnis /home/ftp/incoming, das es anonymen Benutzern ermöglicht, Dateien hochzuladen. Wir werden dem /home/ftp/incoming-Verzeichnis Berechtigungen von 311 erteilen, damit Benutzer Dateien in dieses Verzeichnis hochladen, aber keine Dateien sehen oder herunterladen können. Das Verzeichnis /home/ftp hat Berechtigungen von 555, was das Anzeigen und Herunterladen von Dateien erlaubt:
cd /home/ftp
mkdir eingehend
chown ftp:nogroup eingehend/
chmod 311 eingehend/
cd ../
chmod 555 ftp/Jetzt können sich anonyme Benutzer anmelden und Dateien von /home/ftp herunterladen, aber Uploads sind auf /home/ftp/incoming beschränkt (und sobald eine Datei in /home/ftp/incoming hochgeladen wurde, kann sie weder gelesen noch heruntergeladen werden dort; der Serveradministrator muss es zuerst nach /home/ftp verschieben, um es anderen zur Verfügung zu stellen).
9 Links
- PureFTPd:http://www.pureftpd.org/
- MySQL:http://www.mysql.com/
- phpMyAdmin:http://www.phpmyadmin.net/
- Ubuntu:http://www.ubuntu.com/