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
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:
Quote:
200 PORT command successful. Consider using PASV.
425 Failed to establish connection.
winscp bricht auch ab mit:
Quote:
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:
Quote:
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:
Quote:
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:
Quote:
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