Ein kleiner [[ftp|FTP]] Server für [[linux|Linux]].
=====Installation=====
sudo apt install vsftpd
Hauptkonfiguration unter
/etc/vsftpd.conf
local_enable=YES # Nutze lokale User
write_enable=YES # Globales Schreiben erlauben, granularere Rechte via file system
chroot_local_user=YES # Benutzer auf Homeverzeichnis beschränken
local_umask=022 # uploaded files readable via http
=====Benutzer=====
====Whitelist====
Um nur bestimmten Benutzern den Login via FTP zu erlauben, müssen folgende Optionen gesetzt werden:
userlist_deny=NO
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
vsftpd.user_list dient nur dazu, die Liste der lokalen User einzuschränken, zusätzliche Benutzer kann man damit nicht generieren.
====Blacklist====
Um bestimmten Benutzern den Login via FTP zu verbieten, müssen folgende Optionen gesetzt werden (In diesem Fall wird den restlichen Benutzern der Login gewährt):
userlist_deny=YES
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
Die Nutzer werden in beiden Fällen folgendermaßen in die Datei /etc/vsftpd.user_list eingetragen:
nutzer1
nutzer2
nutzer3
====No Shell Access====
Möchte man nicht, dass die Benutzer auch via SSH auf den Rechner zugreifen können, so muss die Shell des Benutzers in der /etc/passwd auf /bin/false gesetzt werden. Zum Beispiel:
user:x:1000:1000::/home/user:/bin/false
Wenn es danach Probleme beim FTP-Login geben sollte (530 Login incorrect), liegt das daran, dass /bin/false nicht als Shell im System hinterlegt ist. Dann muss die Shell noch in die Datei /etc/shells eingetragen werden.
=====Zertifikat=====
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.key -out /etc/ssl/private/vsftpd.pem
=====Logs=====
sudo tail -f /var/log/vsftpd.log
=====User homepage=====
[[Apache]] und mod_userdir installieren. Geht auch mit [[Nginx]].
apt install apache2
a2enmod userdir
local_umask=022 # uploaded files readable via http
=====Beispiel=====
C:\Users\manuel>ftp 192.168.0.2
Verbindung mit 192.168.0.2 wurde hergestellt.
220 (vsFTPd 3.0.3)
200 Always in UTF8 mode.
Benutzer (192.168.0.2:(none)): manuel
331 Please specify the password.
Kennwort: **********
230 Login successful.
ftp>
ftp>
ftp>
ftp> put Ubuntu.tar
ftp> put test.mp4
ftp>
ftp>
ftp>
ftp> dir
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw------- 1 1000 1000 1426810880 Dec 14 18:29 Ubuntu.tar
-rw------- 1 1000 1000 137062857 Dec 14 18:29 test.mp4
226 Directory send OK.
FTP: 140 Bytes empfangen in 0.01Sekunden 28.00KB/s
ftp>
ftp>
ftp> del Ubuntu.tar
ftp>
ftp> dir
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw------- 1 1000 1000 137062857 Dec 14 18:33 test.mp4
226 Directory send OK.
FTP: 70 Bytes empfangen in 0.00Sekunden 35.00KB/s
ftp>
ftp>
ftp> rename test.mp4 test2.mp4
ftp>
ftp>
ftp> dir
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw------- 1 1000 1000 137062857 Dec 14 18:33 test2.mp4
226 Directory send OK.
FTP: 70 Bytes empfangen in 0.00Sekunden 35.00KB/s
ftp>
ftp>
ftp> close
221 Goodbye.
ftp>
ftp>
ftp> quit
=====Links=====
* [[https://wiki.ubuntuusers.de/vsftpd/|Ubuntu Users]]
* [[https://www.ionos.at/digitalguide/server/konfiguration/ubuntu-ftp-server-installation-und-konfiguration/|Ubuntu-FTP-Server: So funktioniert die Einrichtung]]
* [[https://www.danzei.de/ftp-user-mit-chroot/|FTP User mit Chroot]]