FTP-Speicher: Unterschied zwischen den Versionen

Aus sourceDESK Wiki
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „Diese Anleitung beschreibt die Konfiguration von FTP-Servern für das sourceDESK-Plugin für FTP-Speicher. Als System wird hier '''Debian 8''' verwendet. == S…“)
 
(Konfiguration)
 
(12 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 17: Zeile 17:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
dpkg-reconfigure tzdata
 
dpkg-reconfigure tzdata
</syntaxhighlight>
 
 
Wir müssen nun sicherstellen, dass der Netzwerk-Manager von Debian deaktiviert ist:
 
 
<syntaxhighlight lang="bash">
 
systemctl stop NetworkManager.service
 
systemctl disable NetworkManager.service
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
Eine Portänderung von SSH ist möglich, auch wenn wir davon abraten. Wenn der Port geändert wird, auf jeden Fall einen Port kleiner als 1024 wählen! Passwort-Authentifizierung darf nicht deaktiviert werden.
 
Eine Portänderung von SSH ist möglich, auch wenn wir davon abraten. Wenn der Port geändert wird, auf jeden Fall einen Port kleiner als 1024 wählen! Passwort-Authentifizierung darf nicht deaktiviert werden.
  
Jetzt kommt der komplizierteste Schritt bei KVM: Die Netzwerkkonfiguration. Wir nutzen hierzu eine Netzwerk-Brücke (Bridge).
+
Als nächstes konfigurieren wir den MySQL-Server. Hier wird die Variable ''bind-address'' in der Datei ''/etc/mysql/my.cnf'' von ''127.0.0.1'' auf ''0.0.0.0'' geändert. Danach wird der MySQL-Server neugestartet. Zusätzlich sollten wir noch ''mysql_secure_installation'' ausführen, hier darf der Remote-Zugriff für root nicht deaktiviert werden.
  
Wir erstellen die Bridge ''br0'' mit folgendem Kommando von ''bridge-utils'':
+
Nun müssen wir den Remote-Zugriff noch explizit erlauben, hierbei unbedingt ''IHR_PASSWORT'' durch das Root-Passwort für MySQL ersetzen:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
brctl addbr br0
+
mysql -uroot -p
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Als nächstes müssen wir einen Autostart der Bridge beim Server-Start einrichten. Wir gehen mit dieser Konfiguration davon aus, dass ''eth0'' zum Zugriff auf das Netzwerk durch den Server genutzt wird. Andernfalls muss das Interface entsprechend geändert werden. Wir müssen nun die Datei ''/etc/network/interfaces'' bearbeiten. Am Ende der Datei fügen wir folgende Konfiguration für die Bridge ein:
+
<syntaxhighlight lang="mysql">
 
+
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'IHR_PASSWORT';
<syntaxhighlight lang="bash">
+
FLUSH PRIVILEGES;
auto br0
+
iface br0 inet dhcp
+
        bridge_ports eth0
+
        bridge_stp off
+
        bridge_fd 0
+
        bridge_maxwait 0
+
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Diese Konfiguration geht davon aus, dass DHCP für die IP-Adresse verwendet ist. Ist dies nicht der Fall, übernehmen Sie bitte die IP-Konfiguration von ''eth0''. ''eth0'' taucht später nicht mehr in der Konfigurations-Datei aus, das komplette Netzwerk läuft über die Bridge.
+
Für erhöhte Sicherheit muss SSL aktiviert werden, eine unverschlüsselte Verbindung ist nicht möglich. Dazu bearbeiten Sie bitte erneut die ''/etc/mysql/my.cnf'' und entfernen Sie das Kommentar-Zeichen # vor den Variablen ''ssl-ca'', ''ssl-cert'' und ''ssl-key''.
  
Wir starten den Server nun neu. Nach dem Neustart muss ''ifconfig'' zeigen, dass die Bridge ''br0'' eine IP-Adresse hat und ''eth0'' keine IP-Adresse mehr zugeordnet ist. Damit ist die Netzwerk-Konfiguration abgeschlossen.
+
Legen Sie nun die Dateien ''/etc/mysql/cacert.pem'', ''/etc/mysql/server-cert.pem'' und ''/etc/mysql/server-key.pem'' mit Ihrem SSL-Zertifikat an. Wichtig: Der SSL-Schlüssel muss im RSA-Format sein. Ist er das nicht, wirft MySQL eine Fehlermeldung. Die Konvertierung geht mit OpenSSL:
  
== Templates ==
+
<syntaxhighlight lang="bash">
Da die Betriebssystem-Installation bei KVM vom Nutzer via VNC erfolgt, ist eine ISO-Datei notwendig, die dann beim Boot-Vorgang eingebunden wird. Es kann hier also theoretisch jedes Betriebssystem verwendet werden, auch Windows.
+
openssl rsa -in /etc/mysql/server-key.pem -out /etc/mysql/server-key.pem
 
+
</syntaxhighlight>
Die entsprechenden Distributionen kann man also direkt auf der jeweiligen Seite der Distribution herunterladen.
+
 
+
Der Einfachheit halber nutzt sourceDESK nur ISO-Dateien aus dem Verzeichnis ''/home/iso'', welches Sie anlegen müssen. Dorthin laden Sie bitte sämtliche ISO-Dateien, die Sie mit KVM verwenden möchten.
+
  
Zu Testzwecken laden wir einfach eine minimale Debian-Version mit Netinstall:
+
Nun konfigurieren wir den eigentlichen FTP-Server. Als erstes muss eine Benutzergruppe angelegt werden:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
mkdir -p /home/iso
+
groupadd -g 2001 ftpgroup
cd /home/iso
+
useradd -u 2001 -s /bin/false -d /bin/null -g ftpgroup ftpuser
wget http://cdimage.debian.org/debian-cd/8.5.0/amd64/iso-cd/debian-8.5.0-amd64-netinst.iso
+
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== Testen ==
+
Wir bauen nun die Datenbank-Struktur auf:
Wir erstellen nun die Verzeichnisse ''/home/xml'' und ''/home/hdd'':
+
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
mkdir -p /home/xml
+
mysql -uroot -p
mkdir -p /home/hdd
+
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Wir erstellen nun die Datei ''/home/xml/test.xml'' mit folgendem Inhalt:
+
<syntaxhighlight lang="mysql">
 +
CREATE DATABASE proftpd;
 +
USE proftpd;
  
<syntaxhighlight lang="xml">
+
CREATE TABLE ftpgroup (
<domain type='kvm'>
+
    groupname varchar(16) NOT NULL default '',
  <name>test</name>
+
    gid smallint(6) NOT NULL default '5500',
  <uuid>f5b8c05b-9c7a-3211-49b9-2bd635f7e2aa</uuid>
+
    members varchar(16) NOT NULL default '',
  <memory>1048576</memory>
+
    KEY groupname (groupname)
  <currentMemory>1048576</currentMemory>
+
) ENGINE=MyISAM COMMENT='ProFTP group table';
  <vcpu>1</vcpu>
+
  <os>
+
CREATE TABLE ftpquotalimits (
     <type>hvm</type>
+
     name varchar(30) default NULL,
     <boot dev='cdrom'/>
+
     quota_type enum('user','group','class','all') NOT NULL default 'user',
  </os>
+
    per_session enum('false','true') NOT NULL default 'false',
  <features>
+
    limit_type enum('soft','hard') NOT NULL default 'soft',
     <acpi/>
+
     bytes_in_avail bigint(20) unsigned NOT NULL default '0',
  </features>
+
    bytes_out_avail bigint(20) unsigned NOT NULL default '0',
  <clock offset='utc'/>
+
    bytes_xfer_avail bigint(20) unsigned NOT NULL default '0',
  <on_poweroff>destroy</on_poweroff>
+
    files_in_avail int(10) unsigned NOT NULL default '0',
  <on_reboot>restart</on_reboot>
+
     files_out_avail int(10) unsigned NOT NULL default '0',
  <on_crash>destroy</on_crash>
+
     files_xfer_avail int(10) unsigned NOT NULL default '0'
  <devices>
+
) ENGINE=MyISAM;
     <emulator>/usr/bin/kvm</emulator>
+
     <disk type="file" device="disk">
+
CREATE TABLE ftpquotatallies (
      <driver name="qemu" type="raw"/>
+
    name varchar(30) NOT NULL default '',
      <source file="/home/hdd/test.img"/>
+
     quota_type enum('user','group','class','all') NOT NULL default 'user',
      <target dev="vda" bus="virtio"/>
+
     bytes_in_used bigint(20) unsigned NOT NULL default '0',
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0"/>
+
    bytes_out_used bigint(20) unsigned NOT NULL default '0',
     </disk>
+
    bytes_xfer_used bigint(20) unsigned NOT NULL default '0',
     <disk type="file" device="cdrom">
+
     files_in_used int(10) unsigned NOT NULL default '0',
      <driver name="qemu" type="raw"/>
+
     files_out_used int(10) unsigned NOT NULL default '0',
      <source file="/home/iso/debian-8.5.0-amd64-netinst.iso"/>
+
    files_xfer_used int(10) unsigned NOT NULL default '0'
      <target dev="hdc" bus="ide"/>
+
) ENGINE=MyISAM;
      <readonly/>
+
      <address type="drive" controller="0" bus="1" target="0" unit="0"/>
+
CREATE TABLE ftpuser (
     </disk>
+
     id int(10) unsigned NOT NULL auto_increment,
     <interface type='bridge'>
+
     userid varchar(32) NOT NULL default '',
      <source bridge='br0'/>
+
     passwd varchar(32) NOT NULL default '',
      <mac address="00:00:A3:B0:56:10"/>
+
     uid smallint(6) NOT NULL default '2001',
     </interface>
+
    gid smallint(6) NOT NULL default '2001',
     <controller type="ide" index="0">
+
     homedir varchar(255) NOT NULL default '',
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1"/>
+
    shell varchar(16) NOT NULL default '/sbin/nologin',
     </controller>
+
    count int(11) NOT NULL default '0',
     <input type='mouse' bus='ps2'/>
+
    accessed datetime NOT NULL default '0000-00-00 00:00:00',
     <graphics type='vnc' port='5900' listen='0.0.0.0' passwd='test1234'/>
+
     modified datetime NOT NULL default '0000-00-00 00:00:00',
     <console type='pty'>
+
    PRIMARY KEY (id),
      <target port='0'/>
+
    UNIQUE KEY userid (userid)
    </console>
+
) ENGINE=MyISAM COMMENT='ProFTP user table';
  </devices>
+
 
</domain>
+
INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001, 'ftpuser');
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Nun muss die Festplatte noch erstellt werden, wir nutzen hierzu qcow2 als Image-Format:
+
Danach wird das Backend für PowerDNS konfiguriert. Hierfür bearbeiten wir die Datei ''/etc/proftpd/modules.conf''. Hier werden die Module ''mod_sql.c'', ''mod_sql_mysql.c'' und ''mod_quotatab_sql.c'' einkommentiert. Unter der Sektion "Alternative authentication frameworks" fügen Sie folgendes hinzu:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
qemu-img create -f qcow2 /home/hdd/test.img 10G
+
DefaultRoot ~
</syntaxhighlight>
+
 +
