Dateisystem mit Option "Standardberechtigung" sichern

2159
kayle

Ich bin neu zu verschmelzen. Ich habe die Sicherung mit dem folgenden Befehl montiert.

/home/bin/fusexmp /mnt/fuse -o default_permissions -o allow_other -o nonempty -o hard_remove -d 

Wenn ich mich jetzt als "test" Benutzer anmelde und versuchte, eine Datei namens "testfile" zu erstellen.

test@11540302:/registration> touch testfile touch: setting times of `testfile': Permission denied 

Strace ausgang:

uname() = 0 brk(0) = 0x8055000 brk(0x8076000) = 0x8076000 open("testfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK|O_LARGEFILE, 0666) = 3 dup2(3, 0) = 0 close(3) = 0 utimensat(0, NULL, NULL, 0) = -1 EACCES (Permission denied) close(0) = 0 

Die Erstellung von "testfile" ist jedoch erfolgreich mit dem Eigentümer als Root- Benutzer.

-rw-r--r-- 1 root trusted 0 Jan 19 13:51 testfile 

Ich kann verstehen, dass die Fuse-Anwendung auf Root-Ebene ausgeführt wird. Die Dateierstellung erfolgte mit dem Eigentümer als Root. Aus diesem Grund kann der Benutzer keine Operation für "Testdatei" ausführen.

Meine Frage:

1. Warum kann der Testbenutzer nicht die Berechtigung haben, auf die "Testdatei" zuzugreifen, da ich beim Mounten "allow_other" angegeben habe?

2. Nachdem Sie sich als "test" -Benutzer angemeldet und versucht haben, "testfile" zu erstellen, wird "root" als Eigentümer der Datei anstelle von "test" zugewiesen. Dies wird auch nach der Angabe von "default_permission" während des Einbaus beobachtet.

Bitte korrigieren Sie mich, wenn mein Verständnis falsch ist.

0
FUSE steht für "Dateisystem im Benutzerraum", also der Sammelname für Dateisysteme, die durch Benutzerraumprogramme dargestellt werden. Es gibt einige von ihnen, also kann man keine "Sicherung mounten", man muss immer ein bestimmtes Dateisystem verwenden (das über eine Sicherung implementiert wird). `/ mnt / fuse` ist kein Befehl. `/ mnt` und seine Unterverzeichnisse sind die üblichen Stellen zum Einhängen von Dateisystemen. Ich bin mir also nicht sicher, * was * Sie montiert haben (wenn überhaupt) und ich verstehe nicht, was Sie überhaupt erreichen wollen. dirkt vor 7 Jahren 0
Danke für deine Antwort. Ich habe die Sicherung mit dem root-Benutzer installiert. Wenn ich mich mit einem anderen Benutzer anmelde und eine Datei erstelle, wird diese mit dem Eigentümer als Root-Benutzer erstellt. Mit diesem Punkt überprüfen Sie bitte meine Fragen. Hoffe ich bin jetzt klar mit meiner Frage. kayle vor 7 Jahren 0

2 Antworten auf die Frage

1
dirkt

Ok, lassen Sie mich klarstellen: Sie haben keine Sicherung "gemountet", Sie haben das Beispielprogramm verwendet fusexmp, ein sehr einfaches Sicherungsprogramm, das alle Vorgänge an die standardmäßigen Linux-Bibliotheksaufrufe weitergibt. Dies ist nur ein Beispielprogramm und ein sehr langweiliges Programm.

Sie haben nicht gesagt, welcher Benutzer diese Mountoperation ausgeführt hat, aber ich gehe davon aus, dass Sie dies als getan haben root(weil sonst allow_othernichts funktioniert hätte und es nicht testfilemit dem Besitzer erstellt worden wäre root). Beachten Sie, dass Sie FUSE-Dateisysteme grundsätzlich als beliebigen Benutzer mounten können.

Wenn der testBenutzer ausgeführt wurde touch, öffnete er zuerst die Datei auf dem Sicherungssystem. Da Sie verwendet haben default_permissions, hat das System geprüft, ob der Benutzer testDateien in diesem bestimmten Verzeichnis erstellen kann (was anscheinend erfolgreich war), und dann fusexmpdie Datei erstellen lassen . Wie fusexmpso läuft root, wurde diese Datei erstellt, wie root.

Als nächstes touchwollte ich das Datum einstellen. Da Sie verwendet haben default_permissions, hat das System geprüft, ob der Benutzer testdas Datum für diese bestimmte Datei festlegen darf. Ist dies nicht der Fall, so bricht das System mit einem Erlaubnisfehler ab, unabhängig davon, ob das Programm fusexmptatsächlich das Datum einstellen könnte (was als root ausgeführt werden würde).

Ich bin mir immer noch nicht sicher, worum es bei dieser Übung geht: Sie haben ein Beispielprogramm auf ungewöhnliche Weise verwendet und sich dann über die Ergebnisse gewundert. Wenn Sie geben default_permissions, sollten Sie auch sicherstellen, dass Ihr Userspace-Programm Dateien mit dem richtigen Besitzer usw. erstellt (was fusexmpnicht der Fall ist).

Wenn Sie Sicherungsdateisysteme vom Standpunkt des Benutzers aus verstehen möchten, sollten Sie mit echten Beispielen wie sshfs experimentieren . Oder schreiben Sie Ihr eigenes Sicherungsprogramm und handhaben Sie Berechtigungen usw. selbst.

0
kayle

Ich habe die Lösung für dieses Problem gefunden.

Ausführliche Erklärung zu diesem Problem.

Lösung:

Wie @dirkt sagte, müssen wir selbst mit Berechtigungen umgehen.

Code, um die Anrufer-ID und die Anruferkennung zu erhalten:

fuse_get_context () -> uid;

fuse_get_context () -> gid;

Rufen Sie die Anruferbenutzer-ID und die Gruppen-ID ab und legen Sie den Besitz der Datei / des Verzeichnisses fest, während Sie die Sicherungs-APIs erstellen.

Es gibt immer Raum für Verbesserungen. Bitte korrigieren Sie mich, wenn ich nicht richtig bin.

Danke dirkt für deine Erklärung.

Die Sache ist, dass es möglicherweise erforderlich ist oder nicht, Berechtigungen * zu handhaben *. Es hängt völlig davon ab, was Sie als FUSE-Dateisystem darstellen wollen und zu welchem ​​Zweck. Wenn ich beispielsweise ein Diskimage für einen Retro-Computer habe, lassen Sie den Benutzer es als FUSE-Dateisystem mounten, und da das Diskimage nichts Äquivalent zu Linux-UIDs und GIDs hat, ersetzen Sie UID und GID des Benutzers wer montierte es. Es macht sicherlich keinen Sinn, der Demo `fusexmp` eine Berechtigungsbehandlung hinzuzufügen. dirkt vor 7 Jahren 0