NetVision-Technik

NetVision-Technik (http://www.netvision-technik.de/forum/index.php)
-   Security (http://www.netvision-technik.de/forum/forumdisplay.php?f=32)
-   -   Pureftpd mit mysql und TLS Unterstützng (http://www.netvision-technik.de/forum/showthread.php?t=4265)

schienbein 28.10.2009 21:01

Pureftpd mit mysql und TLS Unterstützng
 
Nach der kleinen diskusion mit gotthummer 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.


Code:

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

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):
Code:

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.

Code:

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

Code:

mysql -u root -p
weiter gehts
Code:

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

Tabellenstruktur

Code:

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:

Code:

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.



Code:

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:

Code:

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:

Code:

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:

Code:

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:
Code:

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:38 Uhr.

Powered by vBulletin® Version 3.8.9 (Deutsch)
Copyright ©2000 - 2025, vBulletin Solutions, Inc.