Permisos de archivos y directorios compartidos con Vagrant

Lista de permisos del directorio compartido vía Vagrant
Lista de permisos del directorio compartido vía Vagrant

Si ya usas Vagrant coincidirás conmigo que es fantástico. Desde que lo probé no he podido volver a Zend Server. Vagrant es simplemente genial. Pero, si vas a usarlo como servidor web compartiendo con el huésped el directorio que quieres hacer público entonces puede que te topes con problemas de permisos de archivos y directorios si es que estás virtualizando alguna distribución de Linux.

Por defecto los directorios compartidos entre invitado y huésped usando el parámetro config.vm.synced_folder de tu Vagrantfile suelen ser leídos por el invitado (tu vm) como ficheros con permiso 777. Esto se debe a que el directorio compartido por el huésped es montado durante el arranque de tu máquina virtual con esas características. Debido al formato en el que el directorio compartido es montado, no se pueden aplicar permisos especiales sobre los archivos ni cambiar su propietario o grupo.

Esto para aplicaciones web puede ser un problema ya que algunos frameworks requieren que ciertos archivos o directorios puedan ser modificados solo por un número limitado de usuarios.

No podemos modificar los permisos de ciertos archivos y directorios compartidos con el huésped una vez que el directorio compartido ya ha sido montado en el invitado, pero podemos si decirle a Vagrant como montar el directorio compartido en el arranque.

Esta es posiblemente la configuración del directorio compartido que tienes en tu Vagrantfile:

Como se explica en el comentario, la primera cadena especifica la ruta del directorio a compartir y la segunda cadena es la ruta absoluta donde se montará el directorio compartido en el invitado.

La misma configuración antes mostrada se puede expandir de la siguiente forma:

El ejemplo se explica por si mismo. Las líneas adicionales son los valores por defecto que Vagrant usaría si no lo especificáramos manualmente, como sucede en el primer ejemplo.

Entonces, juguemos con estos parámetros. ¿Que sucedería si lo dejo como sigue?

El resultado sería el siguiente. Todos los archivos compartidos tendrían como:

  • Propietario: vagrant
  • Grupo: www-data (es el grupo al que también pertenece el usuario www-data usualmente usado por los servidores web)
  • Permisos
    • Directorios
      • El propietario: Todos los permisos
      • El grupo: Todos los permisos
      • El resto: Solo lectura y ejecución
    • Archivos
      • El propietario: Todos los permisos
      • El grupo: Lectura y escritura
      • El resto: Solo lectura

Y aquí tienes un screenshot para demostrarlo.

Lista de permisos del directorio compartido vía Vagrant

Lista de permisos del directorio compartido vía Vagrant

Entonces, con esta configuración en tu Vagrantfile el usuario vagrant mantiene el control total sobre el contenido del directorio, los usuarios del grupo www-data (usados por apache, nginx, etc) tienen permisos para realizar las tareas que necesitan y otros usuarios tienen apenas acceso de lectura.

Esta configuración debería ser suficiente para pasar la validación de requisitos del framework que uses. Sin embargo, si no fuera suficiente puedes jugar cambiando los permisos para acomodarlo a tu necesidad.

Recuerda, que deber ejecutar el comando vagrant reload cada vez que modifiques Vagrantfile.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.