SQLBackend              mysql
 +
# The passwords in MySQL are encrypted using CRYPT
 +
SQLAuthTypes            Plaintext Crypt
 +
SQLAuthenticate        users groups
 +
 +
# used to connect to the database
 +
# databasename@host database_user user_password
 +
SQLConnectInfo  proftpd@localhost root <password>
 +
 +
# Here we tell ProFTPd the names of the database columns in the "usertable"
 +
# we want it to interact with. Match the names with those in the db
 +
SQLUserInfo    ftpuser userid passwd uid gid homedir shell
 +
 +
# Here we tell ProFTPd the names of the database columns in the "grouptable"
 +
# we want it to interact with. Again the names match with those in the db
 +
SQLGroupInfo    ftpgroup groupname gid members
 +
 +
# set min UID and GID - otherwise these are 999 each
 +
SQLMinID        500
 +
 +
# create a user's home directory on demand if it doesn't exist
 +
CreateHome on
 +
 +
# Update count every time user logs in
 +
SQLLog PASS updatecount
 +
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser
 +
 +
# Update modified everytime user uploads or deletes a file
 +
SQLLog  STOR,DELE modified
 +
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser
 +
 +
# User quotas
 +
# ===========
 +
QuotaEngine on
 +
QuotaDirectoryTally on
 +
