VSFTP Howto (Wheezy)

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:

  1. FTP User erhalten keine Login-Shell (Ein FTP User muss sich nicht lokal am System anmelden können!)
  2. FTP User sollten als Homeverzeichnis das Verzeichnis zugewiesen bekommen, in das sie Ihre FTP Daten ablegen dürfen.
  3. 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.

Installscript VSFTP Debian Squeeze

Bezogen auf meinen Artikel zur Konfiguration des VSFTP unter Debian Squeeze habe ich jetzt ein sehr! simples Shellscript geschrieben, welches die Schritte, die im Howto aufgeführt sind, automatisch durchführt.

Voraussetzung: Bestehende und funktionierende Internetverbindung, vorhandenes Verzeichnis /var/www, Debian Squeeze!

Wichtig – zuerst lesen!

Solltet ihr bereits einen vsftp installiert haben, sichert euch eure Konfiguration zusätzlich weg, bevor ihr das Script startet (auch wenn das Script die Konfigurationsdateien sichert)!

Als Basisverzeichnis für die FTP-User wird /var/www angenommen. Der User test hat das Homeverzeichnis /var/www/test und kann per FTP Client nur in diesem Verzeichnis „arbeiten“.

Das Script sichert eventuell vorhandene Konfigurationsdateien von VSFTP. Genauer gesagt werden folgende Files gesichert:

  • /etc/pam.d/vsftpd -> /etc/pam.d/vsftpd.bak
  • /etc/vsftpd.conf -> /etc/vsftpd.conf.bak
  • /etc/vsftpd.usr_list -> /etc/vsftpd.usr_list.bak

Die Konfigurationsdateien werden von meinem Webspace heruntergeladen.
Betroffen:

  • /etc/pam.d/vsftpd
  • /etc/vsftpd.conf
  • /etc/vsftpd.usr_list

Bestätigen muss man nur das Kennwort für den User test. Die Abfrage kommt während dem Installationsvorgang.

Herunterladen des Scripts

Download der Datei in ein Verzeichnis des Linuxserver. Hat man keinen Webbrowser parat, kann die Datei auch von der Kommandozeile aus heruntergeladen werden.

  • Wechsel in das lokale Verzeichnis, in das die Datei heruntergeladen werden soll
  • wget http://www.pc-howto.com/files/vsftpinstaller
  • RETURN

Danach muss die Datei ausführbar gemacht werden. Dies bewerkstelligt man durch den Befehl:

  • chmod +x vsftpinstaller
  • RETURN

Ausführen kann man die Datei dann als ROOT mit dem Befehl ./vsftpinstaller

ACHTUNG: Ich habe dieses Script auf einer Debian Squeeze Installation getestet, auf der Apache, MySql und Php installiert sind.

Es handelte sich hierbei allerdings um keine Produktivumgebung! Das Script fährt „ohne Rücksicht auf Verluste“ von Anfang bis Ende durch, also bitte vorher testen, anpassen… usw.

Ich übernehme keinerlei Verantwortung für eventuell auftretende Schäden und Probleme!

VSFTP Howto – Anpassungen Squeeze und Authentifizierung über PAM

Eine angepasste Version meines VSFTP Howto für Squeeze ist online. Hauptsächlich handelte es sich hierbei um eine Anpassung bei der Benutzerauthentifizierung. Der Eintrag von /bin/false in /etc/shells ist nicht mehr nötig, da dies nun über /etc/pam.d/vsftpd erledigt wird.

Hier gehts zum Howto (nicht wundern, der Link hat noch „Lenny“ im URL, es ist aber ein Howto für Squeeze (sollte natürlich auch für Lenny klappen).

VSFTP mit SSL Debian Lenny

Grundsätzliches

Im Zuge eines Umbaues und bedingt dadurch, dass der Support für ETCH in absehbarer Zeit ausläuft, muss mein alter Debian ETCH Server in naher Zukunft einem neuen Platz machen.

Ich bin daran gegangen  mit Hilfe des Network-Installer (CD-Image) ein Grundsystem aufzusetzen.

In einem nächsten Schritt erfolgte die Installation von VSFTP:

  • apt-get install vsftpd
  • gefolgt von RETURN

Nun sollte der VSFTPD laufen und anonymen Usern Zugriff gewähren. Sollte das nicht der Fall sein, meldet VSFTPD meist beim Verbindungsversuch einen (aussagekräftigen) Fehler.

Weitere Informationen findet man u.a. noch in /var/log/messages, oder aber auch in den Logdateien von VSFTPD unter /var/log/xfer.log und /var/log/vsftpd.log. Es hängt von der Konfiguration ab, wohin VSFTPD loggt.

Bei meinem Setup fehlte der User „ftpsecure“ den VSFTPD unbedingt benötigt. Dieser User wurde ohne Loginshell manuell hinzugefügt.

Openssl

Um eine SSL Verbindung realisieren zu können und auch das Zertifikat selbst zu erstellen, wird das Paket openssl benötigt:

  • apt-get install openssl
  • gefolgt von RETURN

Die Konfiguration von VSFTP

Wie bei fast allen Diensten befindet sich die Konfigurationsdatei im Verzeichnis /etc. Sie hat den Namen vsftpd.conf und sollte für einen FTP Server, der über SSL kommuniziert und nur authentifizierten Usern Zugriff gewährt, ungefähr so aussehen:

write_enable=YES
dirmessage_enable=YES
nopriv_user=ftpsecure
ftpd_banner=“Welcome (logging activated)“
local_enable=YES
file_open_mode=0755
local_umask=000
userlist_deny=NO
userlist_enable=YES
chroot_local_user=YES
local_max_rate=50000
anonymous_enable=NO
anon_world_readable_only=NO
anon_upload_enable=NO
syslog_enable=NO
log_ftp_protocol=YES
xferlog_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
xferlog_std_format=YES
xferlog_file=/var/log/xferlog
#SSL einschalten
ssl_enable=YES
allow_anon_ssl=NO
#Datentransfer verschlüsseln
force_local_data_ssl=YES
#Login verschlüsseln
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO

ssl_sslv3=NO
#Angabe der Position des Zertifikates
rsa_cert_file=/usr/share/ssl-cert/vsftpd.pem

connect_from_port_20=YES
pam_service_name=vsftpd
listen=YES

Eine SSL Verbindung zum VSFTP Server funktioniert mit Hilfe von Filezilla nur, wenn ssl_tlsv2 und ssl_sslv3 auf NO gesetzt sind.

Natürlich ist -vor einem Testlauf- auch noch ein entsprechendes Zertifikat und Schlüssel zu erstellen, sonst funktioniert es nicht:

openssl req -new -x509 -days 365 -keyout vsftp.key -out vsftp.crt

Entfernen der Passphrase:

openssl rsa -in vsftp.key -out vsftp_clean.key

Beide (Key und Zertifikat) in eine Datei kopieren:

cat vsftp.crt  vsftp_clean.key > /usr/share/ssl-cert/vsftpd.pem

Klar ist außerdem, dass entsprechende User für den Einstieg angelegt werden müssen. Diese User sollten als Homeverzeichnis, das Verzeichnis besitzen, in dem die Daten landen sollen. Wichtig ist auch noch, dass diese User keine Loginshell benötigen!

Wenn alles klappt, dann sollte ein Login über Filezilla (bei verstärkter Protokollierung) so aussehen:

vsftpssl1

Die Konfiguration von VSFTP SSL erfolgte auf Debian Lenny (netinstaller) unter teilweiser Einbeziehung des How-To auf: http://www.widhalm.or.at/node/122