Virtuelles Hosting mit Proftpd und MySQL (inkl. Quota) auf Debian Etch

6 Die Datenbank füllen und testen

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

mysql -u root -p

USE ftp;

Zuerst erstellen wir einen Eintrag in der Tabelle ftpgroup. Sie enthält den Gruppennamen, die Gruppen-id und den Benutzernamen der ftp Gruppe/des Benutzers, die wir am Ende von Schritt zwei angelegt haben (ersetze die Gruppen-id an entsprechender Stelle, falls Du etwas anderes als 2001 verwendest):

INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES (‚ftpgroup‘, 2001, ‚ftpuser‘);

Nun sind wir mit der Tabelle ftpgroup fertig. Wir müssen hier keine weiteren Einträge erstellen. Immer wenn Du einen neuen virtuellen ftp Benutzer anlegst, machst Du das in den Tabellen ftpquotalimits und ftpuser. Lass uns also jetzt unseren ersten Benutzer exampleuser mit einer Quota von 15MB und dem Passwort secret anlegen (immer noch in der MySQL Kommandozeile):

INSERT INTO `ftpquotalimits` (`name`, `quota_type`, `per_session`, `limit_type`, `bytes_in_avail`, `bytes_out_avail`, `bytes_xfer_avail`, `files_in_avail`, `files_out_avail`, `files_xfer_avail`) VALUES (‚exampleuser‘, ‚user‘, ‚true‘, ‚hard‘, 15728640, 0, 0, 0, 0, 0);

INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES (1, ‚exampleuser‘, ’secret‘, 2001, 2001, ‚/home/www.example.com‘, ‚/sbin/nologin‘, 0, “, “);

quit;

(Vergiss nicht die Gruppen- und Benutzer-id 2001 an entsprechender Stelle im letzten INSERT Statement zu ersetzen, falls Du andere Werte als in dieser Anleitung verwendest!)

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

Wenn Du in der Lage bist, Dich zu verbinden – Herzlichen Glückwunsch! Wenn nicht, ist etwas schief gelaufen.

Wenn Du nun dies ausführst

ls -l /home/

müsstest Du feststellen, dass das Verzeichnis /home/www.example.com (exampleusers Home Verzeichnis) automatisch angelegt wurde und im Besitz von ftpuser und ftpgroup (der Benutzer/die Gruppe, die wir am Ende von Schritt zwei angelegt haben) ist:

server1:~# ls -l /home/
total 12
drwxr-xr-x 2 administrator administrator 4096 2007-04-23 14:25 administrator
drwxr-xr-x 2 ftp nogroup 4096 2007-04-23 14:50 ftp
drwxr-xr-x 2 ftpuser ftpgroup 4096 2007-04-23 15:15 www.example.com

7 Administration der Datenbank

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

Immer wenn Du einen neuen Benutzer anlegst, musst Du lediglich Einträge in den Tabellen ftpquotalimits und ftpuser erstellen, also werde ich die Spalten dieser Tabellen hier erklären:

ftpuser Tabelle:

Die wichtigen Spalten sind folgende (die anderen werden von MySQL oder Proftpd automatisch bedient, füll diese also nicht manuell aus!):

  • userid: Der Name des virtuellen Proftpd Benutzers (z.B. exampleuser).
  • passwd: Das unverschlüsselte (d.h. Klartext) Passwort des Benutzers.
  • uid: Die Benutzer-id des ftp Benutzers, den Du am Ende von Schritt zwei angelegt hast (z.B. 2001).
  • gid: Die Gruppen-id der ftp Gruppe, die Du am Ende von Schritt zwei angelegt hast (z.B. 2001).
  • homedir: Das Home Verzeichnis des virtuellen Proftpd Benutzers (z.B. /home/www.example.com). Wenn es nicht existiert, wird es erstellt, wenn sich der neue Benutzer zum ersten Mal via FTP anmeldet. Der virtuelle Benutzer wird in dieses Home Verzeichnis gesperrt, d.h. er kann auf andere Verzeichnisse außerhalb des Home Verzeichnisses nicht zugreifen.
  • shell: Es ist in Ordnung wenn Du /sbin/nologin hier standardmäßig ausfüllst.

ftpquotalimits Tabelle:

