FTP-Server installieren Ubuntu 14.04

  • Hallo, ich muss mal fragen ob jemand nen guten Link zu einem Tut findet in dem erklärt wird, wie man einen FTP
    Server einrichtet und man ihn nutzt indem man einen Benutzer anlegt der auf ein bereits bestehendes Verzeichnis Zugriffsrechte hat.


    Ich finde imme rnur sowas:
    https://wiki.ubuntuusers.de/vsftpd/


    Was ich jetzt immer versucht habe aber nie geklappt hat.

    Der oben geschriebene Beitrag ist meine persönliche Meinung/Interpretation!
    Im übrigen verweise ich auf §675 Abs. 2 BGB .

  • Aus meiner eigenen Doku... bin noch ned dazu gekommen das zu bloggen.



    Wir möchten einen frei verfügbaren FTP-Server damit unser User 'mywebsite' in dern Ordner /var/www/html/mywebsite selber Dateien schreiben darf.
    Dazu nutzen wir vsftp - denn der User möchte ein normales FTP Programm und kein SSH-FTP nutzen.
    Außerdem möchten wir verhindern dass er mit dem FTP-Programm aus dem Ordner '/var/www/html/mywebsite' raus kommt.
    Und per SSH soll er sich natürlich nicht einloggen dürfen!
    Nun gut, Installieren wir vsftp:

    Code
    1. apt-get install vsftpd


    Erstellen wir den User:

    Code
    1. adduser mywebsite



    Nun in die Datei '/etc/passwd' und die Zeile mit dem User 'mywebsite' von so:

    Code
    1. mywebsite:x:1001:1001:My Website,,,:/home/mywebsite:/bin/bash


    auf so anpassen:

    Code
    1. mywebsite:x:1001:1001:My Website,,,:/var/www/html/mywebsite:/bin/false


    (Der neue Home-Ordner des Users ist damit '/var/www/html/mywebsite' die Shell '/bin/false' bedeutet dass er keine Shell bekommt wenn er sich über SSH anmeldet (also geht SSH nicht für den User!))


    Und SSH-Server neu starten:

    Code
    1. service sshd restart


    Löschen wir den alten Home-Ordner und erstellen den neuen (der im html-Verzeichnis des Apachen liegt!)

    Code
    1. rm -rf /home/mywebsite
    2. mkdir /var/www/html/mywebsite
    3. chown -R mywebsite:mywebsite /var/www/html/mywebsite


    Nun noch die vsftp Einstellungen anpassen.
    Datei '/etc/vsftpd.conf' ändern, bzw. auskommentieren:

    Code
    1. write_enable=YES
    2. chroot_local_user=YES
    3. listen=YES
    4. listen_ipv6=NO
    5. local_umask=022


    Und einfügen:

    Code
    1. allow_writeable_chroot=YES


    -> Achtung: Am Ende der Datei muss eine Leerzeile sein, sonst started der vsftpd nicht.
    --> Wenn man ihn manuell mit '/usr/sbin/vsftpd' starten will kommt die Meldung "500 OOPS: bad bool value in config file for: allow_writeable_chroot"
    (Chroot bedeutet dass der User von seinem Home-Ordner nicht weiter nach oben gehen darf. Also genau das was wir aus Sicherheitsgründen wollen!
    Man darf entweder auf ipv6 oder ipv4 listen, beides geht nicht.)


    Diese Werte stehen so schon drin, die kann man überprüfen:

    Code
    1. anonymous_enable=NO
    2. local_enable=YES
    3. ssl_enable=NO


    (Wenn man hier SSL einschaltet darf man sich nicht mehr Plain verbinden - und mit der SSL Verbindung hatte ich Probleme, das ging nicht auf Anhieb!)


    Und in die Datei '/etc/pam.d/vsftpd' das folgende auskommentieren, also aus:

    Code
    1. auth required pam_shells.so


    mach so:

    Code
    1. #auth required pam_shells.so


    Damit prüft vsftpd nicht ob der User eine gültige Shell in der '/etc/passwd' hat. Denn '/bin/false' würde hier ungültig geben und vsftpd nimmt den User nicht an.


    Und neu starten den FTP-Server:

    Code
    1. service vsftpd restart


    Jetzt sollte man sich per FTP verbinden können.
    Detaileinstellung:
    (FileZilla)

    Code
    1. User: mywebsite
    2. Pass: xxx
    3. Port: 21
    4. Type: Plain FTP







    Und so wird man alles wieder los:

    Code
    1. deluser mywebsite
    2. rm -rf /var/www/html/mywebsite
    3. apt-get purge vsftpd
  • Wenn ich unverschlüsseltes FTP will dann ist das die Anleitung dafür. Ich benötige das hauptsächlich aus Kompatibilitätsgründen. Dass man das nicht für kritische Daten nutzen soll ist hoffentlich jedem Serverbetreiber klar.


    Wenns verschlüsselt sein soll nehm ich persönlich sowieso sftp und spare mir somit den ftp server ganz - ein dienst weniger der eine gefahr ist.


    Gerade im Shared Hosting findet man plain ftp noch sehr oft, und die gefahr eines mitm ist -imho- auch relativ gering.


    Thomas

  • Mit 'sftp' im oberen Beitrag meine ich natürlich "ftp" über den sshd.


    Also:
    Sind mir die Daten und die Passwörter nicht wichtig, aber einfachheit und kompatibilität dann nehme ich plain ftp.
    Sind mir aber die Passwörter und Daten wichtig nehme ich sftp ("ftp" über den sshd), traue ich dem user nicht so muss halt ein chroot eingerichtet werden.


    Ich habe schon oft beim Übertragen von weniger wichtigen Dateien mit Problem von Ftps (ftp mit tls) kämpfen müssen - das spare ich mir gerne, und der versuch vsftp mit ssl auf anhieb zum laufen zu bringen (was kein problem mit apache, dovecot oder postfix war) scheiterte. Das stärkte mich in der Vermutung dass am Ende vsftp total sicher gegen (imho nicht wirklich häufige) mitm attacken ist, ich aber dafür ärger mit programm xy oder zy haben werde. Deshalb also plain. Ich bin mir der Gefahren bewusst und erwarte dass jeder andere Serveradmin das auch weiß.
    Das der FTP-User für plain ftp natürlich ein "unwichtiges" Passwort hat und die Daten egal sind sollte trotzdem klar sein.


    Übrigens denke ich dass das auch der Grund ist warum netcup plain ftp erlaubt. Es ist einfach einfacher!


    Thomas

  • Auf Wunsch eines einzelnen Users also hier noch die Erweiterung wir man aus dem obigen Plain FTP (was zum Testen und aus Kompatibilitätsgründen durchaus sinnvoll ist) ein verschlüsseltes FTP macht.
    (ich denke ich hatte bei meinem letzten Versuch hier evtl. Probleme mit der Firewall - bei meinem jetzigen Test ging es auf Anhieb!)


    Erstmal ein Zertifikat erstellen:

    Code
    1. openssl req -x509 -nodes -days 3650 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem


    (die eingegebenen Daten sind eigentlich egal, werden aber eventuell dem Anwender beim ersten FTP Login gezeigt!
    -> Die Gültigkeit ist hier auf 3650 Tage eingestellt, die sollte man natürlich "sinnvoll" wählen!)


    Und dieses in der Datei '/etc/vsftpd.conf' eintragen, bzw. folgende Parameter anpassen:

    Code
    1. rsa_cert_file=/etc/ssl/private/vsftpd.pem
    2. rsa_private_key_file=/etc/ssl/private/vsftpd.pem
    3. ssl_enable=YES


    Nun noch den vsftpd neu starten:

    Code
    1. service vsftpd restart


    Jetzt sollte man sich per FTP (mit TLS) verbinden können.
    Detaileinstellung:
    (FileZilla)

    Code
    1. User: mywebsite
    2. Pass: xxx
    3. Port: 21
    4. Type: Require explicit FTP over TLS


    (Plain FTP geht nun nicht mehr!)


    Noch eine Erweiterung zur oberen Anleitung:
    -> Achtung: Am Ende von "allow_writeable_chroot=YES" darf kein leerzeichen stehen, sonst startet der vsftpd nicht!
    --> Wenn man ihn manuell mit '/usr/sbin/vsftpd' starten will kommt die Meldung "500 OOPS: bad bool value in config file for: allow_writeable_chroot"


    Es war also nicht die Leerzeile nötig, sondern das Problem war ein Leerzeichen hinter dem "YES" - narf, da muss man erstmal drauf kommen!

  • Danke für die Anleitung und Beitrag.


    Naja ich nutze fpt eig immer nur um Backups vom oder auf den Server zu schieben. Das geht mit winscp nicht so gut. Auch wenn z.b. Der Support von Modulen Zugriff auf die ftp Daten benötigt brauche ich ftp um ihm nicht ssh Zugriff geben zu müssen, was ich natürlich nicht mache.


    Mein aktuelles Anliegen ist, dass ich mit dem emagic one store Manager for prestashop arbeiten will. Das Tool stellt und braucht eine ftp Verbindung und somit kann ich Kundendaten, Bestellungen etc. Damit verwalten.


    Daher denke ich wäre eine sichere Verbindung notwendig. Ich bitte um Entschuldigung, dass hätte ich erwähnen können und sollen.


    Ich habe jetzt auch mal nach sftp Anleitungen geguckt und verstehe nicht, wieso es so viele gibt aber die entweder immer anonyme Benutzer erlauben oder aber, für mich und von mir aus gesehen, so kompliziert mit den Benutzern umgehen und Ordnern etc.


    Den ftp oder sftp Benutzer den ich gern hätte soll nur der für mich bzw. Das Tool sein.


    Ich lese auch viel, dass man lokale ssh Benutzer für den sftp benutzen kann.


    Aber leider sind viele how to s mittlerweile in die Jahre gekommen oder haben schlicht nicht funktioniert. Entweder weil ein Befehl nicht ausgeführt werden kann oder weil in der aktuellen Version von ftp server sich Sachen geändert haben die das tutorial nicht aktualisiert haben.


    Auch bin ich niemand der gerne copy and Paste macht. Ich versuche auch zu verstehen wieso etwas so gemacht wird wie im tutorial beschrieben. Leider gehen die meisten darauf nicht ein. Wohl auch weil viele das warum nicht interessiert.






    Gesendet von meinem C6903 mit Tapatalk

    Der oben geschriebene Beitrag ist meine persönliche Meinung/Interpretation!
    Im übrigen verweise ich auf §675 Abs. 2 BGB .

  • Dann hoffe ich mal dass dir diese Anleitung nun taugt. Ich denke ich hab sie aufs minimalst-nötigste runtergebrochen.
    Die Anleitung ist übrigens unter Ubuntu 16.04 getestet.
    Unter Ubuntu 14.04 (da hatte ich sie zuerst verfasst) war das mit dem deaktivieren des pam-moduls zum prüfen der shell noch nicht nötig.


    Kommst du nun damit klar?
    Brauchst du Hilfe?


    Thomas

  • Ich werde es nachher testen und gebe Dir dann bescheid bzw. euch in Form eines Beitrags, damit alle etwas davon haben :)


    Denke mal heute Abend komme ich dazu :)

    Der oben geschriebene Beitrag ist meine persönliche Meinung/Interpretation!
    Im übrigen verweise ich auf §675 Abs. 2 BGB .

  • jetzt habe ich im frontend "HTTP ERROR 500" was bestimmt daran liegt:

    Code
    1. chown -R mywebsite:mywebsite /var/www/DOMAIN/htdocs


    denn der Ordner "gehört" ja schon www-data, damit er schreiben kann....


    zumindest geht die Seite wieder, wenn ich den Ordner wieder www-data gebe:

    Code
    1. chown -R www-data:www-data /var/www/DOMAIN/htdocs


    Nutze nginx und nicht apache2, falls das relevant ist

    Der oben geschriebene Beitrag ist meine persönliche Meinung/Interpretation!
    Im übrigen verweise ich auf §675 Abs. 2 BGB .

  • Das meinte ich ja u.A., was bei anderen tutorials oft der Fall ist:
    Ich habe natürlich schon einen Ordner, der Shop läuft ja auch schon.


    Dieder Ordner gehört www-data. Der braucht ja lese und Schreibrechte,w eil php7-fpm darüber läuft. :/

    Der oben geschriebene Beitrag ist meine persönliche Meinung/Interpretation!
    Im übrigen verweise ich auf §675 Abs. 2 BGB .

  • Wenn der Ordner schon existiert dann solltest du die Rechte des Ordners nicht anpassen.
    Du kannst aber eventuell den neuen User in die Gruppe www-data stecken.


    Das Problem hier ist dass ich dir gerne genau helfe wenn ich exakt weiß was du tust und willst (und damit auch weiß welche Rechte und Besitzer der Ordner hat).
    Darauf kann man in einem Tutorial schlecht eingehen, und deshalb ist so ein Tutorial immer ein Ansatz um einem Admin zu helfen in die richtige Richtung zu kommen - die Details (also z.B. die Rechtevergabe der User auf deinem System) hängen zu sehr vom Einzelfall ab.


    Ich gehe aber davon aus dass das jeder Administrator dann richtig einrichten kann.
    Wenn du Hilfe brauchst probier ich dir gerne zu helfen.


    Es kann natürlich sein dass vsftpd den Login nur in einen Ordner erlaubt der dem User gehört oder ähnliche Späßchen. Da helfen dann nur Forschungen im Logfile des vsftpd.
    Nichts für ungut, aber es ist natürlich ein Unterschied ob du "einen FTP Server auf einem ansonsten leeren System installieren" willst, oder ob du "einen FTP Server auf einem Produktivsystem welches schon 5 Jahre läuft brauchst um vorhandene Dateien zu verändern"...


    Thomas

  • klappt. Danke.


    Fehler war, dass ich FTP statt SFTP als Protokoll drinnen hatte :S


    Schreibrechte habe ich jedoch nicht über sftp:

    Code
    1. Befehl: put "C:\Users\USER\AppData\Local\Temp\fz3temp-1\css-xmas.css" "css-xmas.css"
    2. Fehler: /var/www/DOMAIN/htdocs/css-xmas.css: open for write: permission denied
    3. Fehler: Dateiübertragung fehlgeschlagen

    Der oben geschriebene Beitrag ist meine persönliche Meinung/Interpretation!
    Im übrigen verweise ich auf §675 Abs. 2 BGB .

    The post was edited 3 times, last by Real-DD-2 ().

  • Ja, also damit hat es funktioniert:

    Code
    1. chown -R mywebsite:www-data /var/www/DOMAIN/htdocs


    Jetzt kann der FTP User Dateien bearbeiten nd der Webserver macht keine Probleme.


    Danke! :)

    Der oben geschriebene Beitrag ist meine persönliche Meinung/Interpretation!
    Im übrigen verweise ich auf §675 Abs. 2 BGB .

  • Ich muss nochmal aktualisieren.

    Code
    1. chown -R mywebsite:www-data /var/www/DOMAIN/htdocs


    Klappt nicht. Hatte es die letzten tage etwas aus den Augen verloren. Aber der webserver hat dann keine Rechte mehr:

    Code
    1. Warning: file_put_contents(/etc/nginx/html/DOMAIN/modules/ebay/classes/../log/request.txt): failed to open stream: Permission denied in /etc/nginx/html/DOMAIN/modules/ebay/classes/EbayRequest.php on line 1069


    Das zieht sich durch jede Datei, die gebraucht wird.


    Wie bekomme ich jetzt den FTP User und den user www-data dazu Schreibrechte zu haben?


    Außerdem spuckt Filezilla das aus:


    Die vsftpd.conf sieht so aus:


    die passwd sieht so aus:

    Code
    1. mywebsite:x:1001:1001:,,,:/etc/nginx/html/mywebsite:/bin/false


    /etc/pam.d/vsftpd hat den Inhalt:



    Die vsftp.log hat den Inhalt:


    Server ist nginx (Aktuell) - Falls relevant.



    Dann habe ich die vsftp.conf mal verändert:


    dann kommt in der vsftp.log so zustande:



    Filezilla spuckt dann das aus:



    Was ich möchte ist:
    Der FTP USER soll per filezilla schreiben und lesen können, sow ie der www-data user, also der Webserver.


    Ich hoffe, dass mit jemand behilflich sein kann :)

    Der oben geschriebene Beitrag ist meine persönliche Meinung/Interpretation!
    Im übrigen verweise ich auf §675 Abs. 2 BGB .

    The post was edited 2 times, last by Real-DD-2 ().

  • Leider ist der Beitrag oben mit den maximalen Zeichen belegt.


    Daher der Hinweis hier: Ohne ssl geht es. Dann kann ich mich verbinden.


    Dann sieht die Ausgabe in FTP so aus:



    Lösung Benutzerrechte FTPUSER:
    Ich habe als erstes eine Gruppe "wwwftp" erstellt:

    Code
    1. groupadd wwwftp


    Da ich schon einen Benutzer habe, habe ich den vorhandenen Benutzer (mywebsite) in die Gruppe wwwftp geschoben:

    Code
    1. usermod -g wwwftp mywebsite



    Der letzte Schritt ist dieser, den ich nicht genau erklären kann:

    Code
    1. chown -R www-data:wwwftp /var/www
    2. chmod -R 775 /var/www


    chown -R heißt ja, dass er Rekusiv arbeitet
    das www-data, also der erste Teil war glaube ich der Name und der zweite teil "wwwftp" die Gruppe


    Das heißt, der Besitzer und Eigentümer von /var/www ist www-data und wwwftp
    https://wiki.ubuntuusers.de/chown/


    Code
    1. chmod -R 755


    sollte bedeuten, dass Der Eigentümer (www-data und wwwftp ?) Lesen und schreiben darf


    Der Ordner /var/www hat jetzt auf jeden Fall den Eigentümer:www-data [33]
    Die Gruppe ist:wwwftp [5001]


    Ich hoffe, dass ich das alles auch richtig verstanden habe :)

    Der oben geschriebene Beitrag ist meine persönliche Meinung/Interpretation!
    Im übrigen verweise ich auf §675 Abs. 2 BGB .

    The post was edited 1 time, last by Real-DD-2 ().