educación, informática y demás

2309 - Automatization Scripts

Ejercicio de automatización con Bash Shell Script

Sabemos como crear cuentas de usuario y grupos locales en un sistema GNU/Linux utilizando comandos. El problema que nos puede surgir es cuando queremos crear varias cuentas de usuario y varias cuentas de grupo. Es más, podemos encontrarnos con casos en los que queramos crear una cantidad muy grande de cuentas de usuario y de grupo

Creando usuarios y grupos

Para crear usuarios y grupos utilizamos los comandos: adduser y addgroup habitualmente. Existen más comandos como: useraddo o groupadd, sin embargo estos comandos son más complejos de utilizar y a la vez más potentes puesto que permiten más opciones de configuración. De hecho, adduser y addgroup son comandos que utilizan para realizar su función los comandos useradd y groupadd, liberando de su complejidad al admnistrador. Es decir, son comandos que van a hacer de interface o front-end de otros comandos de más bajo nivel.

Practica 01

Vamos a crear cuentas de usuario y añadirlas a grupos como se especifica en la siguiente tabla:

UsuarioGrupos
alfredoffcontabilidad, educatica
marinapgcontabilidad, ventas, educatica
ramonamventas, educatica
Usuarios y grupos a crear y configurar

El problema de los comandos adduser y addgroup es que solo admiten un único parámetro, el de la cuenta de usuario a crear y del grupo a crear respectivamente.

También tendremos problemas a la hora de añadir varios usuarios a un mismo grupo, puesto que tendremos que realizar la tarea uno a uno por el mismo motivo: tan solo podemos añadir un usuario a la vez a un grupo con el comando adduser o addgrup.

Solución

Practica 02

Estaría bien tener alguna herramienta que permita crear, si no existen, varias cuentas de usuario de una sola vez. Para ello, vamos a crear un script.

El script, addUserList.sh, recibirá por parámetro una lista variable de nombres de cuentas de usuario. Cuando hablamos de lista variable de parámetros queremos indicar que el operador podrá proporcionar uno o varios parámetros. No sabemos cuantos proporcionará.

El script se debe encargar para cada parámetro pasado crear si no existe una de usuario en el sistema con el nombre del usuario proporcionado en el parámetro.

Si nos fijamos, al utilizar adduser tenemos que indicar la contraseña y esto puede ser un problema a la hora de crear varias cuentas de usuario de forma automática. Así que, tendremos que utilizar el comando useradd para crear la cuenta de usuario y que no nos pida contraseña y el comando chpasswd para establecer una contraseña.

Hemos pensado que vamos a establecer como contraseña de una cuenta de usuario creada con este script el nombre del usuario.

Pistas

  • Consulta la ayuda del comando useradd y echa un ojo a la opción -m y -s.
  • Consulta la ayuda del comando chpasswd. Tendremos que utilizar una tubería para pasarle el nombre del usuario y la contraseña separados por :.
  • Consulta la ayuda del comando for. help for.

Más consejos

Crea primero un script que tan solo recorra la lista de parámetros mostrándolos en pantalla.

Cuando sepas recorrer la lista de parámetros, entonces realiza la acción que se pide para cada parámetro. En este caso, el siguiente paso sería tan sencillo como mostrar un mensaje indicando si el usuario del parámetro existe o no en el sistema.

La siguiente evolución será si no existe la cuenta de usuario en el sistema, la creamos con useraddd y le establecemos contraseña con chpasswd.

Solución

Practica 03

Vamos a hacer un script para automatizar la creación de grupos y añadir varios usuarios a un grupo. El script se llamara addGroupList.sh y recibirá en el primer parámetro el nombre de un grupo y en el resto de parámetros nombres de usuario que deberían pertenecer a este grupo.

Solución

Funciona, pero el código podríamos mejorarlo un poco para facilitarnos su comprensión.

Podríamos haber creado una función exclusiva para crear el grupo si no existe, algo así como createGroup.

En cuanto a los usuarios, podríamos hacer algo similar, crear una función llamada createUser a la que le pasemos por parámetro el nombre del usuario actual o coger el nombre del usuario actual de la variable global usuario.

Al final, si utilizamos funciones tendríamos un cuerpo de script tan simple como este:

Las funciones serían las siguientes

Esta aproximación tiene una desventaja, que hemos creado quizá demasiadas funciones y que hay que buscar un equilibrio entre la reutilización de código y legibilidad de un programa y crear funciones para absolutamente todo. Al final, nuestro papel es el de administradores del sistema y tenemos que conocer los comandos que se utilizan para administrarlo. Es decir, para nosotros no es difícil entender grep -w ^$grupo /etc/group, así que tendremos que decidir hasta que punto es bueno crear funciones para abstraernos de detalles, el nivel hasta el que queremos llegar.

Práctica 04

El siguiente paso sería poder leer los datos de un fichero. Vamos a crear un script que llamaremos addGroupFile.sh que obtendrá por parámetro la ruta de un fichero de texto en el que tendremos la siguiente información:

Tenemos que recorrer el fichero creando el grupo si no existe y añadiendo los usuarios, que crearemos si no existen, a dicho grupo.

Pista

Vamos a recorrer línea a línea el fichero, procesamos los datos para adecuarlos a un formato que nos interese y hacemos uso de los scripts que ya tengamos creados.

Practico 05

Al reves… vamos a leer del fichero de cuentas de grupo y de cuentas de usuario para generar un fichero con información de grupos y usuarios usando como separador el «;».

Dejar una respuesta