A continuación se proponen una serie de ejercicios a resolver utilizando shell scripts.
copiaSeguridad.sh
Crea un shell script llamado copiaSeguridad.sh que realizará una copia de seguridad del usuario cuyo nombre se pase como parámetro en un directorio de copias de seguridad que tendremos en nuestro sistema.
El script deberá copiar el directorio personal del usuario elegido dentro del directorio /backup, en un directorio con el nombre del usuario. Por ejemplo, para el usuario javierpm, deberá copiar el directorio personal de javierpm en el directorio /backup/javierpm.
Deberás tener en cuenta los siguientes requisitos:
- Se debe ejecutar el script como root.
- Se debe pasar por parámetro el nombre de un usuario con cuenta en el sistema. Esto implicará comprobar:
- Que se ha pasado un valor en el parámetro 1
- Que el valor pasado por parámetro corresponde con el nombre de una cuenta de usuario en el sistema.
- Se deberá obtener la información de la cuenta de usuario del fichero de cuentas de usuario del sistema. En concreto necesitamos la ruta del directorio personal del usuario al que se va a realizar la copia de seguridad.
- Se deben mantener los permisos de los ficheros almacenados en el directorio personal del usuario en el directorio de copia de seguridad.
- Tendrás que comprobar la ayuda del comando cp para ver que opción de las diposnibles mantiene estos permisos.
Ayudas
Lo primero que hay que tendrá que hacer nuestro script es realizar las comprobaciones de los requisitos iniciales. Es decir, debemos comprobar que podemos realizar la operación de copia de seguridad antes de tratar de hacerla.
Por tanto, primero tendremos que comprobar si el usuario que ejecuta el script es root. Si no es root, habrá que mostrar un mensaje de aviso y salir del programa con un código de error.
Los permisos de root son necesarios para poder copiar el directorio personal de cualquier usuario del sistema.
Una vez hemos comprobado que el script se ejecuta como root, debemos comprobar que se ha proporcionado el nombre del usuario del que se realizará la copia de seguridad. Si no se ha pasado ningún valor por parámetro, mostramos un mensaje de advertencia y salimos del programa con código de error.
Si el valor que se ha pasado por parámetro no identifica ninguna cuenta de usuario del sistema, no podremos realizar la copia de seguridad del directorio personal del usuario. Por tanto, hemos de comprobar si existe un usuario con el nombre de usuario proporcionado. Si no existe, debemos mostrar un mensaje de advertencia y salir del programa con un código de error.
El nombre del usuario, una vez comprobado, deberíamos almacenarlo en una variable que tenga un nombre significativo, en lugar de utilizar $1 como variable de acceso al parámetro pasado en primer lugar al script.
Una vez llegados a este punto, contamos con permisos de administrador, conocemos el nombre de la cuenta de usuario y sabemos que existe dicha cuenta en nuestro sistema. Ahora necesitamos determinar cual es la ruta de su directorio personal. Para ello, debemos consultar el fichero de cuentas de usuario del sistema y obtener de toda la información almacenada, la información del usuario concreto. De la línea de información del usuario concreto, tan solo necesitamos el campo que almacena la ruta de su directorio personal.
La ruta del directorio personal del usuario deberíamos almacenarla en una variable con un nombre significativo para facilitar su uso posterior. Otra recomendación sería contar con una variable que almacene la ruta del directorio destino de la copia de seguridad. Sabemos que la ruta del directorio de destino será «/backup/» seguida del nombre de la cuenta de usuario, que tenemos almacenada en una variable. Así que, elegimos un nombre de variable adecuado y asignamos este valor a dicha variable.
Ahora ya tenemos toda la información necesaria para llevar a cabo la copia de seguridad. El origen de la copia será la ruta del directorio personal del usuario, que la tendremos en una variable. El destino de el directorio de copia de seguridad que tendremos en otra variable. Recuerda, vamos a copiar un directorio y todo su contenido y, además, se pide que los permisos se mantengan en el destino. Debemos consultar la ayuda del comando de copia de ficheros y directorios para determinar que opciones deberíamos utilizar.
Solución
A continuación se proporciona la solución a este ejercicio, con una explicación de su desarrollo.
Shell script – creaDirectorios.sh
En una empresa se desea compartir una serie de información entre los usuarios de la misma utilizando directorios de acceso local dentro del sistema de ficheros. Para agilizar todos los pasos que se darán en el sistema y poderlo reutilizar más adelante en caso necesario, se ha decidido crear un script que lleve a cabo todo el proceso de creación y configuración de directorios en el sistema.
El objetivo es crear un directorio llamado empresa en el directorio raíz del sistema de ficheros. Dentro de este directorio empresa, se crearán los siguientes directorios: publico, privado, reporteros y editores.
La configuración de los directorios quedaría como sigue:
Tan solo podrán acceder al directorio empresa para realizar operaciones de lectura sobre los ficheros y directorios almacenados los usuarios del grupo empresa. El usuario marinapg podrá acceder para realizar cualquier tipo de operación dentro del directorio empresa.
En el directorio publico podrá acceder cualquier usuario del grupo empresa para realizar cualquier tipo de operación de lectura y escritura.
En el directorio reporteros tan solo podrán acceder los miembros del grupo reporteros pudiendo realizar operaciones de lectura. Además, el usuario alfredoff, podrá acceder para realizar cualquier tipo de operación.
En el directorio editores tan solo podrán acceder los miembros del grupo editores pudiendo realizar operaciones de lectura. Además, el usuario ramonam, podrá acceder para realizar cualquier tipo de operación.
En el directorio privado los únicos que podrán acceder para realizar operaciones de lectura serán los miembros del grupo empresa.
Además, dentro del directorio privado deberás crear un directorio para cada cuenta de usuario del sistema que pertenezca al grupo empleados. Por tanto, deberás consultar el fichero de cuentas de grupo del sistema y comprobar la lista de usuarios que pertenecen a dicho grupo. Vamos a suponer que ningún usuario del sistema tiene el grupo empresa como grupo principal.
Para cada usuario miembro del grupo empleado deberás crear un directorio dentro del directorio privado con el mismo nombre que el usuario y deberás configurar los permisos de dicho directorio para que solo dicho usuario pueda acceder a su directorio privado para realizar operaciones de lectura y escritura.
Este script deberá ser ejecutado por el usuario root para que pueda realizar su tarea.
Ayuda e indicaciones
Este script es un script que no recibe información por parámetro, toda la información está autocontenida en el script o será consultada en ficheros cuando sea necesario.
La única comprobación de entrada o inicio que hay que realizar será la del usuario que ejecuta el script: debe ser ejecutado como root. Si no es el caso, se debe advertir al usuario y salir del script.
Una vez se han cumplido los requisitos de ejecución deberíamos crear los directorios que nos solicitan. Para ello utilizamos los comandos de creación de directorios, que ya conocemos, que necesitemos.
Podemos comprobar que existen los directorios antes de crearlos o evitar mostrar mensajes de error en caso de que existan. En esta primera versión del script, no vamos a realizar comprobaciones de creación de directorios.
Una vez creados los directorios base, debemos configurar permisos, propietario y grupo como se pide en el enunciado. De nuevo la forma de hacerlo es utilizando los comandos de establecimiento de propietario, grupo y permisos que sea necesario en cada caso.
Por último, nos piden que creemos un directorio dentro del directorio /empresa/privado para cada usuario miembro del grupo empresa. Tendremos que obtener la lista de usuarios que pertenecen al grupo empresa y recorrerla, creando para cada usuario de la lista un directorio propio y configurando sus permisos como se solicita.
Esta es la mayor complejidad del ejercicio. Tendrás que conocer la ruta del fichero donde se almacenan los grupos del sistema y el formato en el que se guarda la información en el mismo.
Solución
A continuación se soluciona el ejercicio en un vídeo.