Enunciado
En esta actividad vamos a crear un script que se encargue de crear cuentas de usuario y de grupo en el sistema, así como los recursos necesarios para cada usuario y grupo en base a los requisitos que nos soliciten.
Nos van a facilitar una hoja de cálculo en formato .ods de libreoffice con la información de empleados y departamentos a los que pertenecerá cada empleado.
Con esta información debemos conseguir automatizar la creación de cuentas de usuario, cuentas de grupo, configuración del sistema, creación y configuración de recursos (directorios, permisos, propietario y grupo).
Primero mostraremos una lista con los departamentos, esperamos a que el usuario pulse Enter para continuar y después crearemos los recursos necesarios para cada departamento.
Para cada departamento crearemos una cuenta de grupo si no existe en el sistema y un directorio del departamento que tendrá el nombre del departamento y estará almacenado en /educatica/2026/proyectos. Al directorio del departamento tan solo podrán acceder con permisos de lectura los miembros del departamento.
Una vez creados los departamentos, vamos a crear las cuentas de usuario para los empleados.
Este script deberá crear una cuenta de usuario para cada empleado proporcionado. El nombre de la cuenta de usuario se facilita en el propio fichero, lo único que habría que comprobar es que no exista ya una cuenta de usuario con el mismo nombre. Si esto sucediera habría que añadir al nombre un número en secuencia que comience por el 1 e iría aumentando en caso de que siguiera existiendo un usuario con ese nombre, incluido el nombre, hasta que no haya coincidencias.
Crearemos una cuenta de usuario para el usuario, asignándole como contraseña ClaveRoot#20, como shell /bin/bash y el directorio personal lo almacenaremos en /educatica/2026/staff con el nombre de la cuenta de usuario.
Ahora configuramos los recursos necesarios del usuario en el sistema. Añadiremos el usuario como miembro del grupo del departamento. Después, crearemos un directorio para el empleado dentro del directorio del departamento con su nombre de usuario. Por ejemplo, para el usuario solgm que sea miembro del departamento de finanzas su directorio del empleado en finanzas sería /educatica/2026/proyectos/finanzas/solgm.
A este directorio del empleado podrán acceder con permiso de lectura los miembros del departamento y con control total el propio usuario. El resto de usuarios no podrá realizar ninguna operación.
Para facilitar el acceso al directorio de su departamento crearemos un enlace simbólico con el nombre del departamento dentro del directorio personal del usuario que le lleve al directorio del departamento al que pertenece.
Pistas y recomendaciones
No sabemos leer un fichero en formato ods desde la terminal, a menos que creemos un programa por ejemplo en python que se encargue de leerlo y transformarlo a un formato con el que si podamos leer los datos desde la shell bash.
Pero esta solución es un poco complicada. Es muuuuuuuuucho más sencillo abrir el fichero ods con LibreOffice Calc y guardarlo en formato CSV (Coma Separated Values).
Este formato es el de un fichero de texto plano dónde se separa cada campo de cada registros por un carácter especial, por defecto «,», pero que podemos elegir nosotros a la hora de guardarlo.

Abrimos el fichero descargado con libreoffice calc.

Guardamos como csv

Configuramos el formato



Podemos seleccionar el separador si queremos que sea distinto a la coma. Guardamos y…

Ya tenemos el fichero como .csv, aunque libreoffice nos lo muestre con formato de hoja de cálculo. Nos damos cuenta de que nos sobra la primera fila así que podemos eliminarla.

Veamos el contenido del fichero desde terminal.

A ver si eres capaz de mostrar en pantalla solo los departamentos eliminando las repeticiones con comandos usando tuberías.
Para mostrar solo los departamentos, tendríamos que recortar y quedarnos solo con el primer campo.

Además, para quitar los repetidos tenemos que ordenar y quitar los repetidos, bien con uniq o bien con sort -u

Eres capaz de…
¿Copiar el fichero al servidor srv01?

Iniciamos sesión en remoto con ssh exportando las X para que se muestren ventanas gráficas en nuestro sistema.

Recorrer los departamentos uno a uno

Ahora creamos un for que recorra la lista de departamentos ordenada y sin repeticiones

