Wie kann ich einen Ordner schreibgeschützt anzeigen?

12

Ich möchte einen Platz im Dateisystem haben, der eine schreibgeschützte "Ansicht" eines anderen Ordners anzeigt, auf den ich Lese- / Schreibzugriff habe.

Ich stelle mir etwas vor, das sich ähnlich verhält wie eine FTP-Dropbox, in die Dateien kopiert, aber nicht ausgelesen werden können, z.

$ ls read-write-view/ write-only-view/
read-write-view/:
a  b  c

write-only-view/:

$ cp d write-only-view/
$ ls read-write-view/ write-only-view/
read-write-view/:
a  b  c  d

write-only-view/:

Es ist wichtig, dass dies wie im Beispiel funktioniert - der Inhalt ist beim Zugriff über weiterhin sichtbar read-write-view/, und beide "Ansichten" sind für einen einzelnen Benutzer funktionsfähig.

Wie kann ich so etwas einrichten? Vielleicht eine clevere Anordnung symbolischer Links? Oder eine ungewöhnliche Konfiguration eines Bind Mount?

ændrük
quelle

Antworten:

2

Ich habe vor ein paar Jahren dieselbe Frage für Schüler-Dropboxen auf der Samba-Mailingliste gestellt (http://lists.samba.org/archive/samba/2008-September/143610.html), und die Antwort hat bei uns funktioniert. Sie benötigen erweiterte ACL-Attribute in Ihrem Dateisystem (aus dem ACL-Paket). Hier ist die Antwort von Jeremy Allison ...

Ok, das Problem ist, dass die Schüler das enthaltene Verzeichnis lesen können müssen, um neue Dateien dort ziehen und ablegen zu können. Der Grund dafür ist, dass Samba in der Lage sein muss, das Verzeichnis in ihrem Namen zu scannen, um nach Groß- und Kleinschreibung zu suchen.

Solange es Ihnen nichts ausmacht, den Schülern zu erlauben, die Namen der anderen Dateien zu sehen, können Sie eine DropBox einrichten, damit die Schüler in sie (und ihre eigenen Dateien) schreiben, andere Dateien jedoch nicht bearbeiten oder anzeigen können.

Zunächst möchten Sie sicherstellen, dass im DropBox-Verzeichnis erstellte Dateien nicht der primären Gruppe des Schülers gehören, sondern dem Gruppenbesitzer der DropBox-Direcotry. So :

chgrp Lehrer DropBox

um es der Lehrergruppe zu machen. Setzen Sie dann das setgid-Bit im DropBox-Verzeichnis, um sicherzustellen, dass die dort erstellten Dateien eine eigene Gruppe von Lehrern haben.

chmod g + s DropBox

Stellen Sie dann sicher, dass eine Datei in DropBox nur vom Eigentümer der Datei, vom Eigentümer des Verzeichnisses oder vom Stammverzeichnis umbenannt oder gelöscht werden kann (dieselben Berechtigungen wie / tmp).

chmod + t DropBox

Erlauben Sie den Schülern dann, durch Hinzufügen einer ACL in das Verzeichnis zu schreiben

setfacl -mg: Studenten: rwx DropBox

Solange die Standardeinstellung acl so eingestellt ist, dass "andere" keine Berechtigungen haben, gehören Dateien, die von einem Schüler in dieses Verzeichnis geschrieben wurden, sich selbst, haben jedoch eine eigene Gruppe von "Lehrern", und die Schüler können nicht alle lesen andere Dateien.

Wenn Sie dafür sorgen müssen, dass die Dateien dem Eigentümer des Verzeichnisses gehören, nicht den Schülern, die sie erstellt haben, müssen Sie wie oben beschrieben eine separate Freigabe einrichten, aber dann den Parameter auf Freigabeebene hinzufügen:

Eigentümer erben = ja

Dies führt dazu, dass Dateien, die in den Verzeichnissen dieser Freigabe erstellt wurden, dem enthaltenen Verzeichnis gehören und nicht dem erstellenden Eigentümer.

user55604
quelle
1

Sie können dies teilweise erreichen, indem Sie die Berechtigungen für den Ordner so festlegen, dass die Zielbenutzer Schreibzugriff auf den Ordner haben, jedoch keinen Lesezugriff.

Sie können beispielsweise Folgendes tun, damit jeder in einen Ordner schreiben, dessen Inhalt jedoch nicht auflisten kann:

chmod o=wx folder

Oder um nur einer bestimmten Benutzergruppe diesen Zugriff zu gewähren:

chgrp groupname folder
chmod o=,g=wx folder

Jetzt können diese Benutzer den Inhalt des Ordners nicht mehr auflisten, sondern Dateien in den Ordner legen:

$ ls folder
ls: cannot open directory folder: Permission denied
$ touch folder/filename

Dies macht nicht alles, was Sie wollen, denn wenn Benutzer weiterhin auf Dateien im Ordner zugreifen können, wenn sie den Namen erraten können. Sie können dieses Risiko durch einen Cron-Job minimieren, bei dem Dateien regelmäßig aus dem Dropbox-Ordner an einen Speicherort verschoben werden, auf den andere Benutzer keinen Zugriff haben.

James Henstridge
quelle
1

Sie können einen Ablageordner "Nur-Schreib-Ansicht" mit rw-Zugriff erstellen und mithilfe von Cronjob- oder Inode-Benachrichtigung den Inhalt in die andere "Lese- / Schreibansicht" verschieben.

Jet
quelle
1

Ich glaube, Sie könnten einfach Bind Mount Trickery verwenden, in /etc/fstab:

/path/to/read-write-view /path/to/write-only-view none bind 0 0

Also könnten Sie dann wahrscheinlich:

chmod a=wx /path/to/write-only-view
chmod a=rwx /path/to/read-write-view
Tal
quelle
1

Verwenden Sie bindfs , um "ein Verzeichnis an einem anderen Speicherort bereitzustellen und Berechtigungsbits zu ändern".

Beginnen Sie mit einem normalen Ordner, der sowohl Lese- als auch Schreibzugriff hat:

$ mkdir read-write-view && touch read-write-view/{a,b,c}
$ ls read-write-view
a  b  c

Verwenden Sie bindfs, um den Ordner ohne Lesezugriff bereitzustellen:

$ mkdir write-only-view
$ sudo bindfs --perms=a-r read-write-view write-only-view

Stellen Sie sicher, dass nur der Inhalt des Originalordners aufgelistet werden kann:

$ ls read-write-view write-only-view
read-write-view:
a  b  c
ls: cannot open directory write-only-view: Permission denied

Stellen Sie sicher, dass der ursprüngliche Ordner über den Mount beschrieben werden kann:

$ echo 'Can you read this?' > write-only-view/d
$ cat read-write-view/d
Can you read this?

Stellen Sie sicher, dass Dateien nicht über den Mount gelesen werden können:

$ cat write-only-view/d
cat: write-only-view/d: Permission denied
ændrük
quelle
0

Erstens ist es einfacher, dies umgekehrt zu denken. Sie haben einen Ordner, der rw für alle ist, die Schreibzugriff benötigen, und eine schreibgeschützte "Ansicht" dieses Ordners für diejenigen, die schreibgeschützten Zugriff benötigen.

Ich war noch nie in der Lage, die Option mount --bind -o ro zum korrekten Funktionieren zu bringen. Der zuverlässigste Weg, dies zu tun, ist die Verwendung von nfs. Fügen Sie Folgendes zu / etc / export hinzu

/path-to-folder/folder 127.0.0.1(secure,ro,no_root_squash)

Hängen Sie dann die schreibgeschützte "Ansicht" mit ein

mount -o ro 127.0.0.1:/path-to-folder/folder /read-only-folder

Sie sollten jetzt eine schreibgeschützte Ansicht Ihres ursprünglichen Ordners haben.

Ich nehme an, Sie könnten dasselbe mit Samba / CIFs tun, aber dies wäre nur für den Netzwerkzugriff wirklich sinnvoll.

Diese Lösung wurde von diesem Howto inspiriert ( gestohlen ) . Ich hoffe, es hilft.

Chris
quelle
Ich frage nicht nach einer schreibgeschützten Ansicht, sondern nur nach schreibgeschützt und schreibgeschützt.
ændrük
0

Ich denke nicht, dass dies möglich ist, da Sie eine "Nur-Schreiben" -Diskette lesen müssen, um den Inhalt anzuzeigen.

Wenn ich ein solches Gerät verkaufen würde, wie könnte jemand überprüfen, ob es funktioniert? Vielleicht ist dies eine für Kickstarter.


quelle
0

Dies ist keine Antwort, sondern eher ein Gedanke und möglicherweise eine andere Frage. Für mich klingt dies so, als ob es durch eine Art Hook oder Trigger implementiert werden kann.

Einige Programme im Hintergrund überwachen möglicherweise den schreibgeschützten Ordner (nicht durch Abfragen, er kann mit FAM oder ähnlichem benachrichtigt werden ) und verschieben dann jede Datei aus dem schreibgeschützten Ordner, sobald sie angezeigt wird.

MPi
quelle