mount -o loop für Datei auf FUSE-Dateisystem



  • Ich möchte eine Datei mounten, die ein ext4-Dateisystem enthält und in einem FUSE-Dateisystem liegt. Bei diesem Versuch meldet mount aber immer file: "Permission denied". Der Mode der Datei ist 0777 und das FUSE-Dateisystem implementiert getattr, access, readdir, open, release, statfs, read und write.
    Was muss ich noch machen, damit das Mounten klappt? Das "Permission denied"-Problem kenne ich auch von anderen FUSE-Dateisystemen, etwa wenn ich eine ISO-Datei auf einem SMB share mounten möchte, aber irgendwie muss das ja auch mit FUSE gehen.

    Kann ich mir vielleicht irgendwie anzeigen lassen, was für Dateisystem-Funktionen mount so aufruft und welche davon fehlschlagen?



  • Es funktioniert anscheinend, wenn ich das FUSE-Programm als root starte.
    Warum ist das so? Ich kann ja auch sonst z.B. ein Image mounten, von dem der Besitzer nicht root ist.



  • ;FS schrieb:

    Es funktioniert anscheinend, wenn ich das FUSE-Programm als root starte.
    Warum ist das so? Ich kann ja auch sonst z.B. ein Image mounten, von dem der Besitzer nicht root ist.

    FUSE-Dateisysteme sind im Userspace implementiert. Deswegen ist es verboten, dass root darauf Zugriff hat, außer root selber mountet das FUSE-Dateisystem mit entsprechenden Parametern (allow_root oder allow_other).

    Das ist aus Sicherheitsgründen so eingestellt. Wenn es keinen wirklich guten Grund gibt, würde ich das nicht umgehen. Ein großes Problem ist nämlich, dass der root-User von einem gewöhnlichen User beliebig lange blockiert werden kann, wenn er auf ein FUSE-Dateisystem Zugriff hätte.

    Das läuft zum Beispiel so ab:

    1. root greift auf ein FUSE-Dateisystem zu (öffnet eine Datei, macht ein directory listing, was auch immer), macht für diesen Zweck einen ganz gewöhnlichen syscall.
    2. Der syscall aus Schritt 1 wird weitergeleitet an den FUSE-Code, der im Userspace liegt und unter User-Account X läuft.
    3. User X kann nun einfach den syscall nicht zurückgehen lassen.
    4. Das Programm, das in Schritt 1 als User root den syscall gemacht hat, hängt nun in einem syscall fest und ist damit nicht killbar, auch nicht für root. Denial of Service erreicht.

    Deswegen ist es in der Regel eine schlechte Idee, root auf ein fuse-Dateisystem Zugriff zu gewähren.



  • Ja, das ist durchaus einleuchtend. Danke für die Erklärung.


Anmelden zum Antworten