Usuarios separados por Vhost en Apache2

Social

Hoy os traigo una manera fácil de separar los usuarios con los que corre Apache cada una de las paginas web, para evitar problemas de seguridad y además facilitar la gestión de los ficheros por parte de los clientes.

La seguridad es muy importante en cualquier servidor, y además de mantener todos los paquetes actualizados, y las plataformas web en sus ultimas versiones, hay algunas medidas adicionales que nos pueden ser de utilidad. Separar los usuarios de cada una de las paginas, en vez de utilizar el mismo usuario www-data para todas.

En el caso de que una web se infecte, por ejemplo por un WordPress desactualizado, y un atacante pueda llegar a acceder a la shell, se vera tan solo con permisos para modificar ese mismo sitio web, y no afectaría al resto de alojados.

Además, ya no doy acceso por FTP al servidor, ya que me parece inseguro y lento. Los usuarios se conectan a través de SFTP o SSH y quedan enjaulados en su directorio. La conexión va cifrada y además es más rápida. Así que el usuario puede conectarse por SFTP o SSH, crear o modificar archivos con su usuario, que es el mismo que ejecuta la web, y no da problemas para que la plataforma pueda subir o cambiar archivos directamente.

Creando usuarios

Primero crearemos un usuario, cambiando $USER por el nombre que queramos:

useradd $USER

Ahora añadiremos lo que sería la home del usuario, para que no pueda modificar otros directorios:

usermod $USER -d /var/www/directorio_$USER

Le cambiaremos la shell, para que no pueda ejecutar comandos desde consola:

usermod $USER -s /bin/false

Lo añadiremos al grupo de ssh (el servidor de SSH tiene que estar listo para aceptar conexiones de este usuario, o cualquiera del grupo ssh).

usermod $USER -g ssh

Y le pondremos una contraseña si no lo hemos hecho al crear el usuario:

sudo passwd $USER

MPM-ITK

Una vez hecho, instalaremos el modulo MPM-ITK si aun no lo tenemos:

sudo apt-get install libapache2-mpm-itk

Activaremos el modulo:

a2enmod mpm_itk

Y reiniciaremos el servicio:

sudo /etc/init.d/apache2 restart

VirtualHosts

Ahora ya tenemos el usuario creado y el modulo listo para configurar cada VirtualHost, editaremos el fichero con nuestro editor favorito, vim o nano por ejemplo:

sudo vim /etc/apache2/sites-available/SITIO_WEB

Y añadiremos la siguiente linea dentro del directorio. Si no hemos creado un grupo especifico, podemos dejar como $GRUPO www-data.

AssignUserID $USER $GRUPO

Guardaremos el fichero, y solo faltara asignar los permisos a los ficheros de la web:

sudo chmod $USUARIO /var/www/directorio_$USER

Y listo, esa web correrá con el usuario asignado, y se podrá conectar por SSH o SFTP de manera segura y realizar los cambios necesarios.

Si te ha gustado, ¡comparte!

Xavi Gonzalez Autor

Técnico en explotación de sistemas informáticos y Técnico Superior de Administración de sistemas en red y de Desarrollo de Aplicaciones Web. Actualmente como Responsable técnico y desarrollador web en Egardata Informàtica, en Terrassa.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

ERROR: si-captcha.php plugin: GD image support not detected in PHP!

Contact your web host and ask them to enable GD image support for PHP.

ERROR: si-captcha.php plugin: imagepng function not detected in PHP!

Contact your web host and ask them to enable imagepng for PHP.