如何创建文件夹的只写视图?

如何创建文件夹的只写视图?

我希望在文件系统上有一个地方可以显示另一个我有读写权限的文件夹的只写“视图”。

我正在想象某种行为类似于 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/,并且两个“视图”对于单个用户均适用。

我该如何设置这样的设置?也许是一些巧妙的符号链接安排?或者是绑定安装的不寻常配置?

答案1

几年前,我在 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

然后确保 DropBox 中的文件只能由文件所有者、目录所有者或 root(与 /tmp 具有相同的权限)重命名或删除。

chmod +t DropBox

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

setfacl -mg:students:rwx DropBox

只要将默认 acl 设置为“其他人”没有权限,学生写入该目录的文件将归他们自己所有,但归“教师”所有,学生将无法读取彼此的文件。

如果您需要使文件归目录所有者所有,而不是由创建它们的学生所有,则需要按照上述说明设置单独的共享,然后添加共享级别参数:

继承所有者 = 是

这将导致在该共享中的目录中创建的文件归包含目录所有,而不是创建目录的所有者所有。

答案2

您可以通过设置文件夹的权限来实现其中的一些功能,使得目标用户对该文件夹具有写访问权限但没有读取访问权限。

例如,要允许任何人写入文件夹但不列出其内容,您可以执行以下操作:

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 作业定期将文件从 drop box 文件夹移出到其他用户无法访问的位置,从而最大限度地降低这种风险。

答案3

您可以创建一个具有 rw 访问权限的拖放文件夹“只写视图”,并使用 cronjob 或 inode 通知将内容移动到另一个“读写视图”。

答案4

使用绑定文件系统,其设计目的是“将目录挂载到另一个位置并改变权限位”。

从具有读写权限的普通文件夹开始:

$ 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

相关内容