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

ænd*_*rük 12 filesystem permissions

我想在文件系统上有一个位置,以显示我具有读写访问权限的另一个文件夹的只写“视图”。

我正在想象一些行为类似于 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/:
Run Code Online (Sandbox Code Playgroud)

重要的是,这在示例中起作用 - 通过 访问时内容仍然可见read-write-view/,并且两个“视图”对单个用户都有效。

我怎样才能设置这样的东西?也许是符号链接的一些巧妙安排?或者绑定安装的不寻常配置?

ænd*_*rük 1

使用bindfs,它的设计目的是“将目录安装到另一个位置并更改权限位”。

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

$ mkdir read-write-view && touch read-write-view/{a,b,c}
$ ls read-write-view
a  b  c
Run Code Online (Sandbox Code Playgroud)

使用bindfs挂载没有读访问权限的文件夹:

$ mkdir write-only-view
$ sudo bindfs --perms=a-r read-write-view write-only-view
Run Code Online (Sandbox Code Playgroud)

验证是否只能列出原始文件夹的内容:

$ ls read-write-view write-only-view
read-write-view:
a  b  c
ls: cannot open directory write-only-view: Permission denied
Run Code Online (Sandbox Code Playgroud)

验证原始文件夹是否可以通过挂载写入:

$ echo 'Can you read this?' > write-only-view/d
$ cat read-write-view/d
Can you read this?
Run Code Online (Sandbox Code Playgroud)

验证是否无法通过挂载读取文件:

$ cat write-only-view/d
cat: write-only-view/d: Permission denied
Run Code Online (Sandbox Code Playgroud)