[HOWTO] vsFTP und Samba mit Benutzerrechten für FAT32-USB-Platte

johnnyEee

Neuer User
Mitglied seit
20 Jan 2009
Beiträge
94
Punkte für Reaktionen
0
Punkte
0
Motivation
Ich habe eine USB-Festplatte an meiner 7270 hängen, auf die mehrere Personen über FTP und das Windows-Netzwerk zugreifen. Für jeden Benutzer soll ein zugangsgeschützter persönlicher Ordner eingerichtet werden, darüberhinaus sollen die angemeldeten Benutzer einen gemeinsamen Ordner haben und es soll ein öffentlicher Ordner für Besucher zur Verfügung stehen.
Die Platte ist und bleibt FAT32-formatiert, da sie oft kurzfristig abgehängt und an Windows-Rechnern betrieben wird. Befehle wie chmod/chown stehen somit nicht zur Rechteverwaltung der Benutzer und Ordner zur Verfügung.

Ich habe mich die letzten zwei Tage jetzt damit beschäftigt (war am Anfang ein ziemlicher Anfänger auf dem Gebiet) und hoffe ich kann anderen die Einrichtungszeit mit diesem HowTo etwas verkürzen.

Ziel
Hier eine Übersicht über die gewünschten Ordner mit Zugangsbeschränkungen für zwei reguläre Nutzer (user1, user2) und den Gast-Account (gast). Diese werden im Folgenden in FTP und Samba eingerichtet.
  • Ordner -> Zugangsberechtigte Benutzer
  • user1 -> user1
  • user2 -> user2
  • shared -> user1, user2
  • public -> user1, user2, gast
Mein Gefühl von Sicherheitsbeschränkungen sagt mir dabei, dass über FTP auf jeden Fall Zugangsdaten benötigt werden (auch für den Gast-LogIn), über Samba braucht der Gast keinen LogIn. Das basiert einfach darauf, dass wer in mein Haus/LAN kommt, auch auf meine (öffentlichen) Daten Zugriff haben kann. Daher wird auch kein gast-Samba-Account eingerichtet. Andere Realisierungen sind aber natürlich durch leichte Abwandlung in den Einstellungen möglich.

Voraussetzung
Meine Anleitung geht von einem frisch installierten Freetz aus.
Pakete
  • Samba (Filesharing + Nameservices)
  • Vsftp
Patches
  • USB storage names
  • Automount filsystems
  • Execute autorun.sh
Die USB-Platte ist als uStor01 in das Dateisystem eingebunden (sollte vollautomatisch geschehen).

Getestet habe ich alles unter folgender Umgebung:
  • Fritz!Box 7270 16MB
  • freetz 54.04.67freetz-devel-3107
  • Samba 3.0.24
  • Vsftpd 2.0.7
  • Mozilla Firefox 3.0.6
  • Windows Vista Business 32bit

Hinweis: Die stable-Versionen von Freetz haben noch Probleme, Benutzer dauerhaft zu speichern. Diese Anleitung bezieht sich explizit auf die trunk-Version (Entwicklerversion). Es ist aber davon auszugehen, dass die Probleme in der nahen Zukunft in den stable-Versionen verschwinden.

Vorgehen
Order-Struktur auf der USB-Platte wird vorbereitet.
Dazu die folgenden Ordner im Hauptverzeichnis der Platte erstellen:
Code:
user1        #Heimverzeichnis user1
user1/shared
user1/public
user2        #Heimverzeichnis user2
user2/shared
user2/public
shared       #gemeinsamer Ornder user1, user2
public       #Heimverzeichnis gast

Die AVM-Lösungen von FTP und Samba werden abgeschaltet.
fritz.box -> Einstellungen -> Erweiterte Einstellungen -> USB-Geräte -> USB-Speicher
USB-Speicher FTP-Zugriff aktivieren -> Häkchen weg
USB-Netzwerkspeicher aktivieren -> Häkchen weg

Diensteinstellungen werden im Freetz-Menü eingestellt.
FTP
Pakete -> vsftpd
Starttyp -> automatisch

