Results 1 to 7 of 7

Thread: HowTo - vsftpd, jedem User sein eigenes Verzeichnis

  1. #1
    Join Date
    Jul 2007
    Location
    Austria
    Posts
    1,336

    HowTo - vsftpd, jedem User sein eigenes Verzeichnis

    Vielfach braucht man verschiedene Verzeichnisse für jeden User.
    Da ich eine private Domain mit mehreren Subdomains betreibe, wollte
    ich jedem User die Möglichkeit geben, seine Subdomain selbst zu gestalten.
    Dazu war es erforderlich, einen FTP Zugang für jeden User einzurichten und
    jedem User sein eigenes Directory zu geben.
    Nun, ich mache es kurz - es gibt einige Lösungswege - ich wollte jedoch nach
    Möglichkeit den bereits eingebauten VSFTPD von Oleg nutzen. Nach vielen
    Versuchen habe ich letztendlich einen sehr stabilen und einfachen Weg
    gefunden.
    Noch ein paar Worte zu meiner Konfiguration:
    Ich habe lighttpd laufen, um meine Webseiten lokal zu sammeln und probieren zu
    können. Das Verzeichnis (document_root) von lighttpd liegt wie üblich in
    /opt/share/www - die jeweiligen Unterverzeichnisse direkt darunter, also
    Die startseite z.Bspl. auf /opt/share/www/index.html und im Unterordner
    /opt/share/www/linux/index.html eine komplette Linux-Seite.
    Der Vorteil liegt darin, dass man auf den Server von aussen mit
    http://bespieluser.dyndns.org/linux sofort die Startseite unter dem jeweiligen
    Ordner aufrufen kann. Genau so werden alle Ornder später auf den grossen Server
    kopiert. Am grossen Server ist auf der Hauptseite ein Link auf die Unterseiten
    und natürlich am DNS-Server die Subdomain direkt eingetragen. Deshalb brauche
    ich nur alle Subordner unter document_root auf den Grossen Server kopieren um
    den kleinen und grossen Server auf dem gleichen Stand zu halten. Das erleichtert
    z.Bspl. die ganze Backup-Geschichte ganz wesentlich und ist zudem sehr einfach
    zu realisieren. Weiters kann jeder User seine Seite beliebig testen, da ein
    Upload nur alle 2 Tage durchgeführt wird.

    VORBEDINGUNG:
    - installierten und laufenden http Server (kein muss, ftp geht auch ohne)
    - Olegs FW in der Version=>9 (mit VSFTP - VSFTPD muss funktionieren!)
    - Die üblichen Kenntnisse und Installationen mit vi, putty, winscp

    1.) User anlegen: legen sie alle User im Webif einfach an und read/write
    Zugriff geben. Den Ftp Server eingeschaltet lassen. Abschließend noch
    apply und finish.

    2.) Mit winscp auf dem Router einloggen und aus /tmp/etc folgende Files auf den
    PC kopieren:
    - vsftpd.conf
    - vsftpd.passwd
    - den ganzen Ordner vsftpd.users
    Winscp schliessen

    3.) Im Webif vom Router den FTP einfach ausschalten, apply und finish

    4.) Nochmals winscp starten und alle Files von Pkt. 2.) wieder an den
    gleichen Ort zurück kopieren. Winscp schliessen.

    5.) Nun mit Putty am Router einloggen und einen Ordner anlegen:

    (bei mir) mkdir /tmp/mnt/disc0_3/Z_VSFTP_USERS
    dann darunter alle gewünschten Ordner anlegen, z. Bspl.
    mkdir /tmp/mnt/disc0_3/Z_VSFTP_USERS/linux (ist ein Beispieluser)
    mkdir /tmp/mnt/disc0_3/Z_VSFTP_USERS/anderesbeispiel
    usw. - bis alle Ordner angelegt sind

    6.) Nun noch die wesentliche, kleine Änderung:

    vi /tmp/etc/vsftpd.users/linux (mit i in den insert mode)
    und als erste Zeile einfügen:
    local_root=/tmp/mnt/disc0_3/Z_VSFTPD_USERS/linux
    mit ESC:wq speichern

    den gleichen Vorgang für jeden User durchführen, also

    vi /tmp/etc/vsftpd.users/anderesbeispiel
    local_root=/tmp/mnt/disc0_3/Z_VSFTP_USERS/anderesbeispiel
    usw. usw., bis alle User ein eigenes Directory als local_root haben.

    7.) Nun noch die geänderten Files (mit vi) in /tmp/local/.files eintragen

    /etc/fstab
    /etc/vsftpd.conf
    /etc/vsftpd.users
    /etc/vsftpd.passwd

    8.) Jetzt muss nur noch der vsftpd beim booten gestartet werden:
    In die /tmp/local/sbin/post-mount unmittelbar vor rc.unslung eintragen

    #vsftpd starten, wegen eigener User-Config
    /usr/sbin/vsftpd

    9.) Wenn der Ordner des Users auch über das Web erreichbar sein soll,
    einfach einen symbolischen Link legen:

    ln -s /tmp/mnt/disc0_3/Z_FTP_USERS/linux /opt/share/www/linux


    10.) Naja und was denn sonst noch - natürlich das berühmte:

    flashfs save && flashfs commit && flashfs enable && reboot


    Falls man den symbolischen Link entfernen will/muss:

    unlink /opt/share/www/linux

    Bitte niemals zur Linkentfernung rm -f /opt/share/www/linux benutzen,
    das kann bei einer falschen Option (-f) sehr böse Folgen haben, ist mir
    leider einmal passiert! (Leider ein r anstatt f erwischt) Und auch kein
    unlink /opt/share/www/linux/ (/), die Fehlermeldung war für mich der
    Grund, warum ich ein rm -r /opt/share/www/linux/ versuchte (unabsichtlich),
    leider ist es bei einem einzigen Versuch geblieben, denn danach war das
    gesamte Directory weg. (Aber aus Schaden wird man klug!)

    Spielereien: natürlich kann man als local_root jedes beliebige Directory angeben, bei vielen Users wird das aber schnell sehr unübersichtlich - und noch etwas - verbieten sie root und anonymus als ftp, das stellt ein sehr grosses Sicherheitsrisiko dar!

    Fehler: bis jetzt keine bekannt, lediglich ein nicht Linux-konformer Editor war Schuld für eine längere Fehlersuche. Seither nehme ich nur mehr den Editor von Winscp oder vi, von mc oder nano.

    Viel Spass
    Alle HowTo's, all howto's

    RT-N16 1.9.2.7-rtn-r3121, Samba, VSFTP, Lightthpd, PHP, Perl, MySQL, Serendipity, Aria2web, HDD 640GB
    RT-N66U, 16GB MicroSD/ 2 Partitions, 2,5" HDD 1TB, running with Merlin's FW and Entware, 16 Mbit A1,
    Netgear DGND 3700V2, QNAP TS119PII 4 TB, QNAP TS209 2 TB Raid1, Backup Synology DS107+ 1 TB, HP CP1515n

  2. #2
    Join Date
    Jan 2010
    Location
    Frankfurt
    Posts
    12

    Directory listing mit vsftp nicht möglich

    Hallo newbiefan,

    vielen Dank für Dein HowTo, mit dem ich den vsftpd auf meinem WL500gPV2 gut einrichten konnte.
    Nun tritt bei mir folgendes Problem auf: Das Einloggen vom LAN funktioniert, z. B. mit Windows Start->Ausführen->ftp. Ich kann mit dann mit "pwd" meinen Verzeichnisnamen anschauen, mit "cd" in ein Unterverzeichnis wechseln aber "ls" oder "dir" brechen ab mit:
    200 PORT command successful. Consider using PASV.
    425 Failed to establish connection.
    winscp bricht auch ab mit:
    Timeout detected.
    Could not retrieve directory listing
    PORT command successful. Consider using PASV.
    Error listing directory '/'.
    Eigenartigerweise bekommt Firefox nach Aufruf von ftp://192.168.1.1 und Eingabe von User und Passwort ein Directorylisting, allerdings nur aus dem LAN. Wenn ich über Firefox aus dem WAN zugreife (Port 21 ist weitergeleitet), funktioniert auch das nicht.

    In meiner vsftpd.conf habe ich dirlist_enable=yes und für meinen Benutzer "test2" in vsftpd.users/test2 auch nocheinmal.

    Meine vsftpd.conf sieht so aus:
    anonymous_enable=no
    dirmessage_enable=yes
    download_enable=no
    dirlist_enable=no
    hide_ids=yes
    syslog_enable=yes
    local_enable=yes
    local_umask=022
    chmod_enable=no
    chroot_local_user=yes
    check_shell=no
    user_config_dir=/etc/vsftpd.users
    passwd_file=/etc/vsftpd.passwd
    listen_ipv6=yes
    listen_port=21
    background=yes
    max_clients=12
    idle_session_timeout=240
    utf8=yes
    use_sendfile=no
    anon_max_rate=0
    local_max_rate=0
    und meine vsftpd.users/test2 so:
    local_root=tmp/mnt/vsftp_users/disc0_3/test
    dirlist_enable=yes
    download_enable=yes
    write_enable=yes
    Die Berechtigungen für das Testverzeichnis tmp/mnt/vsftp_users/disc0_3/test sehen so aus:
    drwxr-xr-x 3 admin root 4096 Jan 5 14:07 .
    drwxr-xr-x 9 admin root 4096 Jan 5 12:14 ..
    drwxrwxr-x 3 admin root 4096 Jan 6 13:18 test
    Ich habe meinen Router nach der Anleitung von wengi eingerichtet und die von ihm empfohlenen "Weiterentwicklung von olegs Firmware" WL500gpv2-1.9.2.7-d-r1000.trx installiert.

    Hättest Du vielleicht einen Ansatz wie ich das Problem lösen könnte? Ich wäre Dir sehr dankbar.

    Grüße
    hornau

  3. #3
    Join Date
    Jul 2007
    Location
    Austria
    Posts
    1,336
    Quote Originally Posted by hornau View Post
    Ich habe meinen Router nach der Anleitung von wengi eingerichtet und die von ihm empfohlenen "Weiterentwicklung von olegs Firmware" WL500gpv2-1.9.2.7-d-r1000.trx installiert.

    Hättest Du vielleicht einen Ansatz wie ich das Problem lösen könnte? Ich wäre Dir sehr dankbar.

    Grüße
    hornau
    Ich sende dir jedenfalls meine vsftpd.conf, bei mir geht es - habe aber die r740 FW noch drauf, sollte sich aber nichts geändert haben.
    Was mir auffällt: benutzt du ipv6?
    Jedenfalls sieht bei mir eine user-config so aus:
    Code:
    dirlist_enable=yes
    download_enable=yes
    write_enable=yes
    local_root=/tmp/mnt/disc0_3/irgend_ein_dir
    und meine vsftpd.conf:
    Code:
    anonymous_enable=no
    dirmessage_enable=yes
    download_enable=no
    dirlist_enable=no
    hide_ids=yes
    syslog_enable=yes
    local_enable=yes
    local_umask=066
    chmod_enable=no
    chroot_local_user=yes
    check_shell=no
    user_config_dir=/etc/vsftpd.users
    passwd_file=/etc/vsftpd.passwd
    listen=yes
    listen_port=21
    background=yes
    max_clients=12
    idle_session_timeout=1200
    utf8=yes
    use_sendfile=no
    anon_max_rate=0
    ftpd_banner="welcome to example.net node63, everything is logged"
    use_localtime=yes
    delay_failed_login=15
    max_login_fails=1
    Also sehe ich vorerst keine Unterschiede, lediglich bei unmask und listen.
    delay failed login erzwingt 15 Sekunden Verzögerung bei falschen Login, abhängig von max_login_fails. Achja, use_localtime behebt den Zeitfehler, den Vsftpd sonst ausgibt.
    Solltest du keine ipv6 connection haben, versuche es einfach mit meiner Conf, kann ja nicht viel passieren...

    Als ftp-client verwende ich Filezilla, versch. Linuxe wie Ubuntu; Debian; Mandrake, und eigentlich alles was eben so installiert ist und einen FTP-Client spielen kann.
    (Lediglich IE habe ich noch nicht probiert)

    Was ich auch noch sehe im Changelog ist ein Update von Vsftpd auf V2.2.2 ab FW r893. Das sollte jedoch nicht allzuviel ausmachen, r740 hatte die Version V2.2.1 laufen.

    Wäre gut zu wissen, woran es hapert - teile uns bitte mit wenn es gehen sollte.

    LG
    Newbiefan

    Nachtrag: Habe ich vergessen zu fragen: läuft dein Router im AP oder Gateway Mode?
    Falls im Gateway-Mode, bitte die Ausgabe von 'lsmod' eventuell fehlt hier etwas (Conntrack), siehe http://forums.fedoraforum.org/showthread.php?t=61710

    oder noch besser: https://www.linuxquestions.org/quest...oblems-597966/

    Falls notwendig, erklären wir dir wie und wo man das Modul laden kann.
    Last edited by newbiefan; 08-01-2010 at 18:24.
    Alle HowTo's, all howto's

    RT-N16 1.9.2.7-rtn-r3121, Samba, VSFTP, Lightthpd, PHP, Perl, MySQL, Serendipity, Aria2web, HDD 640GB
    RT-N66U, 16GB MicroSD/ 2 Partitions, 2,5" HDD 1TB, running with Merlin's FW and Entware, 16 Mbit A1,
    Netgear DGND 3700V2, QNAP TS119PII 4 TB, QNAP TS209 2 TB Raid1, Backup Synology DS107+ 1 TB, HP CP1515n

  4. #4
    Join Date
    Jan 2010
    Location
    Frankfurt
    Posts
    12
    Klasse! Es geht!
    Das war wohl das listen_ipv6=yes anstelle von listen=yes in meiner vsftpd.conf.
    IPV6 ist bei mir im WIF ausgeschaltet. Wenn ich mir die vsftpd Konfig-Dateien vom System erzeugen lasse, steht listen_ipv6=yes in der vsftpd.conf...

    Nun, mit Deiner vsftpd.conf geht es. Vielen Dank!

    Bzgl. Deiner Fragen: Mein Router läuft als Home Gateway.
    Hier die mod-Liste:
    Code:
        Tainted: P  
    usb-storage            63112   4
    sd_mod                 12900   8
    scsi_mod               72656   2 [usb-storage sd_mod]
    printer                13060   0 (unused)
    ehci-hcd               28212   0 (unused)
    usb-ohci               19428   0 (unused)
    usbcore                78936   1 [usb-storage printer ehci-hcd usb-ohci]
    ip_nat_ftp              3136   0 (unused)
    ip_conntrack_ftp        4584   1
    ipt_NETMAP               760   2
    et                     29088   0 (unused)
    ip_conntrack_ftp ist drin.

    Dann vielen Dank nochmal für Deine Hilfe!
    Ich mache mich dann mal an den Webserver...

    Grüße
    hornau

  5. #5
    Join Date
    Jul 2007
    Location
    Austria
    Posts
    1,336
    Was mir noch aufgefallen ist:
    Laut deinen Angaben befindet sich ein vsftp_users Verzeichnis auf /tmp/mnt ,
    dann wäre alles im RAM und ist nur beschränkt nutzbar, max. das freie RAM= wenige MB.

    tmp/mnt/vsftp_users/disc0_3/test

    Es kann aber auch ein Schreibfehler sein, denn normaler Weise wäre es:
    /tmp/mnt/disc0_3/vsftp_users/test

    Dann befindet sich das Verzeichnis auf der Festplatte, sonst im RAM.

    Die einzige Ausnahme: wenn die HDD nicht nach /tmp/mnt/disc0_3 gemountet ist, sondern nach /tmp/mnt/vsftp_users/disc0_3

    Aber ein einfaches 'mount' zeigt dir wohin die HDD gemountet ist.
    Viel Spass
    Alle HowTo's, all howto's

    RT-N16 1.9.2.7-rtn-r3121, Samba, VSFTP, Lightthpd, PHP, Perl, MySQL, Serendipity, Aria2web, HDD 640GB
    RT-N66U, 16GB MicroSD/ 2 Partitions, 2,5" HDD 1TB, running with Merlin's FW and Entware, 16 Mbit A1,
    Netgear DGND 3700V2, QNAP TS119PII 4 TB, QNAP TS209 2 TB Raid1, Backup Synology DS107+ 1 TB, HP CP1515n

  6. #6
    Join Date
    Jan 2010
    Location
    Frankfurt
    Posts
    12
    Oh, das war wohl ein Verdreher von mir. Die Partition ist aber nach /tmp/mnt/disc0_3 gemountet. Danke für den Hinweis.

    A pros pos mounten: Ich habe eine weitere Partition unter /tmp/mnt/disc0_4. Wenn ich diese nun in /tmp mit einem Link "harddisk2" erreichen möchte und einen
    Code:
    ln -s /tmp/mnt/disc0_4 harddisk2
    erzeuge: wie erhalte ich denn den Link nach einem Neustart? In der fstab habe ich den Mountpoint übrigens schon angelegt. (...die Frage ist unter diesem Thema vielleicht nicht richtig aufgehoben...)

    Ich hätte auch noch ein paar Fragen zu vsftpd:
    Werden eigentlich alle Benutzer in der vsftpd.passwd gebraucht? Die vom System generierte Datei legt standardmäßig die Benutzer "ftp", "admin" und "nobody" an, wobei alle /sbin/nologin haben.
    Läuft vsftpd auch noch, wenn ich diese Benutzer lösche? Ich will wirklich nur mit meinen in vsftpd.passwd selbst angelegten Benutzern über ftp zugreifen.

    Und wenn ich nun in Zukunft einen neuen vsftpd-Benutzer anlege: wie bekomme ich denn das Passwort in die vsftpd.passwd? Durch umkopieren des Benutzereintrags aus der /etc/passwd in die /etc/vsftpd.passwd?

    Und meine letzte Frage: da ich "chroot" verwende kann ich mich wohl nicht entlang eines Links im Verzeichnisbaum bewegen, wenn ich per ftp zugreife?
    Es wäre der Anwendungsfall, dass ich einem Freund bspw. einen ftp-Benutzer und Passwort gebe, damit er sich, ausgehend von seinem persönlichen vsftp-Ordner über einen Link zu einem Ordner bewegt, wo er z. B. Fotos herunterladen kann, die unter /harddisk/fotos/feier1 abgelegt sind. Ein weiterer würde einen anderen Zugang bekommen und hätte bspw. von seinem ftp-Verzeichnis einen Link zu den Ordnern /harddisk/fotos/feier1 und /harddisk/fotos/urlaub2.

    Vielen Dank schonmal vorab für die Hilfe.
    Grüße
    hornau

  7. #7
    Join Date
    Jul 2007
    Location
    Austria
    Posts
    1,336
    Ein symbolischer Link bleibt auch nach einem Reboot erhalten.
    ln -s /tmp/mnt/disc0_4 /tmp/mnt/harddisk2

    Wenn du versuchst bereits in der Fstab zu mounten, müsste es bereits dort gehen: /dev/discs/disc0/part4 /tmp/harddisk2 ext3 rw,noatime 1 1
    (Achtung: eine Änderung in der fstab wird nur dauerhaft gespeichert mit flashfs save......)

    Ob die Benutzer gebraucht werden, kann ich nicht genau sagen. Ich würde aber tippen: ja, denn vsftpd schreibt z.Bspl. in den Logfile und muss daher auch bestimmte Rechte haben. Einfach probieren.

    Die neuen Benutzer kannst du entweder umkopieren oder generell in der vsftpd.conf als Passwortdatei die /etc/passwd anstatt vsftpd.passwd verwenden.

    Chroot: der Benutzer ist ja nur in seinem Käfig (chroot) eingesperrt, welche Dateien und Verzeichnise in seinem Käfig sind muss egal sein. Jedoch müssen die Rechte der gelinkten Verzeichnisse dem jeweiligen User erlauben, die Datei / Verzeichnisse auch zu lesen und zu schreiben oder nur zu lesen usw.
    Dazu sollte man sich in die Rechtevergabe und deren Möglichkeiten einlesen.
    Es ist viel einfacher als es aussieht - versteht man einmal das Prinzip, kann man viel damit machen.

    Dennoch rate ich dringend von vielen symLinks bei FTP-User ab, letztendlich hebelt es die Sicherheit teilweise aus und ausserdem wird alles sehr unübersichtlich (bei vielen Usern).

    Have fun
    Alle HowTo's, all howto's

    RT-N16 1.9.2.7-rtn-r3121, Samba, VSFTP, Lightthpd, PHP, Perl, MySQL, Serendipity, Aria2web, HDD 640GB
    RT-N66U, 16GB MicroSD/ 2 Partitions, 2,5" HDD 1TB, running with Merlin's FW and Entware, 16 Mbit A1,
    Netgear DGND 3700V2, QNAP TS119PII 4 TB, QNAP TS209 2 TB Raid1, Backup Synology DS107+ 1 TB, HP CP1515n

Similar Threads

  1. vsftpd -can somebody make a howto ???
    By lordu in forum WL-500gP Tutorials
    Replies: 4
    Last Post: 15-10-2008, 04:49
  2. vsftpd banner
    By thE_29 in forum WL-500gP Q&A
    Replies: 9
    Last Post: 13-10-2008, 09:11
  3. lighttp and php tutorial
    By theboy50 in forum WL-500g/WL-500gx Tutorials
    Replies: 29
    Last Post: 30-01-2008, 19:03
  4. VSFTPD user Home directory
    By renaudtwingo in forum WL-500g Q&A
    Replies: 3
    Last Post: 06-12-2006, 23:31

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •