Як я можу зробити папку лише для запису?


12

Я хочу мати місце у файловій системі, яка представляє "перегляд" лише однієї папки іншої папки, до якої я маю доступ для читання-запису.

Я зображую щось подібне за поведінкою до папки FTP, де файли можна скопіювати в нього, але не прочитати з нього, наприклад:

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

Важливо, щоб це працювало, як у прикладі - вміст все ще видно при доступі до них read-write-view/, і обидва "види" функціональні для одного користувача.

Як я можу налаштувати щось подібне? Можливо, якесь розумне розташування символічних зв’язків? Або незвичайна конфігурація прив'язування кріплення?

Відповіді:


2

Це ж питання я задав студентам у списках розсилки самби кілька років тому (http://lists.samba.org/archive/samba/2008-September/143610.html), і відповідь спрацювала для нас. Вам потрібні розширені атрибути acl у вашій файловій системі (з пакета acl), ось відповідь Джеремі Еллісона ...

Гаразд, проблема полягає в тому, що студенти повинні мати можливість читати каталог, що містить, щоб мати змогу перетягувати туди нові файли. Причина полягає в тому, що Samba повинен мати можливість сканувати каталог від свого імені, щоб зробити нечутливі пошуки.

Але поки ви не заперечуєте, щоб студенти могли бачити імена файлів один одного, ви можете встановити DropBox, щоб студенти могли писати в нього (і власні файли), але не редагувати чи бачити інші файли.

По-перше, ви хочете переконатися, що файли, створені в каталозі DropBox, належать не первинній групі студента, а власнику групи дирекції DropBox. Тому :

chgrp викладачі DropBox

зробити його власністю групи вчителів. Потім встановіть встановлений біт в каталозі DropBox, щоб переконатися, що у створених там файлах є група вчителів.

chmod g + s DropBox

Потім переконайтесь, що файл у DropBox може бути перейменований або видалений тільки власником файлу, або власником каталогу, або кореневим кодом (ті ж дозволи, які має / tmp).

chmod + t DropBox

Потім дозвольте учням записатись у каталог, додавши ACL

setfacl -mg: студенти: rwx DropBox

Поки ACL за замовчуванням встановлений таким чином, що "інші" не мають дозволів, файли, записані студентом у цей каталог, будуть належати їм самим, але матимуть групу "викладачів", і студенти не зможуть читати кожного інші файли.

Якщо вам потрібно, щоб файли були власником власника каталогу, а не учнями, які їх створили, вам потрібно встановити окрему спільну подію, як описано вище, але потім додати параметр рівня спільного доступу:

успадкувати власника = так

що призведе до того, що файли, створені в каталогах цього спільного ресурсу, належать до каталогу, що містить, а не власника, який створює.


1

Дещо цього можна досягти, встановивши дозволи в папці таким чином, щоб цільові користувачі мали доступ до папки, але не мали доступу до читання.

Наприклад, щоб дозволити кожному писати папку, але не перелічувати її вміст, ви можете зробити наступне:

chmod o=wx folder

Або надати доступ лише певній групі користувачів:

chgrp groupname folder
chmod o=,g=wx folder

Тепер ці користувачі не зможуть перерахувати вміст папки, але зможуть розміщувати файли у папці:

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

Це не робить все, що ви хочете, оскільки якщо користувачі все ще можуть отримати доступ до файлів у папці, якщо вони можуть вгадати ім'я. Ви могли мінімізувати цей ризик, використовуючи завдання cron, яке регулярно переміщувало файли з папки, що випадає, до місця, до якого інші користувачі не мають доступу.


1

Ви можете створити папку "drop-only-view" з доступом rw і використовувати cronjob або inode сповіщення для переміщення вмісту до іншого "read-write-view".


1

Я вважаю, що ви можете просто використати хитрість прив’язки для монтажу в /etc/fstab:

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

Отже, ви могли, напевно, тоді:

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

1

Використовуйте bindfs , який призначений для "монтування каталогу в інше місце та зміни бітів дозволу".

Почніть із звичайної папки, яка має доступ і для читання, і для запису:

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

Використовуйте bindfs для монтажу папки без доступу до читання:

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

Переконайтеся, що в списку може бути лише вміст вихідної папки:

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

Переконайтесь, що оригінальну папку можна записати через кріплення:

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

Переконайтесь, що файли не можна читати через кріплення:

$ cat write-only-view/d
cat: write-only-view/d: Permission denied

0

По-перше, простіше думати про це навпаки. У вас є папка, яка є rw для того, хто потребує доступу до запису, та "перегляд" цієї папки лише для читання для тих, хто потребує доступу лише для читання.

Мені ніколи не вдалося змусити параметр mount --bind -o ro працювати коректно. Найбільш надійний спосіб зробити це - використовувати nfs. Додайте до / etc / export

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

потім встановіть "перегляд" лише для читання

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

Тепер у вас має бути перегляд оригінальної папки лише для читання.

Я припускаю, що ви могли б зробити те ж саме і з samba / cifs, але це матиме сенс лише для доступу до мережі.

Це рішення було натхнене ( викраденим ) цим хаутом . Я сподіваюся, що це допомагає.


Я не запитую про перегляд лише для читання, просто читаю-пишу та пишу лише.
ændrük

0

Я не думаю, що це можливо, оскільки вам потрібно прочитати диск "лише для запису" для відображення вмісту.

Якби я продавав такий пристрій, як би хтось міг переконатися, що він працює? Можливо, це один для kickstarter.


0

Це не відповідь, а справді більше думка і, можливо, інше питання. Для мене це звучить так, ніби його можна реалізувати через якийсь гак або тригер.

Деяка програма у фоновому режимі може дивитися папку лише для запису (не шляхом опитування, про неї можна повідомити FAM або щось подібне), а потім перемістити кожен файл із неї в папку лише для читання, як тільки вона з’явиться.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.