Jak mogę zrobić widok folderu tylko do zapisu?

12

Chcę mieć miejsce w systemie plików, które przedstawia „widok” tylko do zapisu innego folderu, do którego mam dostęp do odczytu i zapisu.

Wyobrażam sobie coś podobnego w zachowaniu do skrzynki rozwijanej FTP, na której można kopiować pliki, ale nie można ich odczytać, np .:

$ 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/:

Ważne jest, aby read-write-view/działało tak jak w przykładzie - zawartość jest nadal widoczna po uzyskaniu dostępu , a oba „widoki” są funkcjonalne dla jednego użytkownika.

Jak mogę ustawić coś takiego? Może jakiś sprytny układ linków symbolicznych? A może niezwykła konfiguracja oprawki bind?

ændrük
źródło

Odpowiedzi:

2

Zadałem to samo pytanie studentom na liście mailingowej samby kilka lat temu (http://lists.samba.org/archive/samba/2008-September/143610.html) i odpowiedź zadziałała dla nas. Potrzebujesz rozszerzonych atrybutów acl w systemie plików (z pakietu acl), oto odpowiedź Jeremy Allison ...

Ok, problem polega na tym, że uczniowie muszą być w stanie odczytać katalog zawierający, aby móc przeciągać i upuszczać tam nowe pliki. Powodem jest to, że Samba musi być w stanie przeskanować katalog w swoim imieniu, aby wyszukiwać bez rozróżniania wielkości liter.

Ale tak długo, jak nie masz nic przeciwko umożliwieniu uczniom przeglądania nazw plików innych osób, możesz skonfigurować DropBox, aby uczniowie mogli zapisywać w nim (i własne pliki), ale nie mogli edytować ani wyświetlać innych plików.

Po pierwsze, chcesz się upewnić, że pliki utworzone w katalogu DropBox nie są własnością grupy podstawowej ucznia, ale właściciela grupy direcotry DropBox. Więc :

chgrp nauczycieli DropBox

aby była własnością grupy nauczycieli. Następnie ustaw bit setgid w katalogu DropBox, aby upewnić się, że utworzone tam pliki mają grupę nauczycieli.

chmod g + s DropBox

Następnie upewnij się, że nazwa pliku w DropBox może zostać zmieniona lub usunięta tylko przez właściciela pliku, właściciela katalogu lub przez użytkownika root (te same uprawnienia, które ma / tmp).

chmod + t DropBox

Następnie pozwól uczniom pisać do katalogu, dodając listę ACL

setfacl -mg: students: rwx DropBox

Tak długo, jak defaul acl jest ustawiony tak, że „inni” nie mają żadnych uprawnień, pliki zapisane przez studenta do tego katalogu będą same w sobie, ale będą miały grupę właścicieli „nauczycieli”, a uczniowie nie będą mogli czytać każdego inne pliki.

Jeśli chcesz, aby pliki były własnością właściciela katalogu, a nie studentów, którzy je utworzyli, musisz skonfigurować oddzielny udział, jak opisano powyżej, ale następnie dodać parametr poziomu udziału:

dziedzicz właściciel = tak

co spowoduje, że pliki utworzone w katalogach w tym udziale będą własnością katalogu zawierającego, a nie właściciela tworzącego.

użytkownik55604
źródło
1

Można to częściowo osiągnąć, ustawiając uprawnienia do folderu, tak aby użytkownicy docelowi mieli dostęp do zapisu do folderu, ale nie do odczytu.

Na przykład, aby umożliwić każdemu pisanie w folderze, ale nie wyświetlanie jego zawartości, możesz wykonać następujące czynności:

chmod o=wx folder

Lub, aby dać dostęp tylko określonej grupie użytkowników:

chgrp groupname folder
chmod o=,g=wx folder

Teraz ci użytkownicy nie będą mogli wyświetlić zawartości folderu, ale będą mogli umieszczać pliki w folderze:

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

Nie robi to wszystkiego, co chcesz, ponieważ jeśli użytkownicy mogą nadal uzyskiwać dostęp do plików w folderze, mogą odgadnąć nazwę. Możesz zminimalizować to ryzyko poprzez zadanie cron, które regularnie przenosiło pliki z folderu rozwijanego do miejsca, do którego inni użytkownicy nie mają dostępu.

James Henstridge
źródło
1

Możesz utworzyć folder upuszczania „widok tylko do zapisu” z dostępem do rw i użyć cronjob lub powiadomienia i-węzła, aby przenieść zawartość do innego „widoku do odczytu-zapisu”.

strumień
źródło
1

Wierzę, że możesz po prostu użyć oszustwa bind mount w /etc/fstab:

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

Prawdopodobnie mógłbyś wtedy:

chmod a=wx /path/to/write-only-view
chmod a=rwx /path/to/read-write-view
Dolina górska
źródło
1

Użyj bindfs , który ma na celu „zamontowanie katalogu w innej lokalizacji i zmianę bitów uprawnień”.

Zacznij od zwykłego folderu, który ma zarówno dostęp do odczytu, jak i zapisu:

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

Użyj bindfs, aby zamontować folder bez dostępu do odczytu:

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

Sprawdź, czy można wyświetlić tylko zawartość oryginalnego folderu:

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

Sprawdź, czy oryginalny folder może zostać zapisany za pośrednictwem montowania:

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

Sprawdź, czy nie można odczytać plików przez podłączenie:

$ cat write-only-view/d
cat: write-only-view/d: Permission denied
ændrük
źródło
0

Po pierwsze, łatwiej jest myśleć o tym na odwrót. Masz folder rw dla każdego, kto potrzebuje dostępu do zapisu, oraz „tylko widok” tego folderu dla tych, którzy potrzebują dostępu tylko do odczytu.

Nigdy nie byłem w stanie uzyskać poprawnego działania opcji mount --bind -o ro. Najbardziej niezawodnym sposobem na to jest użycie nfs. Dodaj następujące elementy do / etc / export

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

następnie zamontuj „widok” tylko do odczytu za pomocą

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

Powinieneś teraz mieć widok tylko do odczytu oryginalnego folderu.

Przypuszczam, że możesz zrobić to samo z samba / cifs, ale to naprawdę ma sens tylko w przypadku dostępu do sieci.

To rozwiązanie zostało zainspirowane ( skradzione ) z tego Howto . Mam nadzieję, że to pomoże.

Chris
źródło
Nie pytam o widok tylko do odczytu, tylko do odczytu i zapisu i tylko do zapisu.
ændrük
0

Nie sądzę, aby było to możliwe, ponieważ musisz przeczytać dysk „tylko do zapisu”, aby wyświetlić zawartość.

Gdybym miał sprzedać takie urządzenie, jak ktokolwiek byłby w stanie zweryfikować, czy zadziałało? Może to jest na kickstarter.


źródło
0

To nie jest odpowiedź, ale bardziej myśl i być może kolejne pytanie. Dla mnie brzmi to tak, jakby można je zaimplementować za pomocą haka lub wyzwalacza.

Niektóre programy w tle mogą oglądać folder tylko do zapisu (nie przez odpytywanie, można o tym powiadomić za pomocą FAM lub czegoś takiego), a następnie przenieść z niego każdy plik do folderu tylko do odczytu, gdy tylko się pojawi.

MPi
źródło