如何挂载 FUSE(例如 unionfs)以便所有用户都可以访问它?

如何挂载 FUSE(例如 unionfs)以便所有用户都可以访问它?

我正在尝试使用 unionfs 为我们的开发服务器创建几个开发工具的多个 (100+) 实例。这是我正在使用的脚本:

PROJECT=$1
DEPLOYMENT=$2
TOOL=$3

DIR_TOOL="/var/www/tools/${TOOL}"
DIR_CONFIG="/var/www/tools-instances/${PROJECT}/${DEPLOYMENT}/${TOOL}/config"
DIR_TMP="/var/www/tools-instances/${PROJECT}/${DEPLOYMENT}/${TOOL}/tmp"
DIR_MERGED="/var/www/tools-instances/${PROJECT}/${DEPLOYMENT}/${TOOL}/merged"

mkdir -p "${DIR_CONFIG}"
mkdir -p "${DIR_TMP}"
mkdir -p "${DIR_MERGED}"

unionfs -o cow "${DIR_TMP}"=RW:"${DIR_CONFIG}"=RO:"${DIR_TOOL}"=RO "${DIR_MERGED}"

然后像这样使用它:

create-tool-overlay.sh "project-1" "staging" "phpmyadmin"

一切正常,但仅限于我们的manager用户。如果我尝试以任何其他用户www-data(包括需要此访问权限的用户)和root应该有权访问所有内容的用户身份访问该文件夹,我会得到permission denied。如果我尝试在此文件夹上运行,ls我会得到这个奇怪的输出:

root@app-1:/var/www/tools-instances/project-1/staging/phpmyadmin# ls -al
ls: cannot access 'merged': Permission denied
total 32
drwxrwxr-x+ 5 manager manager 4096 Dec 16 15:51 .
drwxrwxr-x+ 3 manager manager 4096 Dec 14 15:29 ..
drwxrwxr-x+ 2 manager manager 4096 Dec 14 15:29 config
d?????????? ? ?       ?          ?            ? merged
drwxrwxr-x+ 2 manager manager 4096 Dec 16 15:51 tmp

答案1

您使用的可执行文件unionfs创建了一个文件系统用户空间(保险丝)。管理文件系统的进程在特定用户(在您的例子中为manager:)下运行,其他用户无权访问。授予其他用户访问权限不太安全。阅读安全问题

您可以降低安全性。请参阅man 8 fuse。该选项allow_root将允许 root 使用文件系统。该选项allow_other将允许任何人使用文件系统。这些选项是互斥的,您似乎想要后者。请注意,您需要放置user_allow_other/etc/fuse.conf以便作为普通用户使用。这是我的 Kubuntu [我的]中allow_other的默认相关注释:fuse.confformatting

user_allow_other- 使用allow_othermount 选项可以很好地以 root 身份工作,为了让它以用户身份工作,您也需要这样做user_allow_other/etc/fuse.conf(此选项允许用户使用该allow_other选项。)allow_other如果您希望所有者以外的用户访问已安装的保险丝,则需要这样做。此选项必须单独出现在一行上。没有值,只是选项的存在。

在调用时,你将allow_other选项参数(部分)传递给 。在你的情况下它将是这样的:-ounionfs

unionfs -o cow,allow_other …

请注意,如果文件系统在特定普通用户下运行,那么它将只能执行该用户可以执行的操作(对底层存储)。例如,如果您unionfs以用户身份运行managerallow_other允许www-data使用文件系统,那么由其创建的任何文件www-data仍然属于manager该文件系统。其他限制可能会自行显现。

运行文件系统root可能会有所帮助,但请参阅已经链接答案root。不建议在下面跑步。

总体而言,FUSE 的设计初衷是为没有 root 权限的用户提供一种通用方式来挂载和使用文件系统他们自己,而无需打扰实际管理员。要与其他用户一起使用文件系统,正确的方法是获得内核和能够 的管理员的支持mount

据我所知,UnionFS 可以作为内核模块(而不是 FUSE),但它不在主线内核中,您需要自行构建。如果我理解正确的话,内核中实现的 UnionFS 应该会像您预期的那样运行。

在我的 Kubuntu 中我可以使用 OverlayFS(它是备择方案) 已经作为内核模块存在(不是 FUSE)。

相关内容