8.2. Creando los usuarios

Al crear un usuario de un sistema Linux el comando adduser pone a disposición de éste, por defecto, un directorio que normalmente se encuentra en /home/usuario junto con una shell de comandos que le permiten ejecutar aplicaciones en la máquina. Lógicamente, todos los usuarios normales de gato podrían acceder a él y usarlo para alojar sus documentos web.

No parece ser ésta una solución adecuada a nuestra situación. Si creamos una cuenta para cada miembro de la comunidad, éste podría publicar en el servidor, pero también podría hacer muchas más cosas. Algunas no deseadas. Con el agravante de que, con el transcurso del tiempo, nuestro servidor tendría multitud de usuarios dispersos por toda la geografía, española cuando menos, con sus contraseñas fuera de nuestro control y a nadie se le escapa el peligro potencial de esta situación.

Nos planteamos entonces cómo permitir el acceso con posibilidad de alojar documentación e impedir todo lo demás a la gran mayoría de nuestros usuarios. Bien, la solución definitiva la desconocemos, sin embargo hemos usado una estrategia que funciona, aunque sin duda, habrá otras más elegantes y refinadas para conseguir este propósito.

8.2.1. Cuotas de disco

En primer lugar debemos limitar el espacio en disco para los usuarios de nuestro sistema.

8.2.2. Directorios personales

Ahora debemos proporcionar a cada usuario un espacio en nuestro disco y la posibilidad de escribir en él para que así pueda publicar sus trabajos en la web.

Creamos un grupo llamado huesped al que pertenecerían todos aquellos que tuviesen alojamiento web.

Los miembros de este grupo no podían tener una shell válida y, además, su espacio en disco debería estar situado bajo el control de Apache, puesto que la única finalidad era el hospedaje de sus documentos html.

La tarea de crear usuarios en estas condiciones decidimos automatizarla creando un simple script llamado adhu que reproducimos a continuación:

# Este script pretende automatizar la entrada
# de usuarios que tienen alojamiento web
# Se añaden al grupo huesped que tiene que estar creado
# tiene que crearse tambien un esqueleto /etc/skel2
# optativamente puede contener dos ficheros .welcome.msg y .quit.msg
# pedimos el nombre de usuario:
#! /bin/bash
echo -n "Intoduzca el nombre de usuario: "
read HUESPED
#Comprobamos si el usuario existe
if grep "^$HUESPED" /etc/passwd >/dev/null 2>&1

then
     echo "EL USUARIO YA EXISTE"
else
echo "CREANDO EL USUARIO $HUESPED"
#Añadimos el usuario
adduser -d /var/www/html/$HUESPED -m -k /etc/skel2 -g huesped $HUESPED
echo "Cambiando los permisos del directorio"
chmod 755 /var/www/html/$HUESPED
passwd $HUESPED
echo "USUARIO CREADO"
fi

Este script está suficientemente comentado, sin embargo vamos a insistir en la línea más relevante, tal vez.

adduser -d /var/www/html/$HUESPED -m -k /etc/skel2 -g huesped $HUESPED

El comando adduser empleado con los modificadores descritos, crea el directorio del usuario bajo /var/www/html[1], asigna automáticamente al usuario como miembro del grupo huesped y, tal vez lo más importante, la expresión -m -k /etc/skel2 hace posible que el usuario no disponga de una shell de comandos, puesto que el esqueleto definido en /etc/skel2 está vacío, bueno, en nuestro caso tiene los mensajes de bienvenida y despedida en sendos archivos ocultos. Este es su contenido:

drwxr-xr-x    2 root     root         4096 jun  3  2002 .
drwxr-xr-x   55 root     root         8192 mar  1 18:26 ..
-rw-r--r--    1 root     root          188 jun  3  2002 .quit.msg
-rw-r--r--    1 root     root          133 jun  3  2002 .welcome.msg

De no ser así, por defecto leería el contenido de la plantilla albergada en el esqueleto ubicado en /etc/skel que contiene normalmente lo siguiente:

drwxr-xr-x    3 root     root         4096 jun  3  2002 .
drwxr-xr-x   55 root     root         8192 mar  1 18:26 ..
-rw-r--r--    1 root     root           24 jul  9  2001 .bash_logout
-rw-r--r--    1 root     root          191 jul  9  2001 .bash_profile
-rw-r--r--    1 root     root          124 jul  9  2001 .bashrc
-rw-r--r--    1 root     root          118 ago 10  2001 .gtkrc
drwxr-xr-x    3 root     root         4096 jun  3  2002 .kde
-rw-r--r--    1 root     root         3511 ago  3  2001 .screenrc

Notas

[1]

Esto es opcional, ya que también podríamos indicarle al servidor Apache otro directorio raiz para colocar las webs personales. Sin embargo es una buena costumbre respetar los estándares e incluso situar el directorio /var como una partición independiente, lo que facilita las copias de seguridad y reduce el peligro en caso de catástrofe.