QuotaDisplayUnits Mb
 +
QuotaShowQuotas on
 +
 +
SQLNamedQuery get-quota-limit SELECT "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 FROM ftpquotalimits WHERE name = '%{0}' AND quota_type = '%{1}'"
 +
 +
SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"
 +
 +
SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" ftpquotatallies
 +
 +
SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies
 +
 +
QuotaLimitTable sql:/get-quota-limit
 +
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
 +
 +
RootLogin off
 +
RequireValidShell off
  
Damit haben eine 10 GB große Festplatte und erstellen nun den vServer mit einem CPU-Kern und 1 GB RAM:
+
<IfModule mod_tls.c>
 +
TLSEngine                  on
 +
TLSLog                    /var/log/proftpd/tls.log
 +
TLSProtocol                SSLv3 TLSv1
 +
TLSOptions                NoCertRequest
 +
TLSRSACertificateFile      /etc/mysql/server-cert.pem
 +
TLSRSACertificateKeyFile  /etc/mysql/server-key.pem
 +
TLSCertificateChainFile    /etc/mysql/cacert.pem
 +
TLSVerifyClient            off
 +
TLSRequired                on
 +
</IfModule>
  
<syntaxhighlight lang="bash">
+
User ftpuser
virsh create /home/xml/test.xml
+
Group ftpgroup
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Nun sollte die VM ein virtuelles Interface ''vnet0'' bei der Bridge ''br0'' bekommen haben, das überprüfen wir:
+
Unter ''SQLConnectInfo'' muss ''<password>'' durch das Root-Passwort von MySQL ersetzt werden.
  