-> Zugriff
Code:
[ ]Anonymes FTP
[X]Lokale Benutzer
[X]chroot jail
[ ]Erlaube root login
[ ]Erlaube ftpuser login
So ist sichergestellt, dass nur die genannten Nutzer und diese nur auf ihr Verzeichnis zugreifen können.

-> Zusätzliche Konfigurationsoptionen (für Experten)
Code:
user_config_dir=/var/media/ftp/uStor01/vsftp_user_conf
Später werden wir die Schreibrechte für die Benutzer getrennt festlegen.
->Übernehmen<-
Saving settings...done.
Saving vsftpd.cfg...done.

Writing /var/flash/freetz...done.
10752 bytes written.

Samba
Pakete -> Samba

-> Starttyp -> automatisch
-> Netzwerkschnittstelle, -> Name und -> Arbeitsgruppe stellt ihr nach euren Gegebenheiten ein.
->Übernehmen<-
Saving settings...done.
Saving samba.cfg...done.

Writing /var/flash/freetz...done.
10752 bytes written.

Einstellungen -> Samba: Erweitert
Hier werden die Samba-Freigaben werden eingerichtet. Die Befehle sollten ziemlich selbsterklärend sein und sind leicht für eure Bedürfnisse anzupassen.
user1 und user3 bekommen exklusiven Zugriff auf ihre Heim-Verzeichnisse, der public-Ordner kann ohne Zugangsdaten read-only erreicht werden.
Code:
[user1]
 comment = user1 privat
 path = /var/media/ftp/uStor01/user1
 write cache size = 65536
 read only = no
 guest ok = no
 valid users = user1
[user2]
 comment = user2 privat
 path = /var/media/ftp/uStor01/user2
 write cache size = 65536
 read only = no
 guest ok = no
 valid users = user2
[public]
 comment = public
 path = /var/media/ftp/uStor01/public
 write cache size = 65536
 read only = yes
 guest ok = yes
->Übernehmen<-
Saving sharesx...done.
Writing /var/flash/freetz...done.
10752 bytes written.

TelNet-Zugang wird gestartet.
Dienste -> telnetd -> start

Nun geht es auf der Kommandozeile weiter.
Die lokalen Benutzer werden eingerichtet.
Jeder Benutzer erhält dabei ein explizites Heim-Verzeichnis welches von vsFTP automatisch übernommen wird.
Code:
adduser -h /var/media/ftp/uStor01/user1 user1
adduser -h /var/media/ftp/uStor01/user2 user2
adduser -h /var/media/ftp/uStor01/public gast

/var/media/ftp/uStor01/ # adduser -h /var/media/ftp/uStor01/user1/ user1
adduser: /var/media/ftp/uStor01/user1/: File exists
Changing password for user1
New password:
Retype password:
Password for user1 changed by root
/var/media/ftp/uStor01/ # adduser -h /var/media/ftp/uStor01/user2/ user2
adduser: /var/media/ftp/uStor01/user2/: File exists
Changing password for user2
New password:
Retype password:
Password for user2 changed by root
/var/media/ftp/uStor01/ # adduser -h /var/media/ftp/uStor01/public/ gast
adduser: /var/media/ftp/uStor01/public/: File exists
Changing password for gast
New password:
Retype password:
Password for gast changed by root
Die neuen Zugangsdaten werden erstmal gespeichert.
Code:
modsave all
/var/media/ftp/uStor01/technik # modsave all
Saving users, groups and passwords...done.
Saving config...done.
Writing /var/flash/freetz...done.
10752 bytes written.

Die Verzeichnisse shared und public werden in die jeweiligen Heim-Verzeichnisse der Benutzer eingebunden.
Dies soll immer sichergestellt werden, wenn die USB-Platte an die Fritz!Box angeschlossen wird. Dazu wird die Datei autorun.sh im Hauptverzeichnis der USB-Platte erstellt. Dass nach ordnungsgemäßem Abhängen der Platte die mounts auch wieder entfernt werden schreiben wir unmount-Befehle in die autoend.sh.

