Mordor
Registered User
Nachdem ich mit meiner Problembehebung eh schon fast ein Howto zum Thema hier im Forum hinterlassen habe, hab ich mir Gedacht, dass man doch ein vernünftiges schreiben könnte.
0. Vorweg
Ich übernehme keine Verantwortung bei der Installation. Das Howto ist einzig und allein aus meinen Erfahrungen entsanden.
Das Howto beschreib die Installation von Pure-FTPD, so dass alle User in einer Mysql-Datenbank abgelegt werden, sich Userordner automatisch erstellen. Ausserdem kann man über den Pure-FTPD die Up- und Downloadrate festlegen, so wie den Verzeichnisplatz und die Anzahl der Files im Ordner über Quotas limitieren.
1. Vorraussetzung
Ich gehe von einem fertig installierten Debian Etch System mit Internetanbindung aus. Ausserdem werde ich die Installation von Mysql nicht weiter erklären. Ein lauffähiger Mysql-Server sollte also vorhanden. sein. Ansonsten benötigt man eigentlich nichts dazu.
2. Installation der benötigten Pakete
Zuerst führt man wie gewohnt
aus, dem man noch ein
folgen lassen sollte.
Dann kommen wir zur Installation des Pure-FTPD mit
Alle Abhängigkeiten sollten hier, wie bei Debian üblich, automatisch aufgelöst werden. Nach kurzen ist der Pure-FTPD also auf dem Server.
3. Anlegen der Mysql-Datenbank
Als nächstes verbinden wir uns mit dem Mysql-Server mit
Jetzt sehen wir die Passworteingabe, und nach der Eingabe des Passwortes, sollten wir uns eigentlich in der Mysql-Shell wieder finden.
Jetzt erstellen wir mit
die Datenbank und mit
den User für den FTP-Server.
Der neue User ist ziemlich unpreviligiert. Zum einen werden Verbindungen nur von lokalhost zugelassen, zum anderen darf er nur begrenzt SQL-Befehle ausführen.
Mit dem Befehl
wechseln wir in unsere neu angelegte Datenbank, und erstellen daraufhin die erste und einzige Tabele mit dem Befehl:
Das wars eigentlich auch schon mit der Konfiguration des Mysql_Servers.
Jetzt beenden wir die Mysql-Shell mit
und testen den neuen User. Dazu verbinden wir uns mit dem neuen User mit dem Mysql-Server über
geben das Passwort ein, und müssen wieder die Mysql-Shell sehen. Als weiteren Test kann man jetzt noch
eingeben, und sollte dann auch nur zwei Datenbanken sehen. Eine davon ist die pureftpd-Datenbank. Sollte das alles erfolgreich gewesen sein, schliessen wir die Shell wieder mit
4. Konfiguration des Pure-FTPD
Jetzt gehts mit der Konfiguration des Pure-FTPD weiter. Zuerst muss ein neues Benutzer und eine Neue Gruppe angelegt werden, unter der die Virtuellen Benutzer arbeiten. Das passiert mit
, womit eine neue Gruppe mit dem Namen ftpgroup angelegt wird, und
womit wir den User ftpuser anlegen, mit dem Homeverzeichnis /home/ftp.
Als nächste kümmern wir uns um die Konfiguration für die Mysql-Zugangskontrolle. Dazu kopieren wir die orginale mysql.conf mit folgendem Befehl, um sie zu sichern:
Danach schicken wir mit
die alte mysql.conf ins Nirvana, und erstellen mit pico /etc/pure-ftpd/db/mysql.conf eine neue. Diese wird dann mit folgenden Angaben gefüllt:
Diese Datei speichern wir nachdem wir sie erstellt und editiert haben.
Bei der Debian Standardinstallation startet Pure-FTP unter inetd. Ich für meinen Teil wollte das aber nicht haben. Deshalb wird jetzt die Datei
Editirt. Hier muss nur die Direktive
auf standalone gestellt werden. Danach wird die Datei gespeichert und der Texteditor wieder beendet.
Aus Gründen der Sicherheit sollten wir jetzt die einzelnen User noch CHRooten. Dies geschieht über die Erstellung einer bestimmten Datei, mit dem folgenden Befehl:
Ausserdem erstellen wir noch eine zweite Datei, mit folgendem Befehl:
Diese Option ist dafür verantwortlich, dass für einen neuen User automatisch ein neues Verzeichnis erstellt wird, wenn er sich zum ersten mal einloggt.
Und zu guter letzt, verbieten wir noch das anonyme Anmelden am FTP-Server mit
5. Nuestart
Nachdem wir jetzt mit der Konfiguration fertig sind, können wir den Pure-FTP neu starten
Wenn alles glatt läuft, sollte das mit einer Meldung in folgender Art belohnt werden:
So, alles geschaft. Jetzt können wir zum Testen einen neuen User erstellen
6. Testen der Umgebung
Als erste gehen wir wieder in die Mysql-Shell mit
und wechseln nach erfolgtem Login mit
in die FTP-Datenbank. Jetzt erstellen wir unseren ersten User mit
Danach beenden wir wieder die Shell mit
Zur Erklärung:
Wir haben jetzt den User "testuser" erstellt. Die 1 bedeutet, dass der Zugasng aktiv ist. Eine 0 würde bedeuten, dass der Zugsang gesperrt ist. Das Passwort muss in Mysql mit einem md5-Hush gespeichert werden. Ausserdem geben wir danach die UID und GID 2001 an, die auf diei Gruppe ftpgroup und den User ftpuser verweisen. Das wird gefolgt vom Homedir des Users. Diesem User geben wir ein Up- und eine Downloadrate von 100KB/sec. Als Komentar haben wir Testuser eingetragen. Dieses Feld kann auch leer sein. Des weiteren hat der User 50MB zur Verfügung und kann soviele Files hochladen wie er möchte, solange er nicht über die Quotasize hinausgeht. Würde man für die beiden Quote-Optionen jeweils eine 0 eintragen, wäre sowohl Speicherplatz als auch Fileupload unbegrenzt.
Jetzt können wir einen FTP-Client öffnen und uns zum ersten mal mit dem Server verbinden. Hat das funktioniert, sollte alles laufen.
Als weiteren Test, kann man jetzt ein kleines file auf den Server übertragen und wieder herunter laden. In der Logdatei /var/log/pure-ftpd/tranfer.log sollten wir den Up- und Download nachvollziehen können.
Zum schluss gehen wir auf dem Server noch ins FTP-Verzeichnis
und lassen uns diese anzeigen. Hier sollte jetzt ein neuer Ordner vorhanden sein. Dieser sollte genau so heissen, wie der Ordner, den wir in der Datenbank hinterlegt haben.
7. Fehlerquellen
Eine wichtige Fehlerquelle gibt es noch:
Sollte ein IpTables-Skript laufen, muss man noch ein Kernelmodul einbinden. Sonst funktionieren die FTP-Verbindungen nicht. dazu gibt man in der Shell einfach
ein. Damit wird das benötigte Modul für IpTables geladen. Ausserdem Editiren wir noch die Datei
und tragen dort auch das oben beschrieben Modul ein, dass es auch beim nächsten Systemstart automatisch mitgeladen wird.
So, das wars auch schon. Viel Spaß
EDIT: Schreibfehler ausgebessert und Anonymous Account hinzugefügt. 03.01.2009 danke an H3llGhost
0. Vorweg
Ich übernehme keine Verantwortung bei der Installation. Das Howto ist einzig und allein aus meinen Erfahrungen entsanden.
Das Howto beschreib die Installation von Pure-FTPD, so dass alle User in einer Mysql-Datenbank abgelegt werden, sich Userordner automatisch erstellen. Ausserdem kann man über den Pure-FTPD die Up- und Downloadrate festlegen, so wie den Verzeichnisplatz und die Anzahl der Files im Ordner über Quotas limitieren.
1. Vorraussetzung
Ich gehe von einem fertig installierten Debian Etch System mit Internetanbindung aus. Ausserdem werde ich die Installation von Mysql nicht weiter erklären. Ein lauffähiger Mysql-Server sollte also vorhanden. sein. Ansonsten benötigt man eigentlich nichts dazu.
2. Installation der benötigten Pakete
Zuerst führt man wie gewohnt
Code:
apt-get update
Code:
apt-get upgrade
Dann kommen wir zur Installation des Pure-FTPD mit
Code:
apt-get install pure-ftpd-mysql
3. Anlegen der Mysql-Datenbank
Als nächstes verbinden wir uns mit dem Mysql-Server mit
Code:
mysql -u root -p
Jetzt erstellen wir mit
Code:
CREATE DATABASE pureftpd;
Code:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'deingeheimsepasswort';
Der neue User ist ziemlich unpreviligiert. Zum einen werden Verbindungen nur von lokalhost zugelassen, zum anderen darf er nur begrenzt SQL-Befehle ausführen.
Mit dem Befehl
Code:
USE pureftpd;
Code:
CREATE TABLE ftpd (
user varchar(16) NOT NULL default'',
status enum('0','1') NOT NULL default '0',
password varchar(64) NOT NULL default '',
uid varchar(11) NOT NULL default '-1',
gid varchar(11) NOT NULL default '-1',
dir varchar(128) NOT NULL default '',
ulbandwidth smallint(5) NOT NULL default '0',
dlbandwidth smallint(5) NOT NULL default '0',
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default '*',
quotasize smallint(5) NOT NULL default '0',
quotafiles int(11) NOT NULL default '0',
PRIMARY KEY (user),
UNIQUE KEY user (user)
) TYPE=MyISAM;
Jetzt beenden wir die Mysql-Shell mit
Code:
quit;
Code:
mysql -u pureftpd -p
Code:
show databases;
Code:
quit;
4. Konfiguration des Pure-FTPD
Jetzt gehts mit der Konfiguration des Pure-FTPD weiter. Zuerst muss ein neues Benutzer und eine Neue Gruppe angelegt werden, unter der die Virtuellen Benutzer arbeiten. Das passiert mit
Code:
groupadd -g 2001 ftpgroup
Code:
useradd -u 2001 -s /bin/false -d /home/ftp -c “pureftpd user” -g ftpgroup ftpuser
Als nächste kümmern wir uns um die Konfiguration für die Mysql-Zugangskontrolle. Dazu kopieren wir die orginale mysql.conf mit folgendem Befehl, um sie zu sichern:
Code:
cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf.old
Code:
cat /dev/null > /etc/pure-ftpd/db/mysql.conf
Code:
MYSQLSocket /var/run/mysqld/mysqld.sock
#MYSQLServer localhost
#MYSQLPort 3306
MYSQLUser pureftpd
MYSQLPassword geheimespasswort
MYSQLDatabase pureftpd
#MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext
MYSQLCrypt md5
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")
Bei der Debian Standardinstallation startet Pure-FTP unter inetd. Ich für meinen Teil wollte das aber nicht haben. Deshalb wird jetzt die Datei
Code:
/etc/default/pure-ftpd-common
Code:
STANDALONE_OR_INETD
Aus Gründen der Sicherheit sollten wir jetzt die einzelnen User noch CHRooten. Dies geschieht über die Erstellung einer bestimmten Datei, mit dem folgenden Befehl:
Code:
echo “yes” > /etc/pure-ftpd/conf/ChrootEveryone
Ausserdem erstellen wir noch eine zweite Datei, mit folgendem Befehl:
Code:
echo “yes” > /etc/pure-ftpd/conf/CreateHomeDir
Und zu guter letzt, verbieten wir noch das anonyme Anmelden am FTP-Server mit
Code:
echo "yes" > /etc/pure-ftpd/conf/NoAnonymous
5. Nuestart
Nachdem wir jetzt mit der Konfiguration fertig sind, können wir den Pure-FTP neu starten
Code:
/etc/init.d/pure-ftpd-mysql start
Code:
starting ftp server: Running: /usr/sbin/pure-ftpd-mysql -l mysql:/etc/pure-ftpd/db/mysql.conf -l pam -O stats:/var/log/pure-ftpd/transfer.log -u 1000 -j -A -E -B
6. Testen der Umgebung
Als erste gehen wir wieder in die Mysql-Shell mit
Code:
mysql -u -root -p
Code:
use pureftpd;
Code:
INSERT INTO 'ftpd' ('user', 'status', 'password', 'uid', 'gid', 'dir', 'ulbandwidth', 'dlbandwidth', 'comment', 'ipaccess', 'quotasize', 'quotafiles') VALUES ('testuser', '1', MD5('geheimespasswort'), '2001', '2001', '/home/ftp/testdir', '100', '100', 'Testuser', '*', '50', '0');
Code:
quit;
Zur Erklärung:
Wir haben jetzt den User "testuser" erstellt. Die 1 bedeutet, dass der Zugasng aktiv ist. Eine 0 würde bedeuten, dass der Zugsang gesperrt ist. Das Passwort muss in Mysql mit einem md5-Hush gespeichert werden. Ausserdem geben wir danach die UID und GID 2001 an, die auf diei Gruppe ftpgroup und den User ftpuser verweisen. Das wird gefolgt vom Homedir des Users. Diesem User geben wir ein Up- und eine Downloadrate von 100KB/sec. Als Komentar haben wir Testuser eingetragen. Dieses Feld kann auch leer sein. Des weiteren hat der User 50MB zur Verfügung und kann soviele Files hochladen wie er möchte, solange er nicht über die Quotasize hinausgeht. Würde man für die beiden Quote-Optionen jeweils eine 0 eintragen, wäre sowohl Speicherplatz als auch Fileupload unbegrenzt.
Jetzt können wir einen FTP-Client öffnen und uns zum ersten mal mit dem Server verbinden. Hat das funktioniert, sollte alles laufen.
Als weiteren Test, kann man jetzt ein kleines file auf den Server übertragen und wieder herunter laden. In der Logdatei /var/log/pure-ftpd/tranfer.log sollten wir den Up- und Download nachvollziehen können.
Zum schluss gehen wir auf dem Server noch ins FTP-Verzeichnis
Code:
cd /home/ftp
7. Fehlerquellen
Eine wichtige Fehlerquelle gibt es noch:
Sollte ein IpTables-Skript laufen, muss man noch ein Kernelmodul einbinden. Sonst funktionieren die FTP-Verbindungen nicht. dazu gibt man in der Shell einfach
Code:
modprobe ip_connect_ftp
Code:
/etc/modules
So, das wars auch schon. Viel Spaß
EDIT: Schreibfehler ausgebessert und Anonymous Account hinzugefügt. 03.01.2009 danke an H3llGhost
Last edited by a moderator: