VSFTP Erweiterung: ftps (ftp mit SSL)

matze1985

Aktives Mitglied
Mitglied seit
17 Feb 2007
Beiträge
1,537
Punkte für Reaktionen
0
Punkte
0
Hey Leute,

ich habe mich mal etwas mit dem Vsftpd-Server beschäftigt und bin dabei auch mal die Konfigseite durchgegangen. Dabei ist mir aufgefallen, dass der Vsftpd auch ftps (ftp mit SSL) unterstützt, wonach ich eigentlich schon immer mal die Augen offen gehalten hatte für meine Box.

Also habe ich mich mal dran gemacht und den Vsftp mit SSL-Support gebaut.

Dies habe ich auch geschaft :)

Anbei findet ihr den Patch, der auf den aktuellen trunk angewendet werden kann.
Code:
patch -p0 < vsftpd.patch

Er beinhaltet die notwendigen Patches für den Vsftpd um ihn mit ssl-support zu kompilieren und ein paar Erweiterungen der GUI.
Das Zertifikat für den Server ist auch per WebGui hochladbar.
(siehe Screenshots)

Würde mich freuen, wenn es mal ein paar ausprobieren. (Klar ist natürlich, dass ihr auch nen FTP-Cleint bracht, der ftps unterstützt ;) )

###########################
@An die Leute, die sich mit Freetz auskennen:
Ich konnte das ganze leider nicht optional über das menuconfig machen, da der SSL-Support nicht per make-parameter einstellbar war, sondern ich in der builddefs.c eine Zeile Code ändern musste, dies lasse ich jetzt über einen Patch machen. Gibt es eine Möglichkeit, dass man sh-scripte, ähnlich derer unter freetz\patches, auch für pakete nutzt um solche patches wählbar zu machen?
###########################


Viel Spaß.

update1: Hinweiß von cuma zum & in HTML befolgt :)
update2: SSL-Support jetzt wahlweise per menuconfig (Danke an MaxMuster für die Idee)
update3: Verstecke SSL-Optionen im WebIf, wenn ssl nicht gewählt.
update4: Option zum statischen kompilieren hinzugefügt. (+ein paar Verbesserungen)
update5: Versionbump 2.0.6 -> 2.0.7
 

Anhänge

  • vsftpd_1.jpg
    vsftpd_1.jpg
    133.4 KB · Aufrufe: 295
  • vsftpd_2.jpg
    vsftpd_2.jpg
    75.8 KB · Aufrufe: 240
  • vsftpd.patch.txt
    11.4 KB · Aufrufe: 85
Zuletzt bearbeitet:
Wow, tolle Arbeit. Bei Gelegenheit muss ich das mal mitbauen. Mir ist noch aufgefallen, dass das "Zertifikat&Key" nicht übersetzt wird. Dies könnte an dem "&" liegen das in html "&amp;" geschrieben wird
 
Schick!
Wie ist denn die Größe im Vergleich zu der Lösung von sftp mit dropbear?

Danke!

Jörg

EDIT Zu deine Frage:
Wenn ich das richtig gelesen habe, wird nur eine Variable VSF_BUILD_SSL "fest gesetzt". Würde es nicht ausreichen, die entsprechende "UNDEFINE" Zeile komplett zu löschen (dann wäre es ja nicht gesetzt, oser?) und das Define über das configure oder make zu machen mit einem -DVSF_BUILD_SSL im Aufruf?
 
Zuletzt bearbeitet:
Hallo,

super Arbeit. Werde ich ausprobieren.
Was hältst du davon den SSL-Zertifikatsteil zu verallgemeinern. Denn auch für WebDav werden Zertifikate benötigt.
Ich würde deine Zertifikatsseite einfach allgemein halten (und nicht 'VSFTP...' nennen) und die Datei statt nach /mod/etc/vsftp (o.ä.) nach /mod/etc/cert/ (o.ä.) packen.

Dann könnten WebDav und VSFTP die gleichen Zertifikate von zentraler Stelle nutzen.

Siehe auch http://www.freetz.org/ticket/268

Viele Grüße und Danke für die tolle Arbeit,
Hendrik
 
@henfri:
ob man alle Zerfifikate an einer Stelle sammeln sollte weiß ich nicht, denn wenn man das macht, sollte man es auch komplett tun, z.B. auch bei stunnel.
Dort verwendet ich z.B. auch das Zertifikat, weil es schon auf die Domain unterschrieben ist, aber es wird dort in 2 Datein gespeichert (Key+Crt in unterschiedlichen Datein).
Außerdem gibt es aber die Möglichkeit, dass man die Zertifikate für unterschiedliche Server auch unterschiedlich ausstellen will.

Ist das Webdav-Zertifikat denn ein Server-Zertifikat mit Key? Es das nicht ne Clientanwendung?

@MaxMuster:
Danke für den Hinweis, werde ich mir anschauen.
Code:
ls -lah `which vsftpd`
-rwxr-xr-x    1 root     root       145.0k Nov 18 23:46 /usr/sbin/vsftpd

@cuma:Auch dir Danke für den Hinweiß, werde es ausbessern :)
 
bor ihr seit ja helden...
kann der dann ssl und auch ohne ssl?
je nach haken?
wie geil...
das MUSS ich haben...werde das gleich heute bauen und berichten...vsftpd wird ja zum super ftp server...da iss ja der bftpd nen shit gegen...