/var/media/ftp/uStor01/autorun.sh
Code:
mount -o bind /var/media/ftp/uStor01/shared /var/media/ftp/uStor01/user1/shared
mount -o bind /var/media/ftp/uStor01/shared /var/media/ftp/uStor01/user2/shared

mount -o bind /var/media/ftp/uStor01/public /var/media/ftp/uStor01/user1/public
mount -o bind /var/media/ftp/uStor01/public /var/media/ftp/uStor01/user2/public
/var/media/ftp/uStor01/autoend.sh
Code:
umount /var/media/ftp/uStor01/user1/shared
umount /var/media/ftp/uStor01/user2/shared

umount /var/media/ftp/uStor01/user1/public
umount /var/media/ftp/uStor01/user2/public

Ein kleiner Hinweis, falls ihr doch eine Festplatte mit einem Linux-Dateisystem verwendet: Die autorun- und autoend-Dateien benötigen Ausführungsrechte. Für FAT32/NTFS-Platten ist dieser Schritt nicht notwendig.
Code:
chmod +x /var/media/ftp/uStor01/autorun.sh
chmod +x /var/media/ftp/uStor01/autoend.sh

FTP-Schreibrechte für die Benutzer werden gesetzt.
Dazu erhält jeder Benutzer eine Datei mit seinem Dateinamen im Ordner /var/media/ftp/uStor01/vsftp_user_conf/, die festlegt, ob er schreibrechte hat oder nicht.
/var/media/ftp/uStor01/vsftp_user_conf/user1
Code:
write_enable=yes
/var/media/ftp/uStor01/vsftp_user_conf/user2
Code:
write_enable=yes
/var/media/ftp/uStor01/vsftp_user_conf/gast
Code:
write_enable=no

Die Samba-Benutzerkonten werden eingerichtet.
Hierzu schauen wir uns die aktuellen Benutzerkonten an.
/var/media/ftp/uStor01 # cat /etc/passwd
root:x:0:0:root:/mod/root:/bin/sh
ftpuser:x:1:1:ftp user:/var/media/ftp:/bin/sh
ftp:x:2:1:FTP account:/home/ftp:/bin/sh
user1:x:1000:1000:Linux User,,,:/var/media/ftp/uStor01/user1/:/bin/sh
user2:x:1001:1001:Linux User,,,:/var/media/ftp/uStor01/user2/:/bin/sh
gast:x:1002:1002:Linux User,,,:/var/media/ftp/uStor01/gast/:/bin/sh
Die Benutzer-IDs (1000, 1001, 1002) müssen wir uns merken. Sie werden mit den neue Samba-Passwörtern in eine Klartext-Datei eingetragen. (Die Datei wird in /var/tmp/ erstellt und überlebt so einen Reboot der Box nicht.)

/var/tmp/smbpasswd.cleartext
Code:
user1:1000:hierDasPasswortVonUser1:[U          ]:LCT-00000001:
user2:1001:hierDasPasswortVonUser2:[U          ]:LCT-00000001:
Anschließend werden sie in verschlüsselte Passwörter übersetzt.
/var/tmp # smbpasswd
2 samba users written to /mod/etc/samba/smbpasswd
Das Ergebnis sieht so aus:
/var/tmp # cat /mod/etc/samba/smbpasswd
user1:1000:A5936F0BD09E69FA21EC3E1B87A3D642:ED8F7E6D748305AE7D4573945B6BA8D6:[U ]:LCT-00000001:
user2:1001:65F97D3292B742B321EC3E1B87A3D642:3B7094A62035F2190DAF2E6274235EC2:[U ]:LCT-00000001:

Die neue Samba-Passwort-Datei wird in die Fritz!Box gespeichert.
Code:
cp /mod/etc/samba/smbpasswd /var/tmp/flash
modsave all
/var/tmp # cp /mod/etc/samba/smbpasswd /var/tmp/flash
/var/tmp # modsave all
Saving users, groups and passwords...done.
Saving config...done.
Writing /var/flash/freetz...done.
11264 bytes written.
Damit diese bei jedem Neustart geladen wird, müssen noch einen Eintrag in die rc.custom machen. Dazu temporär die Sicherheitskonfiguration umstellen.
/var/tmp # echo 0 > /tmp/flash/security
Nun geht es zurück ins Freetz-WebIF
Einstellungen -> rc.custom
Code:
cat /var/tmp/flash/smbpasswd > /mod/etc/samba/smbpasswd
->Übernehmen<-
Saving rc_custom...done.
Writing /var/flash/freetz...done.
13824 bytes written.

