FTP Server mit Vsftp

Für Debian-Squeeze gehts hier weiter!

Howto für Debian Lenny! (veraltet, obwohls auch unter Squeeze laufen sollte…)

Einrichten eines FTP Server mit Hilfe von Vsftp (Very Secure FTP)

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.

Sobald der Ftpserver läuft, kommen wir zu etwas Feintuning.

Installation

Die Installation wird unter Debian Lenny 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”:

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:

  1. Kein anonymer User kann sich einloggen
  2. Die User werden in Ihrem Verzeichnis eingesperrt
  3. Nur User erhalten Zugriff, die in einer definierten Liste (vsftpd.user_list) aufgeführt sind
  4. Die Dateiberechtigungen beim Upload werden so gesetzt, dass nur der uploadende User Vollzugriff auf die Dateien hat.
  • 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_file=/etc/usrliste
  • userlist_deny=NO
  • userlist_enable=YES
  • chroot_local_user=YES Wichtig! FTP-User werden mit Hilfe dieses Parameter in Ihrem Homeverzeichnis “eingesperrt”. Sie können also NICHT aus Ihrer Verzeichnisebene “heraus”.
  • local_max_rate=50000
  • anonymous_enable=NO
  • anon_world_readable_only=NO
  • anon_upload_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
  • connect_from_port_20=YES
  • pam_service_name=vsftpd
  • listen=YES

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?

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 -m -d /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 fiktiven Homeverzeichnis “/www/test” + erstellen einer Gruppe ftp und Zuordnung des User “test” zu dieser Gruppe