ne zentrale certifcate stelle wäre schon geil...vor allem würde das echt einges vereinfachen...denn ich brauche wirklich nicht 5 certifikate für 1 box...
bzw man könnte ja auch das ssl certifcate der box gleich kidnappen...die bringt ja schon eins mit...und sicherer aus plain text iss das ALLE male auch wen ab und an jemand weint es hätte den avm bug und wäre nicht 2048 bitig ;-)
die grösse zum dropbear sftpd iss nicht tragisch da den ohne webinterface eh keiner nimmt und man da auch nicht wieß ob er generell so verlässlig iss wie der erprobte vsftpd
und mal ehrlich...die 16 mb keirgt ihr doch eh nicht voll die die box hat...ich komme ja schon mit meinem mist kaum auf 10 mb ;-9
 
du kannst ihn ohne probleme so einstellen, dass du dich ssl und ohne ssl verbinden kannst. :) (halt keine hacken bei force machen :) )

@cuma: habe dienen Tipp befolgt, hat er aber leider noch nicht übersetzt, noch ne Idee?
 
Kann man das eigentlich auch direkt in Freetz als Option für den vsftp mit einbauen?
 
@holybabel
das wäre der nächste schritt, wenn diese ssl ding dann fertig gebastelt ud gestestet iss...
im mom iss es testing only mit handarbeit...
 
@McNetic: Danke für das Ticket, der Weg den MaxMuster aufgeziegt hatte müsste gehen, weiß aber nicht, wann ich das schaffe, wahrscheinlich Fr oder Sa.

@henfri: Das Vorhin sollte keine Ansage sein, habe mich nur etwas gewundert, da WebDav doch ein Client ist und das file ein Kette von vertrauten Zertifikaten ist, beim Vsftpd ist es das Server-Zertifikat, was ein großer Unterschied ist.
Man könnte dennnoch bei jeweils in einer Datei machen (also Server_Datei und eine vertraute-Datei), beim vsftpd, kann man auch ohne Porbleme, dann die Option rsa_cert_file=/path/to/file in den eigenen Einstellungen hinzufügen, wenn man ein seperates Crt braucht.

@holybabel: das ist geplannt und wird mit dem Ticket auch realisiert. :)
 
Ja, so ähnlich wird es wohl funktionieren. Das Makefile muss aber auch entsprechend angepasst werden, und ich überlege im Moment noch, wie man die entsprechenden Teile im WebIF ausblenden kann, wenn kein SSL-Support vorhanden ist.
 
das mit dem Makefile ist klar, damit die richtigen Libs geladen werden.

Das man den SSL-Teil im Webif ausblenden sollte hatte ich mir auch schon überlegt, aber wie muss ich sagen weiß ich nicht. :)
 
so hab oben mal nen update gemacht, der SSL-Support ist jetzt wahlweise per Menuconfig auswählbar, bitte mal testen.

Bleibt die Frage, wir man die Teile des WebIF ausblenden kann?
Gibt es (ähnlich der lang-Funktionalität) metabefehle für make, um bei gesetzten SSL Teile des Webif zu aktivieren, ins Image zu schreiben, und teile nicht?
 
Man könnte vorerst in der cgi die Größe der vsftpd Binary überprüfen und daran erkennen ob SSL aktivert ist bis was besseres gefunden ist. Leider gibt vsftpd keine Hilfe beim Aufruf aus. Wie ist denn die Ausgabe hiervon:
Code:
$ strings /usr/sbin/vsftpd|grep "SSL support"
SSL: ssl_enable is set but SSL support not compiled in
 
meinst du jetzt in menuconfig oder im webif später?
im webif könnte man das doch wie bei der firewall und er debug outputs der regeln lösen...oder nicht?
 
Zuletzt bearbeitet:
Ich schlage mal vor, erstmal (wäre auch mein Vorschlag: mit strings) prüfen, ob "mit sftp", dann wenn ohne einfach den entsprechenden Bereich "ausblenden", wenn du ganz am Ende zwischen "EOF" und das "sec_end" sowas in der Art wie

Code:
echo 	"<script>"
`! strings /usr/sbin/vsftpd|grep -q "SSL support"` &&  echo 'document.getElementsByTagName("fieldset")[<hier eintragen, die wievielte "section" das ist>].style.display = "none";' 
echo 	"</script>"
Nicht getestet, nur so aus dem Kopf, aber ich denke die Richtung wird klar ;-))


Jörg
 
aber jetzt lässt du das ganze doch ausblenden, wenn es mit SSL-Support gebaut wurde.
Code:
# strings /usr/sbin/vsftpd|grep "SSL support"
/var/mod/root #
Bei mir mit SSL-Support.
Nach dem was bei cuma steht müsste es also heißen:
Code:
echo 	"<script>"
`strings /usr/sbin/vsftpd|grep -q "SSL support"` &&  echo 'document.getElementsByTagName("fieldset")[<hier eintragen, die wievielte "section" das ist>].style.display = "none";' 
echo 	"</script>"

oder?
 
Es ist sowieso schöner, wenn das direkt serverseitig ausgeblendet wird. Das habe ich auch schon so weit fertig, muss nur noch eben testen...
 
@McNetic: Serverseitig Ausblenden ist natürlich noch besser...

@matze1985:
Ich habs ja nicht getestet, aber auf die Schnelle falschrum verstanden ;-)
Da das grep mit SSL ja leer ist muss natürlich die Negation weg, vollkommen richtig!


Jörg
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.