Si en lugar de un echo llamo a una función que se encargue de crear los recursos necesarios para cada departamento, tendremos resuelta la parte de departamentos.

Quedaría algo así

Falta el control de errores 🙂

Vamos a ejecutarlo

Faltaría llevar a cabo el trabajo de la función creaDepartamento. Para ello nos centramos solo en esta función, nos olvidamos de bucles , de ficheros, de quién invoca a la función, etc. Nos centramos solo en lo que tiene que hacer la función y en lo que recibe

…

Mostramos la lista de departamentos y esperamos ENTER
Vamos a crear una función que se encargue de mostrar los departamentos y espere un enter.

Invocamos la función antes de entrar en el bucle que se encarga de crear los recursos de cada departamento en caso necesario

Vamos a ver cómo funciona

Si lo ejecutamos y pulsamos ENTER…

Ahora vamos a ver si ha funcionado esta parte como esperabamos

Ahora nos tocaría trabajar con los empleados para crear los recursos necesarios para cada empleado en el sistema: cuenta de usuario, añadir cuenta de usuario como miembro del grupo del departamento, crear y configurar directorio del empleado y crear enlace simbólico.
Como siempre, vamos a ir paso a paso, realizando refinamientos sucesivos.
Recorrer los empleados uno a uno

Investigamos…

Ahora vamos a recorrer esa lista de dos elementos uno a uno, separando cada elemento en una variable cuyo nombre sea significativo.

Vamos a probarlo

Una vez tengamos esta parte resuelta, podemos sustituir la línea con el echo con una llamada a una función que llamaremos creaUsuario $empleado $departamento

Habría que crear la función y hacer algo con los datos, eso lo vemos en el siguiente punto.

Si creamos la función y la usamos desde el bucle, tendríamos un código como este.

Determinando el nombre del usuario
Tenemos un problema, puede que haya nombres de usuarios repetidos. Para evitar este problema, si al intentar añadir un usuario al sistema esa cuenta de usuario ya existe, vamos a añadir un número, emplezando por el 1, al final de la cadena de texto que representa al nombre del usuario. Si aún así, sigue habiendo coincidencia, tendremos que incrementar el número.
Esto lo haremos mientras siga existiendo un usuario en el sistema con el nombre propuesto.
Esto hay que solucionarlo dentro de la función creaUsuario o en otra función que invoquemos (lo que más rabia te de O:))

Vamos a probarlo… hasta que no se añadan las cuentas de usuario de verdad no va a detectar colisiones.
Para hacer que haya al menos una colisión metemos un nuevo usuario.

Creando el usuario con lo que nos piden
Nos piden que la cuenta de usuario:
- Utiliza /bin/bash
- Esté dentro del directorio /educatica/2026/staff con el nombre del usuario
- Que pertenezca al grupo del departmaneto como miembro, no como grupo principal.
- Contraseña: ClaveRoot#20
¿Cómo podemos hacer esto?





Entonces, lo primero que tenemos que tener claro es que el directorio /educatica/2026/staff tiene que existir y tener una configuración 755 root root, por seguridad el caso del propietario, pero sobre todo asegurar que los usuarios pueden acceder.
Esto lo podemos hacer dentro de nuestro script o fuera del mismo antes de ejecutarlo.

Esta variable contiene la ruta del directorio dónde se almacenarán los directorios personales de los empleados.
Comprobamos si no existe el directorio baseHomeDir para crearlo y configurarlo antes de realizar ninguna operación en el script, puesto que es necesario que este directorio exista para poder crear directorios home de los empleados dentro.

Con esto nos aseguramos de que existe el directorio. Vamos a ver cómo ejecutaríamos el comando useradd
Podemos crear el directorio y crearnos un fichero

Vamos a probar el useradd

Ahora solo hay que meterlo en la función. Nos queda cambiar la contraseña, crear el directorio del empleado en el departamento, añadir el usuario como miembro del departamento, crear un enlace simbólico.

Lo vamos a ejecutar con el fichero de cinco lineas que hemos creado para pruebas

Parece que funciona!!!

Vamos a lanzar con todo 😀

Termina

Veamos



Así terminamos con este script tan divertido 🙂
Dejar una respuesta