Ext4 mit www-data und anderen Benutzern mounten

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,
    ich möchte gerne einen owncloud server mit meinem raspberry aufbauen. Hierzu habe ich eine Festplatte gekauft, die ich mit ext4 formatiert habe. Da diese aber nur laufen soll, wenn sie auch gebraucht wird, soll sie über ein Relais an und ausschaltbar sein. Für diesen Schaltvorgang habe ich ein Webinterface angedacht. Das Problem ist nun, dass ich die Festplatte nach dem Anschalten natürlich auch mounten muss. Wenn das ganze über das Webinterface passieren soll wird ist der Benutzer aber www-data. Ich habe diverse Einträge in der fstab versucht und es aber nicht hinbekommen. Es ist wichtig, dass nur der User, der sie mountet, sie auch wieder unmounten kann, da es noch einen VDR im Netzwerk gibt, der die gleiche Festplatte anschalten und mounten soll, wenn er hochfährt. Natürlich ist die Festplatte hierfür in verschiedene Partitionen aufgeteilt. Meine Frage ist nun wie ich es hinbekomme, dass andere User außer sudo und mir, wenn ich auf der Shell eingeloggt bin, diese verschiedenen Partitionen mounten können. Die fstab ist zur Zeit wieder auf eine Defaulteinstellung zurück gestellt.

    Code
    #Einträge für externe Festplatte
    UUID=4570520d-0bdf-4f5a-8c4f-ca2697e72995       /media/backups  ext4    user,defaults           0       0
    UUID=bd70df44-f799-47e5-8aa7-992d9042d39d       /media/owncloud ext4    user,defaults           0       0
    UUID=711d639d-1e82-46e4-b70a-b1779856e364       /media/musik    ext4    user,defaults           0       0
    UUID=0d62a16b-d473-4b32-9f53-2a3e2a376f95       /media/filme    ext4    user,defaults           0       0

    hier noch ein ls -l bei gemounteter Festplatte:

    Code
    /media $ ls -l
    insgesamt 16
    drwx------  3 www-data www-data 4096 Mai 29 18:51 backups
    drwx------  3 www-data www-data 4096 Mai 29 18:55 filme
    drwx------ 11 mpd      audio    4096 Mai 31 16:37 musik
    drwx------  6 www-data www-data 4096 Mai 31 12:57 owncloud



    und hier eins bei ungemounteter Festplatte

    Code
    /media $ls -l
    insgesamt 16
    drwxr-xr-x+ 2 www-data www-data 4096 Mai 31 15:29 backups
    drwxr-xr-x+ 2 www-data www-data 4096 Mai 29 19:20 filme
    drwxr-xr-x+ 2 www-data audio    4096 Mai 29 19:20 musik
    drwxrwx---+ 2 www-data www-data 4096 Mai 31 15:05 owncloud


    Zwischendurch war der mountpoint "musik" auch schon mal der gruppe www-data zugeordnet, was auch nichts geholfen hat. Letztlich muss der mountpoint filme auch vom vdr erreichbar sein und nicht vom webinterface. So weit bin ich aber noch nicht...

    Vielen Dank für Eure Hilfe:-)
    Gruß.
    Hempel

    P.s: Das Betriebsystem ist das aktuelle Raspbian (2013-02-09-wheezy-raspbian)

  • Hast du mal probiert, in der fstab vor der Option "user" zusätzlich noch die Option "noauto" anzugeben? Dann wir der Eintrag nicht beim booten direkt angewendet. Ich weiß nicht genau, wie sich das bei Raspbian verhält, aber wenn es so eingestellt ist, dass es externe Speichermedien sofort mountet, wenn sie angeschlossen (oder eingeschaltet) werden, müsste eigentlich, wenn ein fstab-Eintrag mit der noauto-Option für den Datenträger existiert, es automatisch an der dort angegebenen Stelle eingehängt werden.
    Was auch vielleicht noch interessant sein könnte, ist anstatt "user" als Option "users" zu verwenden, das heißt dann dass jeder Benutzer den Datenträger einhängen und jeder ihn auch wieder aushängen darf.
    Und wie machst du das mit dem Ausschalten der Platte? Hängst du sie vorher ordnungsgemäß aus, oder schaltest du sie einfach ab? Wenn du sie einfach abschaltest, solltest du noch die Option "sync" verwenden, dann wir der Pufferinhalt immer sofort auf den Datenträger geschrieben. Das ist zwar weniger Effizient, aber dafür kann es nicht passieren dass beim Ausschalten noch Daten im Puffer hängen, die dann verloren gehen.

  • Hallo Hempel,

    wie sieht's bei Euch unterm Sofa aus ;) ...


    ok - Spass beiseite ...

    Das klingt für mich nach einer Problemstellung die ich jetzt über eine zentrale Instanz lösen würde.

    Also so eine Art "Manager" dem ich sage "Platte an", "Filme mounten", ...
    Einfach um zu verhindern, dass der falsche Benutzer das falsche Verzeichnis zum richtigen Zeitpunkt aushängt :)


    cu,
    -ds-

  • @ blumenwiese
    Das die Festplatte beim Einschalten gemountet wird kann an sich nicht passieren, weil das Relais nicht an ist beim booten. Zum Thema aushängen: die Festplatte soll natürlich vor dem Auschalten des Relais ordnungsgemäß ausgehängt werden. Deshalb hatte ich die Option user genommen, weil dann die Partition "Filme" die nicht über das Webinterface, sondern vom VDR gemountet werden soll auch nur von ihm ausgehängt werden kann und andersrum mit den anderen Partitionen. Es soll dann eine If-Bedingung vor das ausschalten kommen, die abfragt, ob die noch eine Partition eingehängt ist und wenn ja wird nicht abgeschaltet.

    dreamshader
    Unterm Sofa ist alles fresh:cool:
    Wie realisiere ich so einen Manager? Was ich bis jetzt gemacht hatte war ein bashscript, was in einem Ordner von root liegt und auch root gehört, was über das PHP script des Webinterface ausgeführt werden kann. Hier waren dann die mount befehle, natürlich kann hier dann auch eine eventuelle if-Abfrage stehen. www-data hat dann natürlich den entsprechenden Eintrag in der etc/sudoers. Da ich das aber irgendwie etwas unsicher fand, dachte ich, dass man es auch irgendwie hinbekommen kann, dass www-data (und eben auch der VDR) selbst die Dateisysteme mounten dürfen...

    Viele Grüße:-)

  • Hallo Hempel,

    nun ... da was über sudoers machen geht natürlich.
    Das Problem sehe ich eher darin, dass Du es imho nicht geregelt bekommen wirst, dass nur der Benutzer, der auch ein Verzeichnis gemountet hat, es wieder unmounten kann.
    Zudem kann Dir Dein "zweiter" VDR die Platte durch ausschalten unterm Hintern wegziehen - und das wird er nach Murphey tun un dzwar genau dann, wenn es wirklich weh tut.

    Das kannst Du z.B. über einen shell-script machen, der sich diverse Informationen in Dateien zwischenspeichert und wieder ausliest.
    Das Ganze wäre dann auch vom Web her ausführbar.
    Oder als C-Programm oder in Python oder Perl oder PHP oder ... keine Ahnung.

    cu,
    -ds-

  • Aber letztlich muss ich doch dieses Script, was ich in was auch immer für einer Sprache schreibe wieder mit sudo rechten ausführen, oder stehe ich auf dem Schlauch?


  • Das Problem sehe ich eher darin, dass Du es imho nicht geregelt bekommen wirst, dass nur der Benutzer, der auch ein Verzeichnis gemountet hat, es wieder unmounten kann.


    Bewirkt die Option "user" in der fstab nicht genau dass normale User die Partition einhängen und nur der, der sie eingehängt hat, wieder aushängen kann? Im Gegensatz zu "users" wo sie jeder wieder aushängen kann und "nouser" wo nur der root was machen kann?


  • Bewirkt die Option "user" in der fstab nicht genau dass normale User die Partition einhängen und nur der, der sie eingehängt hat, wieder aushängen kann? Im Gegensatz zu "users" wo sie jeder wieder aushängen kann und "nouser" wo nur der root was machen kann?

    Hi,
    da hast Du recht - und ich gebe gerne zu, dass ich das nicht wusste. Wieder ein Vorteil dieses Forums, dass man immer was dazu lernt.
    Und diese Option ist auch ganz hilfreich, ändert aber m.E. zunächst nichts an der konkurrierenden Problematik.

    Hempel:
    Ja, das ist wohl wahr, dass der Script dann sozusagen als root laufen sollte.
    Zu dem Thema hat allerdings boandlkramer in diesem Thread eine interessante Methode gepostet, die ich so auch nicht kannte.
    Du könntest zwar, wie von blumenwiese angeregt, die "user" Option verwenden, aber dann wirst Du die "noauto" Geschichte ebenfalls mit einbringen müssen und zudem sicherstellen, dass niemand anderes als der "User" Deines "Managers" die einzelnen Partitionen einhängt.
    Ich hab' jetzt auf die Schnelle keine Ahnung, was da sonst noch schieflaufen kann - aber sei versichert: es wird eintreten, und zwar dann, wenn Du es am wenigsten brauchen kannst ;) ...

    Diesen Manager-Script bzw. das Manager-Programm würde ich mir in etwa so vorstellen, dass es beim Start erstmal nachsieht, ob die Partitionen gemountet sind, ggf. einen Syslog-Eintrag macht, die Partionen erst mal aushängt und die Platte abschaltet.
    Wenn Du den Start z.B. in der /etc/rc.local einträgst, wird der Script bzw. das Programm erst zum Abschluss des Bootvorgangs ausgeführt. Da kannst Du das problemlos machen, denke ich.

    Ab dann funktioniert alles nach einer Art Ticket-System. "Platte an" kommt in einen Eingangskorb, nachdem Du geprüft hast, ob der Benutzer zum Einschalten berechtigt ist.
    "Platte aus" wird auch erst auf Berechtigung geprüft, der zugehörige "Platte an" im Eingangskorb gesucht und gelöscht. Ist dieser Eingangskorb leer, schaltest Du die Platte physikalisch aus, nachdem Du alle Partitionen ausgehängt hast.

    Ein anderer Korb ist für jeden einzelnen "mount" und funktioniert nach demselben Schema.
    Du kannst auch erst abschalten, wenn alle umounts durchgeführt sind ... oder wie auch immer.

    So, ich denke das war zunächst mal ne Menge Input für einen Samstag Morgen ...

    So long,
    -ds-

  • Zitat


    Bewirkt die Option "user" in der fstab nicht genau dass normale User die Partition einhängen und nur der, der sie eingehängt hat, wieder aushängen kann? Im Gegensatz zu "users" wo sie jeder wieder aushängen kann und "nouser" wo nur der root was machen kann?


    Genau das bewirkt die Option User, leider habe ich es aber nicht hinbekommen, dass www-data irgendwas einhängen kann, wenn ich diese Option verwende. Ich bekomme immer nur die Fehlermeldung, "mount: only root can do that!" Zwischendurch hatte ich es schon einmal hinbekommen, dass der user pi mit dieser Option etwas einhängen durfte. Das hilft ja aber nicht.

    @dreamhader

    Zitat


    Zu dem Thema hat allerdings boandlkramer in diesem Thread eine interessante Methode gepostet, die ich so auch nicht kannte.


    Das war die Variante, die ich vorher gewählt hatte, mit Eintrag in die Sudoers, wo nur das script in einem bestimmten Ordner ausgeführt werden kann. Diese Variante fand ich aber wegen der (zwar nur begrenzten, aber immer noch vorhandenen) Vergabe von Sudorechten eher nicht so gut.
    Aus diesem Grund hatte ich weiter gegoogelt und rausgefunden, dass mit "user" in der fstab user die Partitionen grundsätzlich einhängen dürfen, und eben nur der User, der sie eingehängt hat sie auch wieder aushängen kann.
    In diesem Fall müsste nur noch ein lsof /dev/die_jeweilige_partition überprüft werden, ob jemand auf die Platte zugreift. In diesem Fall würde sie nicht ausgehängt und abgeschaltet werden. Sonst ja. Wenn nur der Benutzer die Platte aushängen darf, der sie eingehängt hat, dann heißt das ja auch, dass man mit dem mount Befehl vor dem Abschalten noch einmal gucken kann, ob irgendwas noch eingehängt ist und in diesem Fall halt nicht abschalten.

    Einmal editiert, zuletzt von Hempel (2. Juni 2013 um 08:45)

  • Hi,

    klar, wenn Du der Meinung bist dass das ausreicht - klar, sollte so funktionieren.
    Das "List open files" ist allerdings unter meinem wheezy nicht vorhanden. Aber vielleicht gibts ja da ein Zusatzpaket.
    Ob Du mit fuser weiterkommst musst Du mal ausprobieren.

    cu,
    -ds-

  • Ja, also lsof gab es bei mir, habe ich installiert und ausprobiert (nur kurz manuell im Terminal). Das Programm fuser wäre wohl auch eine Möglichkeit. Beide Programme brauchen aber ja auch Sudo-Rechte, weshalb es wohl gar keine andere Lösung als die mit dem Eintrag in die Sudoers gibt. Trotzdem würde mich immer noch interessieren, warum ich mit www-data die Partitionen nicht mounten kann, auch wenn "user" oder "users" in die fstab eingetragen ist.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!