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/
Schreibe einen Kommentar