%20para%20que%20todos%20los%20usuarios%20tengan%20acceso%20a%20%C3%A9l%3F.png)
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 manager
usuario. 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 ls
en 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 unionfs
ejecutable 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_root
permitirá que root use el sistema de archivos. La opción allow_other
permitirá 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_other
para /etc/fuse.conf
poder utilizarlo allow_other
como usuario habitual. Este es el comentario relevante del valor predeterminado fuse.conf
en mi Kubuntu [ formatting
mío]:
user_allow_other
- Usar laallow_other
opción de montaje funciona bien como root, para que funcione también como usuario queuser_allow_other
necesitas/etc/fuse.conf
. (Esta opción permite a los usuarios usar laallow_other
opción). Lo necesitaallow_other
si 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_other
como (parte de) un argumento de opción -o
mientras 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 unionfs
como manager
y allow_other
permite www-data
usar el sistema de archivos, cualquier archivo creado www-data
seguirá perteneciendo manager
de todos modos. Posiblemente se manifestarán otras limitaciones.
Ejecutar el sistema de archivos a continuación root
puede ayudar, pero consulte larespuesta ya vinculada. root
No 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).