Vamos a realizar una serie de supuestos prácticos utilizando un caso práctico en el que vamos a configurar un servidor con GNU/Linux Debian para que proporcione servicio de hosting.
A lo largo de esta serie de ejercicios o supuestos dentro del caso práctico estudiaremos una serie de procesos de administración de sistemas, programación y automatización de tareas utilizando scripts de bash.
Script de gestión de hosting. Añadir un nuevo website
Vamos a crear un script newWebsite.sh que se encargue de proporcionar hosting web a nuestros usuarios del sistema. Para ello, vamos a crear un directorio para el sitio web que será gestionado por un usuario del sistema, que será su webmaster.
El script recibirá por parámetro el nombre del sitio web, que será una sola palabra, y el nombre del usuario del sistema que se encargará de gestionar dicho sitio web.
Primero comprobamos si el usuario existe en el sistema. Si el usuario no existe en el sistema, preguntamos al operador si desea crearlo. Si el operador decide crearlo, crearemos un nuevo usuario en el sistema. En caso contrario, terminamos con el script advirtiendo que es necesario seleccionar un usuario que tenga cuenta en el sistema para que administre el sitio web (webmaster).
Los sitios web estarán almacenados en el directorio /srv/web. Dentro de ese directorio, tendremos que crear un directorio para el nuevo sitio web si no existe ya. Si el directorio existe, mostraremos un mensaje advirtiendolo, si no existe lo creamos.
Además, cada sitio web tendrá una copia de seguridad dentro del directorio /backup/web con el nombre del sitio web. Si este directorio no existe, lo creamos.
Una vez con los directorios en el sistema, vamos a cambiar el propietario del directorio del sitio web y todo su contenido al usuario webmaster y como grupo asignaremos el grupo www-data. A continuación, cambiamos los permisos de acceso del directorio web, no de su contenido, para que el propietario tenga todos los permisos, el grupo tenga permiso de acceso y lectura y el resto de usuarios no tenga ningún permiso.
En el caso del directorio de backup del sitio web, estableceremos como propietario al usuario webmaster, pero como grupo dejaremos el grupo root. Los permisos de acceso para este directorio se proporcionarán tan solo al propietario, que será el único que podrá realizar operaciones de lectura y escritura dentro de este directorio.
Los usuarios webmaster contarán con un directorio llamado websites dentro de su directorio personal. Dentro de este directorio websites deberá haber un directorio con el nombre de cada uno de los sitios webs que gestiona dicho usuario.
De esta forma, una vez creados y configurados los directorios del sitio web, vamos a comprobar si existe el directorio del sitio web dentro del directorio websites dentro del directorio personal del usuario webmaster. Si no existe el directorio, lo creamos.
Dentro de este directorio, vamos a crear dos enlaces simbólicos con el nombre web y backup que apuntarán respectivamente al directorio del sitio web y del backup del sitio web de ese sitio. De esta forma, el usuario webmaster podrá acceder a sus sitios webs y backups a partir de sus enlaces simbólicos.
Para concluir, el script mostrará información extendida de permisos, propietario y grupo del directorio del sitio web y del directorio de backup del sitio web, junto con un mensaje en el que se indique que se ha creado correctamente la infraestructura para el sitio web.
Solución propuesta
Podemos crear un script que llame a las siguientes funciones:
Este sería un esqueleto propuesto para el script:
Veamos algunos ejemplos de ejecución del script
Todos estos ejemplos comprueban situaciones de error que son controladas por el script.
Con el script ya terminado, la ejecución del mismo quedaría así:
Veamos otro ejemplo de ejecución
Veamos si los enlaces simbólicos (accesos directos) se han creado y funcionan como debería.
Para crear el enlace simbólico a un directorio utilizamos el comando ln con la opción -s. Podemos consultar información sobre este comando en su página de manual.
Dejar una respuesta