<syntaxhighlight lang="bash">
+
Wichtig: Sollte irgendwo anders die Zeile ''QuotaEngine off'' auftauchen, muss diese unbedingt auskommentiert werden.
brctl show
+
</syntaxhighlight>
+
  
Es sollte nun auch ein VNC-Server auf Port 5900 gestartet wurden sein, dies können wir auch prüfen:
+
Nun muss der FTP-Server noch neugestartet werden:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
netstat -nap | egrep '(kvm|qemu)'
+
service proftpd restart
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Als nächstes verbinden wir uns mit einem VNC-Client auf den Host-Server auf Port 5900, hier hört der VNC-Server der VM. Das Passwort lautet ''test1234''.
+
Zuletzt legen wir das Verzeichnis für die FTP-Dateien an:
 
+
== Freie IP-Adressen ==
+
Damit sourceDESK weiß, welche IP-Adressen für die vServer noch zur Verfügung stehen, muss die Datei ''/root/free-v4.txt'' und/oder ''/root/free-v6.txt'' angelegt werden. In diese Dateien wird pro Zeile eine freie IPv4-/IPv6-Adresse eingetragen.
+
 
+
Beispiel:
+
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
1.2.3.4
+
mkdir -p /var/ftp
5.6.7.8
+
chown -R ftpuser:ftpgroup /var/ftp
9.0.1.2
+
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
Damit ist die Konfiguration abgeschlossen.
  
 
== Hinzufügen ==
 
== Hinzufügen ==
Beim Hinzufügen eines Produktes in sourceDESK muss nur der Hostname (eventuell mit geändertem SSH-Port, zum Beispiel vm01.sourceway.de:923) und das Root-Passwort angegeben werden.
+
Beim Hinzufügen eines Produktes in sourceDESK muss der Hostname, das Root-Passwort für den MySQL-Server, das Root-Passwort des Servers und der SSH-Port angegeben werden. Natürlich muss auch eine Quota gesetzt werden.
 
+
Sie können sodann die Einstellungen für den vServer vornehmen, hier können Sie die Anzahl der CPU-Kerne, den Arbeitsspeicher und die Festplatte einstellen.
+

Aktuelle Version vom 7. Oktober 2016, 11:37 Uhr

Diese Anleitung beschreibt die Konfiguration von FTP-Servern für das sourceDESK-Plugin für FTP-Speicher. Als System wird hier Debian 8 verwendet.