Das wars!
Nach einem Neustart der Box sind die Ordner nun per FTP (ftp://fritz.box) und Samba (\\fritz.box) mit den gegebenen Zugangsdaten erreichbar.

Schlussbemerkungen
Falls jemand an irgendeiner Stelle noch einen Trick hat, wie das ganze schneller/einfacher/besser geht, immer her mit euren Tipps.
Was mich persönlich noch interessieren würde:
  • Read-Only Bind-Mounts, so dass auch im FTP ordnerspezifische Schreibrechte gesetzt werden können. Scheint aber unter FAT32 mit aktuellem Kernel (noch) nicht zu funktionieren.

Fehler werden natürlich auch korrigiert, falls sich etwas eingeschlichen hat. Nur Kommentare wie "Linux-Filesystem benutzen" könnt ihr euch bitte ersparen... Es wird genug Umgebungen geben wo das nicht zweckmäßig oder eben nicht gewünscht ist.

Danke
Ein herzliches Dankeschön geht an die IPPF-User matze1985 und Darkyputz, die mir im Forum geholfen haben, was den Samba-Teil angeht basiert das HowTo auf der Anleitung von Albino2004 - auch dafür ein dickes Danke!
 
Zuletzt bearbeitet:
Code:
mount -o bind /var/media/ftp/uStor01/shared /var/media/ftp/uStor01/user1/shared
mount -o bind /var/media/ftp/uStor01/shared /var/media/ftp/uStor01/user2/shared

mount -o bind /var/media/ftp/uStor01/public /var/media/ftp/uStor01/user1/public
mount -o bind /var/media/ftp/uStor01/public /var/media/ftp/uStor01/user2/public

Ein Tip für den Fall, daß es mal mehr Benutzer werden sollten:
Code:
USERS="user1 user2"
DIRS="shared public"

for user in $USERS; do
  for dir in $DIRS; do
    mount -o bind /var/media/ftp/uStor01/$dir /var/media/ftp/uStor01/$user/$dir
  done
done
 
Da das Wiki wieder online ist, wie wäre es damit, das auch dort einzupflegen? Da ist es gesammelter, denn hier verschwindet der Thread irgendwann in den untiefen des Forum ;)
 
Ein Tip für den Fall, daß es mal mehr Benutzer werden sollten:
danke für den hinweis. so kann man auch einfach "benutzergruppen" anlegen. ich werd drüber nachdenken.

Da das Wiki wieder online ist, wie wäre es damit, das auch dort einzupflegen? Da ist es gesammelter, denn hier verschwindet der Thread irgendwann in den untiefen des Forum ;)
nach ein paar tagen diskussion hier im forum werd ichs übertragen. ich grübel nur noch bei welchem artikel es rein soll. da müsste ich FTP und Samba fast wieder trennen... was ja aber nich wirklich arbeit wäre.
 
eigentlich ist das auch etwas doppelt gemoppelt. Es sollte ein
Code:
modsave all
reichen
 
ich habs nur so eingegeben wie ich's hier irgendwo mal gelernt hab ;-) also is
Code:
modsave all
die offizielle lösung?
 
noch ne frage: meint ihr ich soll eine autoend.sh einbauen, die die mount-binds wieder entfernt?
 
nach ein paar tagen diskussion hier im forum werd ichs übertragen. ich grübel nur noch bei welchem artikel es rein soll. da müsste ich FTP und Samba fast wieder trennen... was ja aber nich wirklich arbeit wäre.

Ein Wiki lebt davon, dass User die Sachen so lang ändern, bis sie passen ;)
 