In der Konsole tippt man:

  • useradd test -m -d /www/test -s /bin/false (User wird ohne Loginshell und Homeverzeichnis /www 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 /www/test/ Zugriff zu erhalten, muss mittels Befehl chown der Besitzer des Verzeichnis “www/test” zugeordnet werden: chown test /www/test und die Gruppe desselben Verzeichnis auf ftp gesetzt werden: chgrp ftp /www/test

WICHTIG: Den User test muss man ausserdem noch in die Datei /etc/vsftpd.user_list eintragen!

Anpassung von /etc/shells

Wenn für die Shell der FTP User /bin/false beim Anlegen der User verwendet worden ist, MUSS man in die Datei /etc/shells an unterster Stelle noch /bin/false hinzufügen und die Datei speichern, ansonsten klappt der FTP Login nicht.

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.

39 Antworten auf FTP Server mit Vsftp

  1. rbam sagt:

    Hi ich habe mir das Tutorial angeschaut und so gemacht wie es beschrieben ist! Alles Top alledings bleibe ich an einer Stelle hängen mit dem “useradd ftpsecure -m -d /www/ftpsecure -s /bin/false” der bringt den Fehler: cannot lock /etc/passwd; try again later. was kann das sein was hab ich falsch gemacht!!##

    Ich hab ein Ubuntu Server unter VMBox – Netzwerkbrücke -
    Wissensstand: newb hoch3

    • rbam sagt:

      Problem gelöst hat wohl ein bisschen damit zu tun das ich Ubuntu Server nutze und kein Debian!! ein bisschen eingabe fehler!

      Danke Super Tut!!!

  2. h4nk sagt:

    Ok. Telnet war mein Fehler, hatte vsftpd gerade gestoppt, weil ich den

    500 OOPS: bad bool value in config file for: chroot_local_user

    Fehler erhielt.

    Trotzdem komme ich nicht weiter. Was will mir der Fehler sagen?

    • Daniel sagt:

      Hallo,
      was hast du in deiner vsftpd.conf bei chroot_local_user= stehen? Bad Bool Value bedeutet, dass der Wert für den Parameter nicht stimmt. Bool = Wahr/falsch oder eben YES oder NO. Hast du schon mal die Konfigurationsdateien verwendet, die ich zum Download anbiete?

      Was genau ist deiner Meinung nach verwirrend? Würde mich interessieren, denn dann kann ich es verbessern :-)

      WICHTIG: Du scheinst das Howto für Lenny zu verwenden, für Squeeze gibt es ein andres Howto, das ist ganz oben im Lenny Artikel verlinkt!

      LG
      Daniel

  3. h4nk sagt:

    Nun sind ich seit 2 Tagen daran. Es ist teilweise sehr umständlich und verwirrend erklärt. Aber nun gut, am Ende habe ich alles gemacht wie es hier steht, kann mich aber nicht einloggen und erhalte als Ausgabe auf vsftpd:
    500 OOPS: bad bool value in config file for: chroot_local_user

    telnet klappt auch nicht. Da erhalte ich:

    Trying ::1…
    Trying 127.0.0.1…
    telnet: Unable to connect to remote host: Connection refused

    Und nun?

  4. Mac sagt:

    He jetzt funztz. Ich hab noch neu installiert und alles angepasst ausserdem noch dein Howto mit dem Debian Squeeze durchgeführt und siehe da, es klappt und macht genau das was ich will einfach PERFEKT!!! Danke nochmal und weiter so is echt gute Arbeit und für jeden Anfänger zu empfehlen!

  5. Chris sagt:

    Na es kommt die Meldung:
    500 OOPS: could not bind listening IPv4 socket
    was ja heist das der Server schon läuft oder?

    Grüße

    • admin sagt:

      Ja, läuft bereits. Mach bitte vorher ein /etc/init.d/vsftpd stop. Danach nochmals nur vsftpd in der Konsole eintippen. Ich habe jetzt außerdem mein Howto etwas angepasst. (bin/false in der /etc/shells ist nicht mehr nötig.) Habe das ganze mit Debian Squeeze gerade durchgespielt und es funktioniert.

      Link: http://www.pc-howto.com/internet/vsftp-howto-lenny/ (ist für Squeeze, auch wenn im Link LENNY steht)
      LG

  6. Chris sagt:

    Habe das gleiche Problem wie Mac und habe nun /bin/false in die /etc/shells eingetragen aber leider funktioniert dies nicht. Was kann ich noch tun?

    Danke im vorraus

  7. Mac sagt:

    Hallo, schöne Anleitung besser als alles was ich bis jetzt gefunden habe. Ich bekomme beim verbindungsaufbau die meldung “331 Please specify the password”. Hab das Passwort auch schon geändert aber erhalte immer wieder diese Meldung!
    Ansonsten alles top!
    Danke schonmal im vorraus.

    • admin sagt:

      Servus!
      Hast du in /etc/shells /bin/false hinzugefügt? Ich hatte hier schon mal nen Kommentar, dass es so zwar keine “saubere Lösung” ist, bei mir hats bislang aber immer funktioniert.

      LG
      Daniel

  8. Teufel320i sagt:

    Hey.

    Danke für die schnelle Hilfe.

    Es funktioniert jetzt und ich habe Zugriff per FTP.

    Eine Anfängerfrage habe ich aber noch, da ich bei Google nichts finden konnte, was mir weiterhilft.

    Wie muss/kann ich die Rechte vergeben? Also durch welchen Befehl?

    Sorry für die blöde Frage.

    mfg

    • admin sagt:

      Bei den Berechtigungen unterscheidet Linux User, Gruppe und others (alle andren). Dies wird duch 3 “Ziffern” dargestellt. Jede Ziffer gehört Quasi zu einer Gruppe.

      So würde die Berechtigung 777 bedeuten, dass alle Vollzugriff haben. 7 für User 7 für Gruppe und 7 für alle andren
      755 bedeutet der User hat Vollzugriff, die Gruppe und alle andren dürfen lesen und ausführen aber nicht schreiben.

      Da du am FTP Server mit dem Usernamen einloggst, sollte der User Vollzugriff haben, alle andren nur lese und ausführen können.

      D.h. du gehst in ne Konsole und machst als root folgendes:

      1. Wechsel in dein Verzeichnis (das FTP Verzeichnis des User)
      2. Danach tippst du chown -R deinftpuser *
      3. chgrp -R ftp * (die von dir angelegte Gruppe ftp)
      4. chmod -R 755 * (setzt die Berechtigungen wie oben beschrieben)
      5. möglicherweise musst du dann noch aus deinem ftp Verzeichnis rausgehen mittels cd.. und deinem FTP Verzeichnis auch noch die beschriebenen Rechte und User / Gruppen geben.

      Normalerweise sollten alle von dir per FTP raufgeladenen Dateien / Ordner dann diese Berechtigungen erhalten.

  9. Teufel320i sagt:

    Hallo.

    Ich habe die Anleitung soweit befolgt und soweit ich das beurteilen kann, hat das soweit funktioniert.

    Allerdings kommt folgende Meldung, wenn ich “chown test /www/test” eingebe: chown: Zugriff auf “/www/test” nicht möglich: Datei oder Verzeichnis nicht gefunden

    Das ist wahrscheinlich auch der Grund, warum es noch nicht funktioniert :)

    Was muss ich tun, damit es funktioniert?

    Da es jetzt das erste mal ist, dass ich mit Linux arbeite, bin ich noch blutiger Anfänger. Deswegen sorry für diese wahrscheinliche “blöde” Frage :D

    Achso, eine Frage hätte ich dann zu guter letzt noch: Kann ich mit FileZilla dann auf den Server zugreifen?

    Ich sage schon mal vielen vielen Dank.

    Ansonsten eine Anleitung, die selbst ich als Anfänger gut verstehe.

    Gruß
    Teufel320i

    • admin sagt:

      Servus!
      Hast du einen Ordner /www/test auf deinem Webserver?
      Ich hatte da wohl einen Fehler in meiner Anleitung. Um den User und das Homeverzeichnis anzulegen lautet der Befehl: useradd -m -d /www/test. Ohne das -m wird das Verzeichnis nicht erstellt.

      Prüfe bitte, ob du das Verzeichnis auf deinem Linuxserver hast.

      Du musst es sonst erstellen. Zb. in nem Terminal als root:

        cd /
        mkdir www
        cd www
        mkdir test

      danach kannst du mit chown und chmod die entsprechenden User, Gruppen und Rechte zuweisen.

      LG

  10. geruetzel sagt:

    hi danke für das tutorial, super verständlich und gut gemacht :)

  11. Chris sagt:

    Vielen Dank für das super Tutorial. Erst nach deinem Tutorial hat mein ftp Server funktioniert ;o).

  12. Sohnemann sagt:

    Hy … Also ich muss den Verfasser loben!

    Das tutorial ist sehr gut und verständlich aufgebaut.

    weiter so ..

    viel Glück an alle !

  13. .NoThx sagt:

    ja scheiße ist habe tut befolgt nach “user add” server abgeschmirt!

  14. The Dragon sagt:

    Leider bekomm ich bim Restarten folgende Meldung:
    Restarting FTP server: vsftpdNo /usr/sbin/vsftpd found running; none killed.
    .

    • admin sagt:

      Hallo!

      Was macht ein:
      /etc/init.d/vsftpd start

      bzw. siehst du beim Befehl:
      netstat -a |grep ftp

      dass hier FTP (Port 21) läuft bzw. gelistet wird?

  15. JohnDoe sagt:

    es hat einen sinn, weshalb /bin/false _NICHT_ in /etc/shells eingetragen ist…da hat auch auswirkungen auf andere dienste!
    sinnvoller ist es pam umzustellen, z.b.
    in /etc/pam.d/vsftpd
    folgendes eintragen:
    #auth required pam_shells.so
    auth required pam_localuser.so
    (die auskommentierte zeile, ist der standardwert gewesen)

  16. seby1302 sagt:

    Hallo und was wen bei telnet localhost 21 nicht das da oben raus kommt sondern nix? pff imer das selbe ^^
    solsche problemen werden dan natürlich nicht beschrieben.

    So siehts bei mir aus.

    diavolo@dks-darkstar:~$ sudo telnet localhost 21
    Trying ::1…
    telnet: Unable to connect to remote host: Connection refused

    Mit oder ohne sudo das selbe, auch wen ich als root einloge. da fehlt das localhost aber welsche datei??

    mfg

  17. “Fehlermeldung” war das Stichwort – ich hatte keine, und habe es dann via Konsole probiert…

    Die Einstellung
    chroot_list_file=/etc/vsftpd.chroot_list

    muss auskommentiert sein.

    vielen Dank !

  18. Hallo !
    Vielen Dank für dieses tolle Tutorial.
    Leider bekomme ich immer noch keinen Zugriff auf meinen FTP.
    Woran kann es noch liegen ?

    beste Grüße :-)

  19. Alexander sagt:

    Hi,
    habe VSftp auf einem Debian-VServer laufen. Leider habe ich das Problem, dass ich als ftp-User nicht in die Homepage-Verzeichnisse schreiben kann. Hier kollidieren der “www-data”-user und der “ftp”-user. Kann man hier den vsftp entsprechend einstellen?
    Mfg

  20. socke sagt:

    Bei dieser Stelle soll ich trotzdem eine passwort eingeben:
    “Entfernen der Passphrase:

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

    Habe ich was übersehen?

    • admin sagt:

      Hallo!
      Nein, du hast nichts übersehen, die Passphrase wird bei diesem Vorgang noch einmal abgefragt. Du erhältst dann den Key ohne Passwort.
      LG und danke fürs Verlinken!

  21. socke sagt:

    Vielen Dank für das verständliche HowTo. Also Win-User habe ichs damit geschafft.

  22. tonner sagt:

    Zitat:
    Mit VSFTP ist es aber durchaus möglich, auch verschlüsselte FTP Sitzungen zu realisieren. (Dazu mehr in einem späteren Beitrag)

    Gibt es diesen Artikel schon. ?

  23. Andy sagt:

    Auch nach 2 Jahren immer noch TOP!!!! Hat alles super funktioniert.

    Vielen Dank!

  24. h4wk sagt:

    TOP TUTORIAL!!!

    das einzige in dem es auch für anfänger verständlich erklärt ist!

    meine vollen respekt!

    gruß
    h4wk

Hinterlasse eine Antwort

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

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>