如何制作文件夹的只写视图?


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/,并且两个“视图”都对单个用户有效。

我该如何设置呢?也许一些巧妙的符号链接排列?还是绑定安装的异常配置?

Answers:


2

几年前,我在samba邮件列表中对学生投递箱问了同样的问题(http://lists.samba.org/archive/samba/2008-September/143610.html),答案对我们有用。您需要在文件系统上扩展acl属性(来自acl包),这是Jeremy Allison的答案...

好的,问题是学生需要能够读取包含的目录才能将新文件拖放到该目录中。原因是Samba需要能够代表他们扫描目录,以便进行不区分大小写的查找。

但是,只要您不介意让学生看到彼此的文件名,就可以设置一个DropBox,以便学生可以向其中写入文件(和他们自己的文件),而不编辑或查看其他文件。

首先,您要确保在DropBox目录中创建的文件不是属于学生的主要组,而是属于DropBox目录的组所有者。因此:

chgrp教师DropBox

使其归教师团体所有。然后,在DropBox目录中设置setgid位,以确保在其中创建的文件具有自己的教师组。

chmod g + s DropBox

然后,确保只能由文件所有者,目录所有者或根用户(包括/ tmp相同的权限)重命名或删除DropBox中的文件。

chmod + t DropBox

然后允许学生通过添加ACL来写入目录

setfacl -mg:students: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

您可以创建具有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

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的启发(从中被窃)。希望对您有所帮助。


我不是在问只读视图,只是在读写和只写。
ændrük

0

我认为这是不可能的,因为您必须读取“只写”磁盘以显示内容。

如果我要出售这样的设备,那么任何人都将无法验证它是否有效?也许这是kickstarter的一个。


0

这不是答案,而是更多的想法和可能的另一个问题。对我来说,这听起来好像可以通过某种挂钩或触发器来实现。

后台的某些程序可能会监视只读文件夹(而不是通过轮询,可以通过FAM或类似方式通知它),然后将每个文件从文件中移出只读文件夹。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.