Как смонтировать 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, чтобы использовать allow_otherкак обычный пользователь. Это соответствующий комментарий из default fuse.confв моем Kubuntu [ formattingмой]:

user_allow_other- Использование allow_otherопции монтирования отлично работает как root, чтобы она работала как пользователь, который вам нужен user_allow_other. /etc/fuse.conf(Эта опция позволяет пользователям использовать опцию allow_other.) Вам нужно, allow_otherесли вы хотите, чтобы пользователи, отличные от владельца, имели доступ к смонтированному fuse. Эта опция должна отображаться в строке сама по себе. Значения нет, просто наличие опции.

Вы передаете allow_otherкак (часть) аргумента-опции -oпри вызове unionfs. В вашем случае это будет так:

unionfs -o cow,allow_other …

Обратите внимание, если файловая система работает под определенным обычным пользователем, то она сможет делать (с базовым хранилищем) только то, что может делать этот пользователь. Например, если вы работаете unionfsкак managerи allow_otherразрешаете www-dataиспользовать файловую систему, то любой файл, созданный с помощью, www-dataвсе равно будет принадлежать manager. Другие ограничения, возможно, проявятся.

Запуск файловой системы rootможет помочь, но см.уже связанный ответ. Бегать под rootним не рекомендуется.

В целом FUSE разработан как универсальный способ для пользователей без прав root монтировать и использовать файловые системы длясами себя, не беспокоя настоящих администраторов. Чтобы использовать файловую систему с другими пользователями, правильный путь — иметь поддержку от ядра и от администратора, который может mount.

AFAIK, UnionFS можно использовать как модуль ядра (не FUSE), но его нет в основном ядре, вам нужно собрать его самостоятельно. Если я правильно понимаю, UnionFS, реализованный в ядре, должен вести себя так, как вы ожидали.

В моем Kubuntu я могу использовать OverlayFS (это один изальтернативы) уже присутствует как модуль ядра (не FUSE).

Связанный контент