NetVision-Technik

Zur?ck   NetVision-Technik > Forum > Server > Webserver > Security

Security Hier kommen alle Fragen und Lösungen zur Sicherheit und zu Fixes am Serversystem rein

Antwort
 
Themen-Optionen Ansicht
Alt 28.10.2009, 22:01   #1
Pureftpd mit mysql und TLS Unterstützng
schienbein schienbein ist offline 28.10.2009, 22:01

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

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

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
__________________
Wo soll das hinführen, wie weit mit uns gehen
Selbst ein Baum ohne Wurzeln kann nicht bestehen
Wann hört ihr auf, eure Heimat zu hassen
Wenn ihr euch ihrer schämt, dann könnt ihr sie doch verlassen
Du kannst dich nicht drücken, auf dein Land zu schauen
Denn deine Kinder werden später darauf bauen
Sprache, Brauchtum, und Glaube sind Werte der Heimat
Ohne sie gehen wir unter, stirbt unser kleines Volk

 
Benutzerbild von schienbein
schienbein
Benutzer
Punkte: 8.089, Level: 60 Punkte: 8.089, Level: 60 Punkte: 8.089, Level: 60
Levelaufstieg: 70% Levelaufstieg: 70% Levelaufstieg: 70%
Aktivität: 0% Aktivität: 0% Aktivität: 0%
Letzte Erfolge
Registriert seit: 24.03.2008
Beitr?ge: 46
Abgegebene Danke: 3
Erhielt 43 Danke für 8 Beiträge
Downloads: 55
Uploads: 1
Nachrichten: 19
Hits: 11457
Mit Zitat antworten
Folgende 5 Benutzer sagen Danke zu schienbein für den nützlichen Beitrag:
$iMpLy (29.10.2009), Cerberus (31.10.2009), gotthummer (28.10.2009), metathron (28.10.2009), rodi (28.10.2009)
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, G?ste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beitr?ge zu antworten.
Es ist Ihnen nicht erlaubt, Anh?nge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beitr?ge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


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


Powered by vBulletin® Version 3.8.9 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Template-Modifikationen durch TMS