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.

35 Kommentare

  1. Ubuntu 14.04 LTS und vsftpd 3.02 (bin mir bei den nachkommastellen jetzt nicht 100% sicher)

    Habe rausgefunden woran es gelegen hat:

    1. In die conf folgende Zeile zusätzlich reinschreiben:

    pam_service_name=ftp

    2. Die folgende Datei muss nicht abgeändert werden:

    /etc/pam.d/vsftpd

    3. Ausserdem folgende Zeilen so schreiben:

    ssl_tlsv1=YES
    ssl_sslv2=NO
    ssl_sslv3=NO

    Ich kann Euch auch mal meine ganze conf-Datei geben zum Veröffentlichen.

  2. Hallo,
    nachdem ich erfolglos nach einer anderen Anleitung versucht habe den vsftpd zum Laufen zu bringen, gelang es mir hier endlich auf Anhieb! 1000 Dank!

    Nun würde ich gerne mein Speicherverzeichnis auf einen mit vfat gemappten usb-stick legen. Damit das nicht wieder in die Hose geht, würde ich mich über eine step-by-step-Anleitung von Euch Experten freuen.

    Jetzt eingerichtet: /var/www/test
    Ziel: /media/usbstick/cam01/

    Liebe Grüße,
    Kalli

  3. local_umask= 000 =Chmod 777

    Das ist nicht wirklich ihre Empfehlung oder ? Advokat haben sie ?
    Bedacht das sich dadurch jedes Scriptkiddy Rechte erschleichen kann ? Da jeder User Programme ausführen kann!

    Ist nicht gerade besser aber trotzdem zu 100% sicherer: local_umask=022

    1. Hallo,
      haben Sie sich schon mal die Dateiberechtigungen der hochgeladenen Dateien angeschaut? Diese stehen NICHT auf 777. Bei hochgeladenen Dateien Hat der Besitzer = FTP Username 7 (also rwx), die Gruppe rx und alle andren rx.

      Jeder FTP User hat sein eigenes Homeverzeichnis. Dieses Homeverzeichnis steht auf 755 (per chmod angepasst). Der Besitzer des Homeverzeichnis ist der jeweilige FTP User (per chown angepasst), die Gruppe ist die FTP Gruppe (per chgrp angepasst).

      Dreh und Angelpunkt ist hier der vsftp Parameter File_open_mode, der festlegt, welche Berechtigungen die hochgeladene Datei hat. Umask wird ontop von diesem Befehl „hinzugefügt“.

      Würden die Dateien mit 777 erzeugt werden und die umask auf 000 stehen, haben Sie natürlich recht. Im konkreten Fall werden diese jedoch mit 755 erzeugt. Ich habe nun aber in der Konfig die Berechtigungen (file_open_mode) auf 644 runtergeschraubt, da dies eigentlich reichen sollte.

      Ist die Frage mit Advokat ein Tippfehler, oder worauf beziehen Sie sich da?

  4. Sry das ich mich jett erst melde!
    Also mein Server läuft jetzt fast so wie er soll.
    Deine config ist leider nicht ganz korekkt!
    die vsftpd.conf funktoniert nicht so wie du sie geschrieben hast.
    Ich werde versuchen mal meine zu Posten!
    Diese habe ich von einer anderen Seite und siehe da, ohne Probleme!
    Leider geht es nicht das man in eigenen homeverzeichniss hängen bleibt. man sieht alle User! Und das schlimme auch mein Betriebs system. Dies habe ich mit Filezila probiert.
    Da Arbeite ich noch drann! Wer tips hat, bitte posten!

    1. Hallo suni,

      ich hatte genau das gleiche Problem wie Du und war nach 2 Stunden suchen schon am verzweifeln.
      Letztlich lag es daran, dass ich die Zeile
      userlist_deny=NO
      weggelassen hatte, weil ich dachte das wäre sowieso der Default-Wert. Ist es aber nicht!
      Jetzt geht bei mir alles, auch das chroot ins Homeverzeichnis usw.

      Viele Grüße
      Seb

      1. Hallo!
        Danke dir für die Rückmeldung! D.h. es läuft bei dir mit meiner Konfiguration? Ich konnte bislang das Problem von Suni nicht reproduzieren. Bei mir hats immer mit meiner Konfig geklappt…

        LG
        Daniel

  5. Du sagst ja das /bin/false nicht mehr nötig sei!
    Also der befehl useradd test -d /var/www/test -s /bin/false -m

    Wenn ich das jetzt richtig verstanden habe, wurde jetzt ein mkdir /var/www/test reichen?
    Und die dann das Passwort für den user anlegen und zur gruppe wie oben beschrieben hinzufügen.?
    Was ist dann mit den schreibrechten?
    Und /etc/pam.d/vsftpd den eintrag habe ich so Übernommen wie da steht und nur pam_listfile.so ausgetauscht gegen pam_localuser.so! Ist das richtig so?
    Und ist deine Beispielkonfiguration noch Aktuell?
    Der Server Läuft nicht bei mir! Was soll man mahcen wenn man useradd test -d /var/www/test -s /bin/false -m ausgefürhrt hatß
    Den User wieder löschen ?
    Habe echt Problem deiner Anleitung zu folgen da ich mich nicht einloggen kann.
    Ich habe sogar deine Beispielkonfiguration übernommen und alles andere auskommentiert. Auch das geht nicht. Ich habe die die nummern natürlcih davor weggelassen.
    Die User die den server ereichen sollen sind in der liste eingetragen.
    Bitte um hilfe! Gruss Sunni

    1. Servus!
      Ich habe exakt die hier beschriebene Installation erst vor wenigen Tagen auf Debian Squeeze durchgeführt und hatte keine Probleme damit.

      Bezogen auf /bin/false: Das kannst du weiterhin so übernehmen. Es ist nur nicht mehr nötig /bin/false in /etc/shells einzutragen. Es ist also ok, wenn du deinen User mit /bin/false angelegt hast.

      Die Berechtigungen für /var/www/test musst du entsprechend dem FTP Usernamen/Gruppe setzen bzw. sollte der Benutzer, der auf dieses Verzeichnis zugriff haben soll, der Besitzer des Ordners test sein. Das machst du mit dem Befehl chown test /var/www/test.

      Um nun dem User test die entsprechenden Berechtigungen zu geben machst du ein:
      chmod -R 755 /var/www/test.
      Ich werde die VSFTP Konfiguration, die Anpassungen in PAM und meine Userliste als Download beim Beitrag hinzufügen. Dann kannst du vergleichen.

      ABSEITS DESSEN:
      mach mal ein:
      /etc/init.d/vsftpd stop (RETURN)
      vsftpd (RETURN)

      Bekommst du hier eine Fehlermeldung, oder erhältst du keine Rückmeldung?

      LG

      1. Hallo Danke das Du immer so schnell Antwortest und Dir so eine mühe gibst!

        Um Dir erst mal deine Frage zuu beantworten bei einen start / stop oder restart bekomme ich keine Fehlermeldung.es so das der Server nicht zu erreichen, von ausserhalb oder local!
        Er wird mit den bekannten Fehler 530 abgewimmelt.
        Das ist ja nicht von Nachteil. Somit weiss man das der Server da ist. Ich habe deine ganzen sachen 1 zu 1 Übernommen, die du zum Download oben angehängt hast : Erst mal Danke dafür. Somit brauch man nur noch immer copy paste machen.
        Ich denke es ist nur noch ein kleiner fehler in der conf enthalten.
        Es ibt auch ein Installscript von Dir. Für leute die nur wissen das es geht aber nicht wie!
        Auch super gemacht.
        Nur das dort dann die fehlermeldung 500 OOPS: Could not bind listening IPv4 socket bekomme.
        Ich habe ein LAMP server am laufen . Somit dürfte es kein thema sein, den Server zum laufen zu bringen. 2″ Fehlermeldungen“
        Ich werde die komplette installation löschen mit Gruppen und User ebendfalls.
        Und vsftpd löschen.
        Es gab heute ein Update des vsftpd servers, mal sehen was jetzt passiert. melde mich! Und wenn Du noch eine Lösung hast wäre super, die zu erfahren.

        1. Servus!
          Danke für die Blumen. Ich hatte allerdings gemeint du sollst den vsftpd mal mit /etc/init.d/vsftpd stop stoppen und dann in der Kommandozeile mal nur vsftpd eintippen + Return.

          Was passiert dann? Fehlermeldung oder keine Rückmeldung´? Wenn keine Rückmeldung dann ists ok.

          Betreffend Could not bind to IP socket: Ist der VSFTP noch gelaufen?

          Das Sicherheitsupdate verursacht keinerlei Probleme in Verbindung mit der Konfiguration. (getestet)

          Betr. Installscript. Wenn ein Ordner /var/www vorhanden ist funktioniert es. Angelegt wird ja der User test mit einem Passwort, welches man selbst wählen kann.

          Wenn du andre User hast musst du diese entsprechend anlegen. Ganz wichtig dabei ist, diese User auch in die vsftpd.user_list einzufügen.

          1. Hallo Hallo
            Jaja, So habe mall wieder Zeit! Was passiert wenn ich den Befehl vsftpd eingebe gefolgt von enter?
            500 OOPS: Could not bind listening IPv4 socket
            Was Passiert wenn ich ein restart mache ? Keine Fehlermeldung!
            Was passiert wenn ich mich mit den user test unter ftp://ip einloggen möchte?
            Fehlermeldung 530 Permission denied
            was habe ich alles gemacht um den vsftpd zum laufen zu bekommen.
            vsftpd.user_list angelegt und user eingetragen
            useradd test -d /var/www/test -s /bin/false -m
            useradd ftpsecure -d /var/www/ftpsecure -s /bin/false
            passwort gesetzt
            vsftpd.conf übernommen die alte auskommentiert
            /etc/pam.d/vsftpd geändert nach anweisung pam shell auskomenntiert und localuser eintrag genommen
            gruppe ftp angelegt
            User Test zur Gruppe ftp gelegt
            chgrp ftp /var/www/test
            chmod -R 755 /var/www/test
            chown test /var/www/test
            Ws sagt telnet localhost 21
            welcome zu ftp ……
            Server ist über browser nicht ansprechbar wie oben gesagt fehler 530 permision denied

            Hilft das eventuell jetzt weiter
            Gruss suni

          2. Ok, du willst also per Browser auf dein FTP-Verzeichnis zugreifen. Das habe ich in der Tat noch nicht probiert.

            Update: Läuft bei mir auch über den Webbrowser (Nach Eingabe von Benutzername und Passwort).

            Funktioniert es, wenn du dich per FTP Client verbindest? (FileZilla, WSFTP, oder per Kommandozeile – Befehl FTP)

            Schön langsam gehen mir die Ideen aus 😉

            Ist der Server auch im Netz (Internet) erreichbar?

            der Eintrag in /etc/pam.d/vsftpd ist 100%ig korrekt?
            auth required pam_localuser.so

            …unter /var/www gibt es ein Verzeichnis test? (oder eben ein Verzeichnis mit dem von dir verwendeten User?)

            530 Permission denied könnte auch darauf zurückzuführen sein, dass der Uername mit dem man sich einloggen will nicht in der vsftpd.user_list eingetragen ist (oder eben nicht korrekt)

            Was hast du in der vsftpd.user_list im Verzeichnis /etc stehen?
            Mit welchem User versuchst du dich in FTP einzuloggen?

            LG

  6. hallo ich habe da mal eine frage! Was paassiert bei euch in squeeze wenn ihr diesen befehl auführt?
    chgrp ftp /www/test oder aber chown ftp /www/test

    bei mir kommen da Fehlermeldung! datei oder Verzeichniss nicht vorhanden
    oder da ich es auch anders getippelt hatte fehlender operand.

    der user test ist angelegt! Beim einlogen kommt ein 530 login incorrect

    Stimmt da was nicht?
    Und wo ist denn eigentlich dieses www verzeichniss. Damit ist das var/www gemeint?
    ich frag mich dann warum ich dadrin kein user test finde?
    Aso wie gesagt … bis hier # Zuordnung des User Test zur Gruppe ftp per usermod -g ftp test
    alles bestens.Bräuchte mal hilfe bei den rest! Danke

    1. chgrp ftp /www/test ändert die Gruppe des Verzeichnisses /www/test auf ftp
      chown ftp /www/test ändert den Besitzer des Verzeichnisses /www/test auf ftp

      Ich habe das Howto nochmals angepasst. Standardkonfiguration des Apachen => Document Root /var/www. Das Verzeichnis test dann entsprechend unter /var/www/test

    2. Die Fehlermeldung erhältst du deshalb, da ich beim Befehl useradd einen Fehler eingebaut hatte. Das Homeverzeichnis wurde nicht angelegt. Dadurch die Fehlermeldung, dass das Verzeichnis nicht vorhanden ist. In weiterer Folge fehlt das dann natürlich auch beim Loginversuch mittels FTP.

    1. Hallo,
      hab das jetzt schon mehrfach so installiert und hatte nie Probleme. Bist du dir auch sicher, dass du keinen Schritt übersehen hast?
      Was sagen die Logdateien d. VSFTP bzw. syslog?

      LG

Kommentar hinterlassen

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

* Zustimmung zur Datenspeicherung lt. DSGVO

*

Ich bin damit einverstanden

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.