ich habs nur so eingegeben wie ich's hier irgendwo mal gelernt hab ;-) also is
Code:
modsave all
die offizielle lösung?
Code:
modsave ?
Usage: /usr/bin/modsave [flash|all]
"modsave" ist das gleich wie "modsave all", dort werden user, groupen und die config in die config-verzeichnisse unter /var/tmp/flash geschrieben und dann anschießend ins flash gespeichert,
"modsave flash" speichert lediglich alles was aktuell im ordner /var/tmp/flash ist ins flash auf der Box, also der letzte Schritt von "modsave all".
Ich schreibe immer "modsave all" anstat modsave, da es eindeutiger ist. Es reicht also ein einziges
Code:
modsave all
, alles andere ist doppelt gemoppelt.



noch ne frage: meint ihr ich soll eine autoend.sh einbauen, die die mount-binds wieder entfernt?

wäre wohl die elegante Art, damit die nicht irgendwann im System rumhängen, was sie aber tun, falls du die Platt nicht ordnungsgemäßig aus dem System löst.
 
gut, danke. hab die vorschläge von euch mal eingebaut.
 
Frage: Was kostet es dich, das zu testen oder in einem Forum zu suchen, dass für den vsftpd da ist?
Oder aber: Hast du vielleicht einmal gelesen, was dieser Thread eigentlich tut? Denn er ist _eigentlich_ dazu da, ein HOWTO zu verbessern. Gehört deine Frage zum Thema? Hast du den Thread gelesen?
 
ich weiß nich genau worauf sich dein beitrag bezieht, aber ich hab die vsftp-sachen letzte woche auch ins wiki eingetragen.

*klick*
 
Hallo,
ich habe das Problem, mit mehreren Personen im Haus. Ich habe jetz angefangen wie hier beschrieben.

Doch ab hier komm ich nicht mehr weiter:

Nun geht es auf der Kommandozeile weiter.
Die lokalen Benutzer werden eingerichtet.
Jeder Benutzer erhält dabei ein explizites Heim-Verzeichnis welches von vsFTP automatisch übernommen wird.
Code:

adduser -h /var/media/ftp/uStor01/user1 user1
adduser -h /var/media/ftp/uStor01/user2 user2
adduser -h /var/media/ftp/uStor01/public gast

Zitat:
/var/media/ftp/uStor01/ # adduser -h /var/media/ftp/uStor01/user1/ user1
adduser: /var/media/ftp/uStor01/user1/: File exists
Changing password for user1
New password:
Retype password:
Password for user1 changed by root
/var/media/ftp/uStor01/ # adduser -h /var/media/ftp/uStor01/user2/ user2
adduser: /var/media/ftp/uStor01/user2/: File exists
Changing password for user2
New password:
Retype password:
Password for user2 changed by root
/var/media/ftp/uStor01/ # adduser -h /var/media/ftp/uStor01/public/ gast
adduser: /var/media/ftp/uStor01/public/: File exists
Changing password for gast
New password:
Retype password:
Password for gast changed by root

Soll ich das dann im cmd eingeben(habe windows vista). oder was soll ich tun? wenn ich adduser -h /var/media/ftp/uStor01/user1 user1 im cmd eingeb kommt: der befehl kann nicht gefunden werden. Kann mir jmd auf die Sprünge helfen? Habe eine FB 7270.
Gruß
 
genau, du musst dich über telnet mit der fritzbox verbinden, dich anmelden und dort auf der kommandozeile die befehle eingeben. alternativ wäre auch die in freetz eingebaute rudi-shell möglich, wenn auch nicht so komfortabel.
 
sorry noch mal für ganz blöde: wie komm ich mit telnet auf die box??? brauch ich ein programm
 
Auf der Box telnet aktivieren und auf dem PC könntest Du z. B. Putty verwenden.
 
okey danke erstmal. Putty habe ich jetzt installiert und gestartet

soo jetz kommt login incorecct. wenn ich das passwort tippen will, werden die zeichen gar nicht angezeigt?!

so wies im Anhang gezeigt wird
 

Anhänge

  • 14.JPG
    14.JPG
    27.2 KB · Aufrufe: 42
dass die passwort-zeichen nicht angezeigt werden ist normal bei linux. der benutzername ist root.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.