Einen FTP-Server einrichten

Dann und wann braucht man doch immer mal wieder einen FTP-Server.
Und wie richtet man den schnell in Ubuntu ein?
Ganz einfach…

Erstmal ist die Frage: Verschlüsselt oder nicht?
Verschlüsselt kann natürlich mit manchen Programmen Probleme machen (ich glaube das normale DOS-ftp kommt damit nicht klar) aber selbstverständlich möchte man wichtige Passwörter (oder Daten) nicht unverschlüsselt über die Leitung blasen.
Auch wenn ein Man-in-the-Middle normalerweise eher unwahrscheinlich ist (sieht man von großen Firmen oder Geheimdiensten ab, die können natürlich mitlesen, das muss einem klar sein!)

Wir fangen jetzt erstmal unverschlüsselt an:

Wir nutzen das Programm vsftpd – denn das wird mit den Ubuntu LTS Quellen gefplegt, erhält also Langzeitsupport!
Normalerweise würde ich eigentlich „FTP“ über SSH vorziehen, aber es gibt ja genug Programme die nur FTP können.
Außerdem ist so eine SSH chroot-Umgebung nicht so einfach einzurichten, bei FTP geht das einfach!
Wir müssen nämlich verhindern dass er mit dem FTP-Programm aus dem Ordner ‚/var/www/html/mywebsite‘ raus kommt.
Und per SSH soll er sich natürlich nicht einloggen dürfen!

Nun gut, Installieren wir vsftp:

apt-get install vsftpd

Erstellen wir den User:

adduser mywebsite

Nun in die Datei ‚/etc/passwd‘ und die Zeile mit dem User ‚mywebsite‘ von so:

mywebsite:x:1001:1001:My Website,,,:/home/mywebsite:/bin/bash

auf so anpassen:

mywebsite:x:1001:1001:My Website,,,:/var/www/html/mywebsite:/bin/false

(Der neue Home-Ordner des Users ist damit ‚/var/www/html/mywebsite‘ die Shell ‚/bin/false‘ bedeutet dass er keine Shell bekommt wenn er sich über SSH anmeldet (also geht SSH nicht für den User!))

Und SSH-Server neu starten:

service sshd restart

Löschen wir den alten Home-Ordner und erstellen den neuen (der im html-Verzeichnis des Apachen liegt!)

rm -rf /home/mywebsite
mkdir /var/www/html/mywebsite
chown -R mywebsite:mywebsite /var/www/html/mywebsite

Nun noch die vsftp Einstellungen anpassen.
Datei ‚/etc/vsftpd.conf‘ ändern, bzw. auskommentieren:

write_enable=YES
chroot_local_user=YES
listen=YES
listen_ipv6=NO
local_umask=022

Und einfügen:

allow_writeable_chroot=YES

-> Achtung: Am Ende von „allow_writeable_chroot=YES“ darf kein leerzeichen stehen, sonst startet der vsftpd nicht!
–> Wenn man ihn manuell mit ‚/usr/sbin/vsftpd‘ starten will kommt die Meldung „500 OOPS: bad bool value in config file for: allow_writeable_chroot“
(Chroot bedeutet dass der User von seinem Home-Ordner nicht weiter nach oben gehen darf. Also genau das was wir aus Sicherheitsgründen wollen!
Man darf entweder auf ipv6 oder ipv4 listen, beides geht nicht.)

Diese Werte stehen so schon drin, die kann man überprüfen:

anonymous_enable=NO
local_enable=YES
ssl_enable=NO

Und in die Datei ‚/etc/pam.d/vsftpd‘ das folgende auskommentieren, also aus:

auth    required        pam_shells.so

mach so:

#auth   required        pam_shells.so

Damit prüft vsftpd nicht ob der User eine gültige Shell in der ‚/etc/passwd‘ hat. Denn ‚/bin/false‘ würde hier ungültig geben und vsftpd nimmt den User nicht an.

Und neu starten den FTP-Server:

service vsftpd restart

Jetzt sollte man sich per FTP verbinden können.
Detaileinstellung:
(FileZilla)

User: mywebsite
Pass: xxx
Port: 21
Type: Only use Plain FTP (insecure)

So, und jetzt die Erweiterung: Wir aktivieren TLS für vsftp!
-> Erstmal alles wie oben geschrieben durchführen.
Dann folgende Änderungen…

Erstmal ein Zertifikat erstellen:

openssl req -x509 -nodes -days 3650 -newkey rsa:1024  -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

(die eingegebenen Daten sind eigentlich egal, werden aber eventuell dem Anwender beim ersten FTP Login gezeigt!
-> Die Gültigkeit ist hier auf 3650 Tage eingestellt, die sollte man natürlich „sinnvoll“ wählen!)

Und dieses in der Datei ‚/etc/vsftpd.conf‘ eintragen, bzw. folgende Parameter anpassen:

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES

Nun noch den vsftpd neu starten:

service vsftpd restart

Jetzt sollte man sich per FTP (mit TLS) verbinden können.
Detaileinstellung:
(FileZilla)

User: mywebsite
Pass: xxx
Port: 21
Type: Require explicit FTP over TLS

(Plain FTP geht nun nicht mehr!)
Das der vsftp läuft sieht man mit ’netstat -atulpe‘ und zwar ist das dieser Eintrag:

tcp        0      0 *:ftp                   *:*                     LISTEN      root       67971       12141/vsftpd

Details um zu sehen welche Ports offen sind gibt es hier: https://www.thomaschristlieb.de/welche-ports-hat-mein-server-offen/

Und so wird man alles wieder los:

deluser mywebsite
rm -rf /var/www/html/mywebsite
apt-get purge vsftpd

Und wenn man TLS verwendet hat statt Plain FTP auch noch das Keyfile wegputzen:

rm /etc/ssl/private/vsftpd.pem

Auf Unbutusers gibts etwas Infos dazu:
https://wiki.ubuntuusers.de/vsftpd/


Beitrag veröffentlicht

in

, ,

von

Schlagwörter:

Kommentare

2 Antworten zu „Einen FTP-Server einrichten“

  1. einuser

    nice: bitte aktuell halten.

  2. Julian

    Vielen lieben Dank für diese wunderbaren Schriften!
    Kein so ausführliches Tutorial hat mir je so geholfen…
    Eventuell noch den Schritt: Firewall einfügen.

    Mit unglaublichen Grüßen
    Julian

Schreibe einen Kommentar zu einuser Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert