Как я могу сделать просмотр папки только для записи?

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/, и оба «представления» работают для одного пользователя.

Как я могу настроить что-то подобное? Может быть, какое-то умное расположение символических ссылок? Или необычная конфигурация крепления?

ændrük
источник

Ответы:

2

Я задал этот же вопрос студентам в почтовой рассылке samba несколько лет назад (http://lists.samba.org/archive/samba/2008-September/143610.html), и ответ сработал для нас. Вам нужны расширенные атрибуты acl в вашей файловой системе (из пакета acl), вот ответ Джереми Эллисона ...

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

Но если вы не против того, чтобы ученики могли видеть имена файлов друг друга, вы можете настроить DropBox, чтобы ученики могли писать в него (и свои собственные файлы), но не редактировать и не видеть другие файлы.

Во-первых, вы хотите убедиться, что файлы, созданные в каталоге DropBox, принадлежат не основной группе учащегося, а владельцу группы Direcotry DropBox. Так :

учителей chgrp DropBox

сделать его принадлежащим группе учителей. Затем установите бит setgid в каталоге DropBox, чтобы убедиться, что созданные в нем файлы имеют группу учителей.

chmod g + s DropBox

Затем убедитесь, что файл в DropBox может быть переименован или удален только владельцем файла, владельцем каталога или пользователем root (те же разрешения, что и у / tmp).

chmod + t DropBox

Затем разрешите студентам писать в каталог, добавив ACL

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

Пока acl по умолчанию установлен так, что «другие» не имеют разрешений, файлы, записанные студентом в этот каталог, будут принадлежать им самим, но будут иметь собственную группу «учителей», и студенты не смогут читать каждый другие файлы.

Если вам нужно, чтобы файлы принадлежали владельцу каталога, а не учащимся, которые их создали, вам нужно настроить отдельный общий ресурс, как описано выше, но затем добавить параметр уровня общего ресурса:

наследовать владельца = да

что приведет к тому, что файлы, созданные в каталогах в этом общем ресурсе, будут принадлежать содержащему каталогу, а не владельцу создания.

user55604
источник
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

Вы можете создать папку «только для записи» с правами доступа rw и использовать уведомление cronjob или inode, чтобы переместить содержимое в другое «чтение-запись-просмотр».

реактивный самолет
источник
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
ændrük
источник
0

Во-первых, легче думать об этом наоборот. У вас есть папка rw для тех, кому нужен доступ для записи, и «просмотр» этой папки только для чтения для тех, кому нужен доступ только для чтения.

Мне никогда не удавалось заставить опцию mount --bind -o ro работать правильно. Самый надежный способ сделать это - использовать nfs. Добавьте следующее в / etc / exports

/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, но это действительно имеет смысл только для доступа к сети.

Это решение было вдохновлено ( украдено из ) этим Howto . Я надеюсь, что это помогает.

Крис
источник
Я не спрашиваю о представлении только для чтения, просто для чтения-записи и только для записи.
rndrük
0

Я не думаю, что это возможно, так как вы должны прочитать диск «только для записи» для отображения содержимого.

Если бы я продавал такое устройство, как кто-нибудь мог бы убедиться, что оно работает? Может быть, это один для кикстартер.


источник
0

Это не ответ, а скорее мысль и, возможно, другой вопрос. Для меня это звучит так, как будто это может быть реализовано с помощью какого-то крючка или триггера.

Некоторая программа в фоновом режиме может просматривать папку, доступную только для записи (не путем опроса, она может быть уведомлена с помощью FAM или чего-то подобного), а затем перемещать каждый файл из нее в папку только для чтения, как только она появляется.

MPi
источник