¿Cómo montar FUSE (por ejemplo, unionfs) para que todos los usuarios tengan acceso a él?

¿Cómo montar FUSE (por ejemplo, unionfs) para que todos los usuarios tengan acceso a él?

Estoy intentando usar unionfs para crear múltiples (más de 100) instancias de algunas herramientas de desarrollo para nuestro servidor de desarrollo. Aquí está el script que estoy usando:

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}"

Y luego úsalo así:

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

Todo funciona bien pero solo para nuestro managerusuario. Si intento acceder a la carpeta como cualquier otro usuario, incluido www-data(quién necesita este acceso) y root(quién debería tener acceso a todo), obtengo permission denied. Y si intento ejecutar lsen esta carpeta obtengo este resultado extraño:

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

Respuesta1

El unionfsejecutable que usaste creó unsistema de archivos enespacio de usuario(FUSIBLE). El proceso de gestión del sistema de archivos se ejecuta bajo un usuario específico (en su caso manager:) y otros usuarios no tienen acceso. Dar acceso a otros usuarios es menos seguro. Leer acerca depreocupaciones de seguridad.

Puedes bajar la seguridad. Ver man 8 fuse. La opción allow_rootpermitirá que root use el sistema de archivos. La opción allow_otherpermitirá que cualquiera use el sistema de archivos. Estas opciones son mutuamente excluyentes, parece que quieres la última. Tenga en cuenta que debe ingresar user_allow_otherpara /etc/fuse.confpoder utilizarlo allow_othercomo usuario habitual. Este es el comentario relevante del valor predeterminado fuse.confen mi Kubuntu [ formattingmío]:

user_allow_other- Usar la allow_otheropción de montaje funciona bien como root, para que funcione también como usuario que user_allow_othernecesitas /etc/fuse.conf. (Esta opción permite a los usuarios usar la allow_otheropción). Lo necesita allow_othersi desea que otros usuarios además del propietario accedan a un fusible montado. Esta opción debe aparecer sola en una línea. No hay ningún valor, sólo la presencia de la opción.

Pasas allow_othercomo (parte de) un argumento de opción -omientras invocas unionfs. En tu caso será como:

unionfs -o cow,allow_other …

Tenga en cuenta que si el sistema de archivos se ejecuta con un usuario normal específico, solo podrá hacer (en el almacenamiento subyacente) lo que este usuario puede hacer. Por ejemplo, si ejecuta unionfscomo managery allow_otherpermite www-datausar el sistema de archivos, cualquier archivo creado www-dataseguirá perteneciendo managerde todos modos. Posiblemente se manifestarán otras limitaciones.

Ejecutar el sistema de archivos a continuación rootpuede ayudar, pero consulte larespuesta ya vinculada. rootNo se recomienda correr por debajo .

En general, FUSE está diseñado como una forma genérica para que los usuarios sin acceso root monten y utilicen sistemas de archivos paraellos mismos, sin molestar a los administradores reales. Para usar un sistema de archivos con otros usuarios, la forma correcta es contar con el apoyo del kernel y de un administrador que pueda mount.

AFAIK, es posible tener UnionFS como módulo del kernel (no FUSE), pero no está en el kernel principal, debe compilarlo usted mismo. Si entiendo correctamente, UnionFS implementado en el kernel debería comportarse como esperaba.

En mi Kubuntu puedo usar OverlayFS (que es uno dealternativas) ya presente como módulo del kernel (no FUSE).

información relacionada