Software-Installation

Als erstes installieren wir die benötigte Software.

apt-get install proftpd proftpd-mod-mysql mysql-server mysql-client

ProFTPd soll im Servermodus gestartet werden. Für den MySQL-Administrator sollte ein möglichst sicheres Passwort eingegeben werden.

Konfiguration

Zuerst sollte der Hostname des Nodes konfiguriert werden. Dieser wird in die Datei /etc/hostname eingetragen und über das Kommando hostname gesetzt.

Die System-Zeit und die Zeitzone sollte überprüft werden, diese Einstellungen müssen korrekt sein. Die Zeitzone können wir wie folgt auf die deutsche Zeitzone stellen:

dpkg-reconfigure tzdata

Eine Portänderung von SSH ist möglich, auch wenn wir davon abraten. Wenn der Port geändert wird, auf jeden Fall einen Port kleiner als 1024 wählen! Passwort-Authentifizierung darf nicht deaktiviert werden.

Als nächstes konfigurieren wir den MySQL-Server. Hier wird die Variable bind-address in der Datei /etc/mysql/my.cnf von 127.0.0.1 auf 0.0.0.0 geändert. Danach wird der MySQL-Server neugestartet. Zusätzlich sollten wir noch mysql_secure_installation ausführen, hier darf der Remote-Zugriff für root nicht deaktiviert werden.

Nun müssen wir den Remote-Zugriff noch explizit erlauben, hierbei unbedingt IHR_PASSWORT durch das Root-Passwort für MySQL ersetzen:

mysql -uroot -p
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'IHR_PASSWORT';
FLUSH PRIVILEGES;

Für erhöhte Sicherheit muss SSL aktiviert werden, eine unverschlüsselte Verbindung ist nicht möglich. Dazu bearbeiten Sie bitte erneut die /etc/mysql/my.cnf und entfernen Sie das Kommentar-Zeichen # vor den Variablen ssl-ca, ssl-cert und ssl-key.

Legen Sie nun die Dateien /etc/mysql/cacert.pem, /etc/mysql/server-cert.pem und /etc/mysql/server-key.pem mit Ihrem SSL-Zertifikat an. Wichtig: Der SSL-Schlüssel muss im RSA-Format sein. Ist er das nicht, wirft MySQL eine Fehlermeldung. Die Konvertierung geht mit OpenSSL:

openssl rsa -in /etc/mysql/server-key.pem -out /etc/mysql/server-key.pem

Nun konfigurieren wir den eigentlichen FTP-Server. Als erstes muss eine Benutzergruppe angelegt werden:

groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -g ftpgroup ftpuser

Wir bauen nun die Datenbank-Struktur auf:

mysql -uroot -p
CREATE DATABASE proftpd;
USE proftpd;
 
CREATE TABLE ftpgroup (
    groupname varchar(16) NOT NULL default '',
    gid smallint(6) NOT NULL default '5500',
    members varchar(16) NOT NULL default '',
    KEY groupname (groupname)
) ENGINE=MyISAM COMMENT='ProFTP group table';
 
CREATE TABLE ftpquotalimits (
    name varchar(30) default NULL,
    quota_type enum('user','group','class','all') NOT NULL default 'user',
    per_session enum('false','true') NOT NULL default 'false',
    limit_type enum('soft','hard') NOT NULL default 'soft',
    bytes_in_avail bigint(20) unsigned NOT NULL default '0',
    bytes_out_avail bigint(20) unsigned NOT NULL default '0',
    bytes_xfer_avail bigint(20) unsigned NOT NULL default '0',
    files_in_avail int(10) unsigned NOT NULL default '0',
    files_out_avail int(10) unsigned NOT NULL default '0',
    files_xfer_avail int(10) unsigned NOT NULL default '0'
) ENGINE=MyISAM;
 
CREATE TABLE ftpquotatallies (
    name varchar(30) NOT NULL default '',
    quota_type enum('user','group','class','all') NOT NULL default 'user',
    bytes_in_used bigint(20) unsigned NOT NULL default '0',
    bytes_out_used bigint(20) unsigned NOT NULL default '0',
    bytes_xfer_used bigint(20) unsigned NOT NULL default '0',
    files_in_used int(10) unsigned NOT NULL default '0',
    files_out_used int(10) unsigned NOT NULL default '0',
    files_xfer_used int(10) unsigned NOT NULL default '0'
) ENGINE=MyISAM;
 
