PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Pureftpd mit mysql und TLS Unterstützng


schienbein
28.10.2009, 21:01
Nach der kleinen diskusion mit gotthummer (http://www.netvision-technik.de/forum/member.php?u=20) habe ich mich mal dran gemacht und mir einen Pureftpd mit mysql und TLS Unterstützng also FTPS eingerichtet.vieleicht kanns ja jemand gebrauchen.



Installation

Wir installieren das pure-ftpd-mysql paket. Die Konfiguration erfolgt über einzelne Dateien die in /etc/pure-ftpd/conf liegen, jede Datei ist benannt nach dem Parameter den sie repräsentiert und hat als Inhalt die nötigen Werte.


apt-get install pure-ftpd-mysql
Wir legen im /etc/pure-ftpd/conf folgende Dateien an, nach dem

cd /etc/pure-ftpd/conf
echo yes > ChrootEveryone
echo yes > CreateHomeDir
echo 50 > MaxClientsNumber
echo 5 > MaxClientsPerIP
echo 95 > MaxDiskUsage
echo 1 > TLS
echo 117 007 > Umask
echo no > UnixAuthentication
echo no > PAMAuthentication
defaults bei Debain (braucht man nicht ändern):

echo clf:/var/log/pure-ftpd/transfer.log > AltLog
echo 1000 > MinUID
echo /etc/pure-ftpd/db/mysql.conf > MySQLConfigFile
echo yes > NoAnonymous
echo /etc/pure-ftpd/pureftpd.pdb > PureDB
Damit erzeugen wir homedirs, die nicht exitieren, beschränken jeden User auf sein Verzeichnis, erlauben 50 parallel Connections aber nicht mehr als 5 pro IP Adresse, die Minimun GID ist 1000 (zumindest bei nem suExec Apache/fcgi ansonsten sollte man MinUID auf 33 setzen (Standard www-data Account bei Debian). Anonymen Login verbieten wir ebenso wie Unix Authentifizierung (nur User aus der DB. Der MaxDiskUsage Paramter verhindert das der FTP mehr als 95% der Disk befüllen kann.

pureftpd-mysql


In der Datein /etc/pure-ftpd/db/mysql.conf editieren wir die Daten für unsere DB.

vi /etc/pure-ftpd/db/mysql.conf
#MYSQLServer localhost
#MYSQLPort 3306
MYSQLSocket /var/run/mysqld/mysqld.sock
MYSQLUser pureftpd-user
MYSQLPassword DasistunserPW!
MYSQLDatabase pureftpd
MYSQLCrypt crypt
MYSQLGetPW SELECT Password FROM users WHERE User="\L"
MYSQLGetUID SELECT Uid FROM users WHERE User="\L"
MYSQLGetGID SELECT Gid FROM users WHERE User="\L"
MYSQLGetDir SELECT Dir FROM users WHERE User="\L"
MySQLGetQTAFS SELECT QuotaFiles FROM users WHERE User="\L"
MySQLGetQTASZ SELECT QuotaSize FROM users WHERE User="\L"
MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="\L"
MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="\L"
Mysqluser und Tabellenstruktur


Wir legen uns im mysql Server einen User und eine Datenbank an:

Kann übersprungenwerden sollten die meisten hier schon haben:p

Mysqluser anlegen

mysql -u root -p
weiter gehts

CREATE DATABASE pureftpd;
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON pureftpd.* TO 'pureftpd-user'@'localhost'
IDENTIFIED BY 'DasistunserPW!';
FLUSH PRIVILEGES;
quit;

Tabellenstruktur


USE pureftpd;
CREATE TABLE users (
User varchar(16) NOT NULL default ,
Password varchar(64) NOT NULL default ,
Uid int(11) NOT NULL default '-1',
Gid int(11) NOT NULL default '-1',
Dir varchar(128) NOT NULL default ,
QuotaFiles int(11) NOT NULL default '10000',
QuotaSize int(11) NOT NULL default '1000',
ULBandwidth int(11) NOT NULL default '500',
DLBandwidth int(11) NOT NULL default '500',
PRIMARY KEY (User)
)
FLUSH PRIVILEGES;
quit; Test

Kurz testen ob sich der User einloggen kann:


mysql -u pureftpd-user -p pureftpd
DasistunserPW!
select * from users;

absichern

Danach sicherstellen das die Datein nur für root lesbar ist, da dort ja Datenbank Passwörter stehen.




chmod 600 /etc/pure-ftpd/db/mysql.conf
chown root:root /etc/pure-ftpd/db/mysql.conf
SSL Zertifikat für TLS erstellen


Das SSL Zertifikat wird unter /etc/ssl/private/pure-ftpd.pem erwartet, wer schon eins für den Apache hat kann es einfach kopieren und auch dafür nutzen, wer sich selber eins machen will:

mkdir -p /etc/ssl/private/
openssl req -x509 -nodes -newkey rsa:1024 -keyout \
/etc/ssl/private/pure-ftpd.pem \
-out /etc/ssl/private/pure-ftpd.pem
chmod 600 /etc/ssl/private/*.pem
User hinzufügen

Einträge macht man per phpmyadmin oder einem selbstgeschriebenen Script ..
PhpMyAdmin einloggen als pureftpd-user neue Zeile in der Tabelle Users machen:


Username
Password('DasPasswordDesUsers') ("Encrypt" im Dropdown wählen)
UID/GID vom Account, bei "einfachen" Setups 33 (www-data), bei fastcgi/suexec oder suPHP der User der Domain
dir im Normalfall /var/www/domain)
Quotafiles max Anzahl der Dateien
Quotasize max Größe aller Files in MB
Bandwidth UPload/DownLoad Begrenzung in kb/s
Über mysql auf der Kommandozeile:

mysql -u pureftpd-user -p
use pureftpd;
insert into users (User, Password, UID, GID, dir, Quotafiles, Quotasize) \
Values ('TestUsername', ENCRYPT('TestseinPW'), 33,33,'/var/www/testdomain.de',1000,1000);
Die Passwortabfrage kann man mittels entsprechender my.cf erledigen und die Datenbank kann man angeben. So lassen sich Sachen auch per Script direkt in mysql blasen.

Bedenke root geht nicht!






Client konfigurieren

Tja jetzt braucht man noch einen TLS kompatiblen Client (z.B. SmartFTP) und schon kann es losgehen.
Wie man seinen FTP Client einstellt und welcher TLS unterstützt liest man am besten nach oder probiert es aus.

FTP Clienten die TLS unterstüen

FlashFXP (Windows)
SSL/TLS works. In the "Quick connect" dialog box, pick the "SSL"
tab and :
- enable Auth TLS
- disable Secure File Listing
- disable Secure File Transfers

FileZilla (Windows, OSX, Linux)
SSL/TLS works. In the "Site details" dialog box, pick "FTP over TLS
(explicit encryption)" as the "Servertype".
Reported by Philip Hallstrom.


Tips :D

Wählt man MD5 oder mysql Password als Passwortverschlüsselung ist das
selbstverständlich anzupassen (im /etc/pure-ftpd-mysql/db/mysql.conf
und in den angelegten Usern

Bei mir wollte der Weg über inetd nicht funktionieren(er versucht dann
/usr/sbin/pure-ftpd zu starten nicht pure-ftpd-mysql) ich habe also ftp
aus /etc/inetd.conf auskommentiert und in /etc/default/pure-ftpd-common
STANDALONE_OR_INETD=standalone gesetzt und den Daemon gestartet.

Virtuelle User

Es wird niemand gezwungen unterschiedliche UIDs für die User zu nehmen. Für ein virtuelles Setup geht man (vermutlich -selbst nicht getestet) so vor:
adduser ftpuser
mkdir /var/ftp
chown ftpuser:ftpuser /var/ftp
Man liest die UID/GID aus /etc/passwd bzw. /etc/group und legt neue User mit dieser UID/GID an und setzt ihr homedir auf /var/ftp/user1 oder /var/www/user2
Beim ersten einloggen werden die Userverzeichnisse erstellt und die User dort hinein chrootet. (Ungetestet mit bitte um Feedback)
ggf muß man in /etc/default/pure-ftpd-common noch virtualchroot auf yes setzen.




viel spass beim einrichten

mfg schienbein