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
- vsfpd.conf (zu kopieren nach /etc/vsfpd.conf)
- vsftpd.user_list (zu kopieren nach /etc/vsftpd.user_list)
- vsftpd (zu kopieren nach /etc/pam.d/vsftpd)
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.
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.
…und gleich nochmals danke für das Feedback 😉
Unter Ubuntu 14 läuft die conf Datei jedenfalls nicht. Der Server stürzt sofort ab mit dieser Config. Könnt Ihr löschen die Anleitung.
Hi,
danke für dein Feedback, allerdings ist das keine Anleitung für Ubuntu 😉
Unfassbar. Ich habe die Anleitung gerade selbst gebraucht weil ich einfach keinen Fehler finden konnte bei einem neu eingerichteten vsftp-Server. 😀
Jetzt ists geschafft.
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
Hi,
danke für dieses Tutorial! 🙂 Es hat bei mir auf Anhieb geklappt, dank deiner tollen Step-By-Step Erklärung 😉
Merci!
Danke! 🙂
super, anleitung schritt für schritt durchgeführt, hat auf anhieb funktioniert.
dickes merci!
Hallo,
danke für den Artikel –
pam_localuser.so
war, was mir zum Erfolg fehlte.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
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?
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!
Hallo! An eine fehlkonfiguration kann ich nicht ganz glauben. Vielleicht kannst du mir ja den unterschied zu deiner Konfiguration senden
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
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
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
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
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.
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.
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
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
habe noch vergessen wenn ich den server stoppe und vsftpd eingeb blinkt nur der courser!
Dann ists mal kein Syntaxerror in der Konfig. Gut! 🙂
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
Hallo,
Parameter, die nicht in der Standardkonfiguration vorhanden sind, sind hinzuzufügen.
LG
Daniel
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
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.
Klasse Anleitung. Vielen, vielen Dank!
Ich komm bei mir nicht auf den ftp server drauf bekomme nur die Meldung
Verbindungsversuch fehlgeschlagen mit „ECONNREFUSED – Connection refused by server“.
Ist komisch
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
Hi!
Die Links zu den Bildern funktionieren nicht:
„404. Seite nicht gefunden“
mfg pluvo
thx!