CREATE TABLE ftpuser (
    id int(10) unsigned NOT NULL auto_increment,
    userid varchar(32) NOT NULL default '',
    passwd varchar(32) NOT NULL default '',
    uid smallint(6) NOT NULL default '2001',
    gid smallint(6) NOT NULL default '2001',
    homedir varchar(255) NOT NULL default '',
    shell varchar(16) NOT NULL default '/sbin/nologin',
    count int(11) NOT NULL default '0',
    accessed datetime NOT NULL default '0000-00-00 00:00:00',
    modified datetime NOT NULL default '0000-00-00 00:00:00',
    PRIMARY KEY (id),
    UNIQUE KEY userid (userid)
) ENGINE=MyISAM COMMENT='ProFTP user table';
 
INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001, 'ftpuser');

Danach wird das Backend für PowerDNS konfiguriert. Hierfür bearbeiten wir die Datei /etc/proftpd/modules.conf. Hier werden die Module mod_sql.c, mod_sql_mysql.c und mod_quotatab_sql.c einkommentiert. Unter der Sektion "Alternative authentication frameworks" fügen Sie folgendes hinzu:

DefaultRoot ~
 
SQLBackend              mysql
# The passwords in MySQL are encrypted using CRYPT
SQLAuthTypes            Plaintext Crypt
SQLAuthenticate         users groups
 
# used to connect to the database
# databasename@host database_user user_password
SQLConnectInfo  proftpd@localhost root <password>
 
# Here we tell ProFTPd the names of the database columns in the "usertable"
# we want it to interact with. Match the names with those in the db
SQLUserInfo     ftpuser userid passwd uid gid homedir shell
 
# Here we tell ProFTPd the names of the database columns in the "grouptable"
# we want it to interact with. Again the names match with those in the db
SQLGroupInfo    ftpgroup groupname gid members
 
# set min UID and GID - otherwise these are 999 each
SQLMinID        500
 
# create a user's home directory on demand if it doesn't exist
CreateHome on
 
# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser
 
# Update modified everytime user uploads or deletes a file
SQLLog  STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser
 
# User quotas
# ===========
QuotaEngine on
QuotaDirectoryTally on
QuotaDisplayUnits Mb
QuotaShowQuotas on
 
SQLNamedQuery get-quota-limit SELECT "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 FROM ftpquotalimits WHERE name = '%{0}' AND quota_type = '%{1}'"
 
SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"
 
SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" ftpquotatallies
 
SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies
 
QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
 
RootLogin off
RequireValidShell off
 
<IfModule mod_tls.c>
TLSEngine                  on
TLSLog                     /var/log/proftpd/tls.log
TLSProtocol                SSLv3 TLSv1
TLSOptions                 NoCertRequest
TLSRSACertificateFile      /etc/mysql/server-cert.pem
TLSRSACertificateKeyFile   /etc/mysql/server-key.pem
TLSCertificateChainFile    /etc/mysql/cacert.pem
TLSVerifyClient            off
TLSRequired                on
</IfModule>
 
User ftpuser
Group ftpgroup

Unter SQLConnectInfo muss <password> durch das Root-Passwort von MySQL ersetzt werden.

Wichtig: Sollte irgendwo anders die Zeile QuotaEngine off auftauchen, muss diese unbedingt auskommentiert werden.

Nun muss der FTP-Server noch neugestartet werden:

service proftpd restart

Zuletzt legen wir das Verzeichnis für die FTP-Dateien an:

mkdir -p /var/ftp
chown -R ftpuser:ftpgroup /var/ftp

Damit ist die Konfiguration abgeschlossen.

Hinzufügen

Beim Hinzufügen eines Produktes in sourceDESK muss der Hostname, das Root-Passwort für den MySQL-Server, das Root-Passwort des Servers und der SSH-Port angegeben werden. Natürlich muss auch eine Quota gesetzt werden.