Die wichtigen Spalten sind folgende (die anderen werden von MySQL oder Proftpd automatisch bedient, füll diese also nicht manuell aus!):

  • name: Der Name des virtuellen Proftpd Benutzers (z.B. exampleuser).
  • quota_type: user oder group. Normalerweise verwenden wir hier user.
  • per_session: true or false. true bedeutet, dass die Quota-Limits nur für eine Session gültig sind. Wenn der Benutzer zum Beispiel eine Quota von 15 MB hat und er während der derzeitigen Session 15 MB hochgeladen hat, dann kann er nicht mehr hochladen. Wenn er sich aber abmeldet und wieder neu anmeldet, stehen ihm wieder 15 MB zur Verfügung. false bedeutet, dass der Benutzer 15 MB hat, egal ob er sich ab- und wieder anmeldet.
  • limit_type: hard oder soft. Ein hard Quota-Limit ist ein Limit, das nicht überschritten werden kann, während ein soft Quota-Limit vorübergehend überschritten werden kann. Normalerweise verwendet man hier hard.
  • bytes_in_avail: Upload-Limit in Bytes (z.B. 15728640 für 15 MB). 0 bedeutet unbegrenzt.
  • bytes_out_avail: Download-Limit in Bytes. 0 bedeutet unbegrenzt.
  • bytes_xfer_avail: Transfer-Limit in Bytes. Die Summe der Uploads und Downloads, die ein Benutzer tätigen darf. 0 bedeutet unbegrenzt.
  • files_in_avail: Upload-Limit in Dateien. 0 bedeutet unbegrenzt.
  • files_out_avail: Download-Limit in Dateien. 0 bedeutet unbegrenzt.
  • files_xfer_avail: Tranfer-Limit in Dateien. 0 bedeutet unbegrenzt.

Die ftpquotatallies Tabelle wird von Proftpd intern verwendet um Quotas zu verwalten, Du musst dort keine Einträge vornehmen!

8 Anonyme FTP

Wenn Du ein anonymes ftp Konto einrichten möchtest (ein ftp Konto, in das sich jeder ohne Passwort einloggen kann), führst Du Folgendes aus:

Zuerst erstellen wir einen Benutzer und ein Gruppe mit dem Namen anonymous_ftp. Der Benutzer hat das Home Verzeichnis /home/anonymous_ftp:

groupadd -g 2002 anonymous_ftp
useradd -u 2002 -s /bin/false -d /home/anonymous_ftp -m -c „Anonymous FTP User“ -g anonymous_ftp anonymous_ftp

(Ersetze 2002 mit einer Gruppen-/Benutzer-id, die auf Deinem System frei ist.)

Dann erstellen wir das Verzeichnis /home/anonymous_ftp/incoming das anonymen Benutzern erlaubt, Dateien hochzuladen:

mkdir /home/anonymous_ftp/incoming
chown anonymous_ftp:nogroup /home/anonymous_ftp/incoming

Öffne /etc/proftpd/proftpd.conf und füge folgende Direktiven hinzu:

vi /etc/proftpd/proftpd.conf

[...]
<Anonymous ~anonymous_ftp>
  User                                anonymous_ftp
  Group                               nogroup
  # We want clients to be able to login with "anonymous" as well as "ftp"
  UserAlias                        anonymous anonymous_ftp
  # Cosmetic changes, all files belongs to ftp user
  DirFakeUser        on anonymous_ftp
  DirFakeGroup on anonymous_ftp

  RequireValidShell                off

  # Limit the maximum number of anonymous logins
  MaxClients                        10

  # We want 'welcome.msg' displayed at login, and '.message' displayed
  # in each newly chdired directory.
  DisplayLogin                        welcome.msg
  DisplayFirstChdir                .message

  # Limit WRITE everywhere in the anonymous chroot
  <Directory *>
    <Limit WRITE>
      DenyAll
    </Limit>
  </Directory>

  # Uncomment this if you're brave.
  <Directory incoming>
    # Umask 022 is a good standard umask to prevent new files and dirs
    # (second parm) from being group and world writable.
    Umask                                022  022
             <Limit READ WRITE>
             DenyAll
             </Limit>
             <Limit STOR>
             AllowAll
             </Limit>
  </Directory>

</Anonymous>

Starte schließlich Proftpd neu:

/etc/init.d/proftpd restart

Nun können sich anonyme Benutzer anmelden und Dateien von /home/anonymous_ftp runter laden, Uploads auf /home/anonymous_ftp/incoming sind allerdings begrenzt (und wenn eine Datei einmal in /home/anonymous_ftp/incoming hochgeladen ist, kann es von dort aus nicht gelesen oder runter geladen werden; der Server Administrator muss sie zuerst in /home/anonymous_ftp setzen, um sie anderen zugänglich zu machen).

(Bitte Merke: Du kannst nur ein anonymes ftp Konto pro IP Adresse haben!)

9 Referenzen

Mandrake 10.1 – Proftpd + MySQL Authentifizierung + Quotas Anleitung: http://www.khoosys.net/single.htm?ipg=848

10 Links

Das könnte dich auch interessieren …