无法在使用“unshare -c -m --keep-caps bash”创建的用户命名空间中写入 SSHFS 挂载

无法在使用“unshare -c -m --keep-caps bash”创建的用户命名空间中写入 SSHFS 挂载

背景

最终,我尝试在使用 Docker 作为容器运行时的自托管集群上的 kubernetes pod 中挂载远程文件系统。在 pod 中运行的进程决定运行时的挂载,并可能在运行时挂载/卸载/重新挂载文件系统,因此据我所知,使用 PVC/PV 是不可能的。此外,我想使用 SSHFS,因为它只需要在远程端进行最少的设置(我可能无法在所有用例中控制)。

为了让容器执行挂载操作,我使用自定义 seccomp 配置文件,允许容器执行所需的系统调用(mount、umount、unshare 等)。我还向容器公开了 /dev/fuse。

问题

运行以下命令后,我可以使用容器中的 sshfs 成功挂载远程文件夹:unshare -c -m --keep-caps bash。我可以读取该文件夹,但无法写入。

在我自己的机器上使用 unshare 时,我遇到了同样的问题。如果不使用 unshare,我可以使用以下命令挂载文件系统: 这允许我读取和写入 /tmp/sshfs。sshfs [email protected]:/some/remote/folder /tmp/sshfs/

跑步后unshare -c -m --keep-caps

然后运行

sshfs [email protected]:/some/remote/folder /tmp/sshfs/

我可以读取 /tmp/sshfs(在用户命名空间内),但不能写入它。

这不是远程服务器上的权限问题,因为我可以在不使用“取消共享”时写入文件夹。我还可以在命名空间中发出挂载命令之前写入挂载点。

我尝试在 mount 命令中添加-o rw-o allow_other开关,但似乎没有任何效果。我还尝试过在其他位置进行安装,但同样没有效果。

我不确定如何进一步调试这个问题或如何继续。

相关内容