Virtual Hosting mit PureFTPd und MySQL (Incl. Quota und Bandweiten Management) auf Ubuntu 7.10 (Gutsy Gibbon) - Seite 2

6 Die Datenbank Füllen Und Testen

Um die Datenbank zu füllen, kannst Du die MySQL Kommandozeile verwenden:

mysql -u root -p

USE pureftpd;

Nun erstellen wir den Benutzer exampleuser mit dem Status 1 (was bedeutet, dass sein ftp Konto aktiv ist), das Passwort secret (was mit der MD5 Funktion von MySQL verschlüsselt abgelegt wird), die UID und GID 2001 (verwende die Benutzer-ID und Gruppen-ID des Benutzers/der Gruppe, die Du am Ende von Schritt 2 angelegt hast!), das Home Verzeichnis /home/www.example.com, eine Upload und Download Bandwidth von 100 KB/sec. (kilobytes pro Sekunde) und eine Quota 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;

Öffne nun Dein FTP Client Programm auf Deinem Arbeitsplatz (etwas wie WS_FTP oder SmartFTP wenn Du auf einem Windows System arbeitest oder gFTP oder FileZilla auf einem Linux Desktop) und versuche Dich zu verbinden. Als Hostnamen siehst Du server1.example.com (oder die IP Adresse des Systems, der Benutzername ist exampleuser und das Passwort ist secret.

Wenn Du eine Verbindung bekommst - Gratulation! Wenn nicht, ist etwas schief gelaufen.

Wenn Du jetzt dies laufen lässt,

ls -l /home

solltest Du feststellen, dass das Verzeichnis /home/www.example.com (exampleuser's Home Verzeichnis) automatisch erstellt wurde und ftpuser und ftpgroup gehört (der Benutzer/die Gruppe, die wir am Ende von Schritt 2 erstellt haben):

root@server1:~# ls -l /home
total 8
drwxr-xr-x 2 administrator administrator 4096 2007-10-18 11:35 administrator
drwxr-xr-x 2 ftpuser ftpgroup 4096 2007-10-29 14:29 www.example.com
root@server1:~#

7 Administration der Datenbank

Für die meisten ist es einfacher wenn sie ein grafisches Frontend für MySQL haben; daher kannst Du auch phpMyAdmin (in diesem Beispiel unter http://server1.example.com/phpmyadmin/) verwenden, um die pureftpd Datenbank zu verwalten.


Wann immer Du einen neuen Benutzer anlegen möchtest, musst Du einen Eintrag in der Tabelle ftpd erstellen, also 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. Pass auf, dass Du die MD5 Funktion von MySQL verwendest um das Passwort verschlüsselt als MD5 String zu speichern:
  • UID: Die Benutzer-ID des ftp Benutzers, die Du in Schritt 2 erstellt hast (z.B. 2001).
  • GID: Die Gruppen-ID der ftp Gruppe, die Du in Schritt 2 erstellt hast (z.B. 2001).
  • Dir: Das Home Verzeichnis des virtuellen PureFTPd Benutzers (z.B. /home/www.example.com). Wenn es nicht existiert, wird es angelegt, wenn sich der Benutzer zum ersten Mal via FTP anmeldet. Der virtuelle Benutzer wird in seinem Home Verzeichnis eingesperrt, das heißt auf andere Verzeichnisse außerhalb seines Home Verzeichnisses nicht zugreifen.
  • ULBandwidth: Die Upload Bandwidth des virtuellen Benutzers in KB/sec. (Kilobytes pro Sekunde). 0 bedeutet unbegrenzt.
  • DLBandwidth: Die Download Bandwidth des virtuellen Benutzers in KB/sec. (Kilobytes pro Sekunde). 0 bedeutet unbegrenzt.
  • comment: Du kannst hier Kommentare eingeben (z.B. für Deine interne Administration). Normalerweise lässt Du dieses Feld frei.
  • ipaccess: Gib hier IP Adressen ein, denen erlaubt ist sich mit diesem FTP Konto zu verbinden. * bedeutet, dass jeder IP Adresse erlaubt ist, sich zu verbinden
  • 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 von Dateien, die der virtuelle Benutzer auf dem FTP Server speichern darf. 0 bedeutet unbegrenzt.

8 Anonymes FTP Konto

Wenn Du ein anonymes ftp Konto anlegen möchtest (ein ftp Konto, auf das sich jeder ohne Passwort anmelden kann), kannst Du dies wie folgt ausführen:

Erstelle zuerst einen Benutzer ftp (mit der homedir /home/ftp) und Gruppen ftp:

groupadd ftp
useradd -s /bin/false -d /home/ftp -m -c "anonymous ftp" -g ftp ftp

Erstelle 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 Logins zulassen.

Starte PureFTPd neu:

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

Dann erstellen wir das Verzeichnis /home/ftp/incoming, das anonymen Benutzern erlaubt, Dateien hochzuladen. Wir weisen dem /home/ftp/incoming Verzeichnis die Berechtigungen 311 zu, sodass die Benutzer Dateien in diesem Verzeichnis hochladen aber nicht sehen oder runter laden können. Das /home/ftp Verzeichnis hat die Berechtigungen 555, was erlaubt, Dateien anzusehen und runter zu laden:

cd /home/ftp
mkdir incoming
chown ftp:nogroup incoming/
chmod 311 incoming/
cd ../
chmod 555 ftp/

Nun können sich anonyme Benutzer anmelden und Dateien aus dem Verzeichnis /home/ftp runter laden, das Hochladen ist allerdings begrenzt in /home/ftp/incoming (wenn einmal eine Datei in /home/ftp/incoming hochgeladen ist, kann sie von da aus nicht gelesen oder runter geladen werden; der Server Admin muss sie zuerst nach /home/ftp verschieben, um sie anderen verfügbar zu machen).

9 Links

1 Kommentar(e)

Zum Posten von Kommentaren bitte

Kommentare

Von: hahni

Das HowTo funktioniert auch wunderbar mit Ubuntu 10.04 LTS. Das habe ich selbst gerade ausprobiert. Allerdings (und das gilt für alle Ubuntu- und Debian-Versionen) muss die /etc/pure-ftpd/db/mysql.conf wie folgt angepasst werden (man beachte die im SQL-Statement.

--
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")
--