Я хочу, чтобы в файловой системе было место для представления «только для записи» другой папки, к которой у меня есть доступ для чтения и записи.
Я представляю что-то похожее по поведению с перетаскиванием 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/
, и оба «представления» функционируют для одного пользователя.
Как я могу настроить что-то подобное? Может быть, какое-то умное расположение символических ссылок? Или необычная конфигурация крепления?
Используйте 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
Можно достигнуть части этого путем установки полномочий на папке, таким образом, что у целевых пользователей есть доступ для записи к папке, но не доступ для чтения.
, Например, чтобы позволить любому писать в папку, но не перечислять ее содержание, Вы могли сделать следующее:
chmod o=wx folder
Или только дать конкретную группу пользователей этот доступ:
chgrp groupname folder
chmod o=,g=wx folder
Теперь те пользователи не смогут перечислить содержание папки, но смогут поместить файлы в папку:
$ ls folder
ls: cannot open directory folder: Permission denied
$ touch folder/filename
Это не делает всего, что Вы хотите, с тех пор если пользователи могут все еще получить доступ к файлам в папке, если они могут предположить имя. Вы могли минимизировать этот риск через задание крона, которое регулярно перемещало файлы из папки поля отбрасывания к расположению, к которому другие пользователи не имеют никакого доступа.
Я задал этот тот же вопрос для студенческих полей отбрасывания в списке рассылки самбы, несколько лет назад (http://lists.samba.org/archive/samba/2008-September/143610.html) и ответ работали на нас. Вам нужны расширенные атрибуты acl в Вашей файловой системе (от acl пакета), вот ответ Jeremy Allison...
хорошо, проблема состоит в том, что студенты должны смочь считать содержание каталога, чтобы смочь перетащить новые файлы там. Причина состоит в том, что Samba должен смочь просканировать каталог от их имени, чтобы сделать нечувствительные к регистру поиски.
, Но пока Вы не возражаете позволять студентам видеть названия каждого файлы других, можно настроить Dropbox так, чтобы студенты могли записать в него (и их собственные файлы), но не отредактировать или видеть файлы других.
Во-первых, Вы хотите удостовериться, что файлы, созданные в каталоге DropBox, не принадлежат основной группе студента, но владельцу группы Dropbox direcotry. Так:
chgrp учителя DropBox
для создания принадлежавшим группе учителей. Затем установите setgid, обдумал каталог DropBox, чтобы удостовериться, что файлы, созданные в там, имеют группу владения учителей.
chmod g+s DropBox
Затем гарантирует, что файл в Dropbox может быть переименован или удален только владельцем файла, или владельцем каталога, или корнем (те же полномочия, которые/tmp имеет).
chmod +t DropBox
Затем позволяет студентам писать в каталог путем добавления ACL
setfacl-m g:students:rwx DropBox
, Пока defaul acl установлен так, чтобы у "других" не было полномочий, файлы, записанные студентом в тот каталог, будут принадлежать себе, но будут иметь группу владения "учителей", и студенты не смогут считать каждого файлы других.
, Если необходимо быть причиной файлы, которые будут принадлежать владельцу каталога, не студентами, которые создали их, необходимо настроить отдельную долю, как описано выше, но затем добавить параметр уровня доли:
наследовали владельца = да
, который заставит файлы, созданные в рамках каталогов в той доле принадлежать содержанию каталога, не владельца создания.
Можно создать папку отбрасывания "представление только для записи" с rw доступом и использовать cronjob или inode уведомление для перемещения содержания в другое "представление записи чтения".
Я не думаю, что это возможно, так как необходимо считать диск "только для записи" для отображения содержания.
, Если бы я должен был продать такое устройство, как кто-либо смог бы проверить, что оно работало? Возможно, это один для ножного стартера.
Это не ответ, но действительно больше мысль и возможно другой вопрос. Мне это звучит, как будто это может быть реализовано через своего рода рычаг или триггер.
Некоторая программа в фоновом режиме могла бы наблюдать папку только для записи (не путем опроса, она может быть уведомлена с FAM или что-то как этот), и затем переместите каждый файл из нее в папку только для чтения, как только это появляется.
Я полагаю, что Вы могли просто использовать, связывают, монтируют обман, в /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
Во-первых, легче думать об этом наоборот. У Вас есть папка, которая является rw для того, кому бы ни нужны доступ для записи и "представление" только для чтения этой папки для тех, которым нужен доступ только для чтения.
я никогда не мог добраться, монтирование - связывают-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, но это будет только действительно иметь смысл для доступа к сети.
Это решение было вдохновлено ( украденный от ) это практическое руководство . Я надеюсь, что это помогает.