Einrichten eines FTP Server mit Hilfe von Vsftp (Very Secure FTP) unter Debian Wheezy
Update 01.02.2014: Debian Wheezy User erhalten „OOps refusing to run with writeable root inside chroot“: Blog-Kollege Maltris hat die Lösung!
Video How-To online
Weitere Videos auf: www.youtube.com/pchowtoforyou
Update: 13.09.2012: Verzeichnisberechtigungen
Ich habe mich dazu entschieden, gleich hier am Anfang noch etwas betreffend die Verzeichnisberechtigungen auf dem Linuxserver zu schreiben.
Wenn ihr die unten angeführte Konfiguration übernehmt, werden Dateien beim Transfer auf den FTP Server mit den Berechtigungen 644 erstellt. Das bedeutet, dass der Besitzer der Datei (in der Regel der FTP User) lesen und schreiben darf. Die Gruppe darf nur lesen. Ebenso dürfen alle anderen nur lesen.
Allerdings werden Ordner, die per FTP übertragen werden mit 777 übertragen. Hier empfehle ich per chmod 755 Ordnername nachzubessern, oder aber z.B.: per Filezilla die Verzeichnisberechtigungen zu ändern. (Geht in Filezilla recht komfortabel, da man die Berechtigungen u.a. nur auf Ordner anwenden kann).
755 = Besitzer hat rwx, Gruppe hat rx, ebenso haben „alle andren“ rx.
Nun aber zur eigentlichen Konfiguration
Vsftp ist ein relativ kompakter FTP Server, der eine Vielzahl von Konfigurationsmöglichkeiten bietet. Ich versuche in diesem How-To zu erklären, wie man VSFTP installiert und in Betrieb nimmt.
Downloadmöglichkeit der Konfigurationsfiles
Die oben verlinkten Konfigurationsfiles können heruntergeladen und in die entsprechenden Ordner kopiert werden. Ich rate allerdings dazu die bereits vorhandenen Files zu sichern, bevor die Downloaddateien verwendet werden.
Installation
Die Installation wird unter Debian Squeeze vorgenommen. Da ich davon ausgehe, dass der Server keine GUI installiert hat (was bei einem Server grundsätzlich aus Sicherheitsgründen so sein sollte) muss vsftp mittels apt-get installiert werden.
Voraussetzung ist natürlich, dass man Rootberechtigungen hat.
In eine Konsole tippt man:
- apt-get install vsftpd
- gefolgt von einem Return
Ist man erfolgreich, dann sollte sich nach der Betätigung von Return folgendes am Bildschirm „abspielen“ Achtung die Versionsnummern können variieren:
Wie man aus der Texausgabe erkennen kann, wird ein User ftp angelegt.
Prüfen ob der VSFTP-Dämon (Dienst) läuft
Um nun zu testen, ob der Dienst für den VSFTP läuft, tippt man in der Konsole:
- ps -A | grep vsftpd
- gefolgt – wie immer – von einem Return
Hier sollte die PID (Prozess ID) und zumindest vsftpd ausgegeben werden. Das bedeutet, der vsftpd ist gestartet.
Wenn man jetzt noch nachschauen will, ob der Ftpserver auch auf dem Port 21 „lauscht“ kann man das mittels:
- netstat -a |grep ftp
- und Return
Auch hier sollte man eine entsprechende Ausgabe erhalten, dass FTP auf Port 21 „lauscht“ (Listen)
Beide Befehle nochmals per Screenshot (So sollte es jetzt eigentlich aussehen):
Der Einfachheit halber, wäre es natürlich auch noch möglich, einfach mittels telnet eine Verbindung zum FTP Server herzustellen:
- telnet localhost 21
- und Return
Nun ist man mit dem VSFTP verbunden:
Da wir ja im Moment nichts zu tun haben, beenden wir die Verbindung durch die Eingabe von quit und Return.
Konfiguration mittels vsftpd.conf
Um den VSFTP zu konfigurieren, greift man auf die Datei vsftpd.conf zurück, die sich im Verzeichnis /etc befindet.
Mit dem Texteditor seiner Wahl, kann man diese Datei editieren. Ich greife auf vim zurück. Vim ist anfangs etwas gewöhnungsbedürftig, aber gut 🙂
Beispielkonfiguration
Die wichtigsten Eckpunkte der unten stehenden Konfiguration sind:
- Kein anonymer User kann sich einloggen
- Die User werden in Ihrem Verzeichnis eingesperrt
- Nur User erhalten Zugriff, die in einer definierten Liste (vsftpd.user_list) aufgeführt sind
- Die Dateiberechtigungen beim Upload werden so gesetzt, dass nur der uploadende User Vollzugriff auf die Dateien hat.
1. write_enable=YES
2. dirmessage_enable=YES
3. nopriv_user=ftpsecure
4. ftpd_banner="Welcome"
5. local_enable=YES
6. file_open_mode=0644
7. local_umask=0000
8. userlist_deny=NO
9. userlist_enable=YES
10. chroot_local_user=YES
11. local_max_rate=50000
12. anonymous_enable=NO
13. anon_world_readable_only=NO
14. anon_upload_enable=NO
15. log_ftp_protocol=YES
16. xferlog_enable=YES
17. vsftpd_log_file=/var/log/vsftpd.log
18. xferlog_file=/var/log/xfer.log
19. connect_from_port_20=YES
20. pam_service_name=vsftpd
21. listen=yes
22. allow_writeable_chroot=YES (Anmerkung: für Debian Wheezy nach Installation des Paketes lt. Anleitung von Maltris-Blog!)
Hat man alle Parameter in die vsftpd.conf eingegeben kann man testen, ob die Konfiguration von vsftp akzeptiert wird. Hierfür macht man folgendes:
- /etc/init.d/vsftpd stop (+Return)
- vsftpd (+Return)
Ist alles ok, sollte man keine Rückmeldung erhalten! Mittels der Tastenkombination STRG+C bricht man das Ganze nun ab.
Die Datei vsftpd.user_list
Die Datei befindet sich muss normalerweise im Verzeichnis /etc angelegt werden. Wenn der Name vsftpd.user_list eingehalten wird, dann muss in der vsftpd.conf NICHT explizit der Pfad zu dieser Datei angegeben werden.
Der Aufbau der Datei ist simpel. Die Usernamen werden einfach untereinander in die Datei hineingeschrieben.
User1
User2
…
Wie kommt man zu den Usern?
Update: Es kann sein, dass der User ftpsecure noch nicht angelegt ist. Ohne diesen User läuft VSFTPD nicht! Deshalb muss dieser User eventuell auch erst angelegt werden. Der Befehl hierzu lautet:
useradd ftpsecure -d /var/www/ftpsecure -s /bin/false
Danach sollte man noch ein Passwort setzen!
Die User sind wie normale Anwender anzulegen. Es gibt aber ein paar Dinge, die es zu beachten gilt:
- FTP User erhalten keine Login-Shell (Ein FTP User muss sich nicht lokal am System anmelden können!)
- FTP User sollten als Homeverzeichnis das Verzeichnis zugewiesen bekommen, in das sie Ihre FTP Daten ablegen dürfen.
- Das Passwort sollte (wie überall) nicht zu einfach sein, wobei allerdings zu beachten ist, dass die Standardkonfiguration des VSFTP (wie oben gezeigt) KEINE Verschlüsselung vornimmt. D.h. also Klartext-Kennwörter! Mit VSFTP ist es aber durchaus möglich, auch verschlüsselte FTP Sitzungen zu realisieren. (Dazu mehr in einem späteren Beitrag)
Anlegen eines User „test“ ohne Login-Shell mit einem Homeverzeichnis „/var/www/test“ + erstellen einer Gruppe ftp und Zuordnung des User „test“ zu dieser Gruppe
Das oben angegebene Verzeichnis /var/www muss bereits vorhanden sein, um den Befehl useradd – siehe unten – erfolgreich ausführen zu können. Das Rootverzeichnis des Apachewebserver ist standardmäßig /var/www weshalb wir auch den Anwender „test“ als ein Unterverzeichnis von /var/www anlegen. Das Homeverzeichnes des User „test“ ist dann also /var/www/test.
In der Konsole tippt man:
- useradd test -d /var/www/test -s /bin/false -m (User wird ohne Loginshell und Homeverzeichnis /var/www/test erstellt)
- Setzen des Passwort für User test mittels passwd test und eintippen des frei wählbaren Kennwortes.
- Erstellen der Gruppe ftp mittels: groupadd ftp
- Zuordnung des User Test zur Gruppe ftp per usermod -g ftp test
- Um nun noch entsprechend auf das Verzeichnis /var/www/test/ Zugriff zu erhalten, muss mittels Befehl chown der Besitzer des Verzeichnis „/var/www/test“ zugeordnet werden: chown test /var/www/test und die Gruppe desselben Verzeichnis auf ftp gesetzt werden: chgrp ftp /var/www/test
WICHTIG: Den User test muss man ausserdem noch in die Datei /etc/vsftpd.user_list eintragen!
Anpassung der /etc/pam.d/vsftpd
Um bei der Authentifizierung auf die angelegeten Userkonten + Passwörter zugreifen zu können, öffnet man die Datei /etc/pam.d/vsftpd mit einem Editor. Der Inhalt sieht wie folgend aus (die letzte Zeile ist gemeint!):
Diese Zeile ändert man wie folgend ab:
auth required pam_localuser.so
Der finale Test – Jetzt oder nie 🙂
Wenn alles fertig konfiguriert ist, sollte man den FTP Dienst erneut starten. Dies erreicht man durch die Eingabe von:
- /etc/init.d/vsftpd restart
- und Return
Natürlich kann man auch gleich den PC neu starten, jedoch ist das nicht notwendig. Ist alles glatt gelaufen, sollte der Login ausschließlich mit dem Usernamen test und dem vergebenen Passwort klappen, alles andre sollte mit einer Meldung:
530 Permission Denied
Login failed
quittiert werden.
Sollte jemand Probleme, Tips oder Verbesserungsvorschläge haben, bitte einfach per Kommentar oder Email melden.