Una solución al problema de los permisos en servidores web

Una solución al problema de los permisos en servidores web

Quien ha operado un servidor web con NGINX o Apache -entre otros- probablemente se ha enfrentado con el viejo problema de los permisos: los desarrolladores necesitan un tipo de permisos en los folders y archivos del servidor para poder manipular las aplicaciones, páginas web, librerías, etcétera, mientras que Apache o NGINX necesitan otros permisos diferentes en los mismos archivos para poder servirlos correctamente hacia el exterior (mundo web).

Esto es un problema porque significa que los mismos archivos de las páginas web o las aplicaciones, necesitan al mismo tiempo dos tipos de permisos diferentes, uno para el servidor web y otro para los desarrolladores. Mientras que los desarrolladores usualmente necesitan permisos para leer y escribir en todos los archivos, Nginx o Apache necesitan solamente poder escribir en algunos archivos (y leer los demás).

Los archivos de páginas web o apps, necesitan al mismo tiempo dos tipos de permisos diferentes y mutuamente exclusivos, uno para el servidor web y otro para los desarrolladores.

Este problema ha sido resuelto por muchas personas de muchas formas diferentes en el pasado, así que no estamos descubriendo el hilo negro aquí, ni tratando de re-inventar la rueda, más bien queremos compartir lo que nos pareció una elegante solución que encontramos por medio de un desarrollador francés hace algunos pocos meses.

La solución es un directorio espejo con diferentes permisos

Esta solución utiliza bindfs, un sistema de archivos FUSE (File System in User Space) que sirve para reflejar o espejear un directorio en otro lugar, esto no es nada especial en sí, sin embargo lo que sí es especial es que bindfs permite alterar los permisos del directorio que ha sido reflejado. Literalmente tienes acceso a los archivos y folders del directorio deseado a través de un directorio espejo, pero con diferentes permisos en todos los archivos y folders.

Por ejemplo, el directorio /var/www -que es donde usualmente radican las aplicaciones web- puede tener cualquier tipo de permiso que sea apropiadado para los servidores NGINX y/o Apache, y usando bindfs montamos un espejo de ese directorio hacia otro lugar del servidor, que puede ser por ejemplo la carpeta /home/usuario/www de manera que el usuario pueda entrar a /var/www a través de su directorio home, pero cuando lo hace, todos los archivos, -como por arte de magia-, tienen diferentes permisos (los que el desarrollador necesita).

De esta manera los desarrolladores nunca tienen que entrar a las carpetas /var/www directamente a través de (s)ftp o git sino sólo a través del espejo que está en su directorio home.

Como aplicar bindfs para solucionar el problema de los permisos en servidores linux

Vamos a asumir en este ejemplo que el usuario se llama desarrollador, que el usuario para el servidor web es www-data, y que la aplicación está alojada en la carpeta var/www/app

Installando bindfs
sudo apt-get update
sudo apt-get -y install bindfs

mkdir -p /home/desarrollador/www/app
sudo chown -Rf desarrollador:desarrollador /home/desarrollador/www
chmod -Rf 770 /home/desarrollador/www

Después sólo hay que editar el contenido de /etc/fstab con tu editor favorito (vim o nano) para añadir esta linea:

bindfs#/var/www/app /home/desarrollador/www/app fuse force-user=desarrollador,force-group=desarrollador,create-for-user=www-data,create-for-group=www-data,create-with-perms=0770,chgrp-ignore,chown-ignore,chmod-ignore 0 0  

Se guardan los cambios y pasamos a montar la aplicación.

sudo mount /home/desarrollador/websites/app

Probar la solución es muy fácil, simplemente hay que entrar al home del usuario -en este caso desarrollador- y verificar que exista la carpeta www/app y navegar en ella y ejecutar ls -la para ver los permisos de los archivos.

Brandpetrám's Picture

Acerca de Brandpetram

Brandpetrám es una marca bajo la cual trabajan un grupo de profesionales dedicados al branding, desarrollo web y marketing digital que ayudan a nuevos y viejos emprendedores que comprenden el valor de internet para aumentar las ventas y a construir sus marcas y producir nuevos negocios.

Monterrey, México https://brandpetram.io