Hay veces que nos interesará, con fines prácticos en casi todas las ocasiones, generar cuentas de usuarios de forma rápida y añadirlos a grupos.
En un entorno real, esto lo podemos hacer leyendo datos de un fichero de datos y generando claves aleatorias que después proporcionaremos a los usuarios para que puedan iniciar sesión en el sistema y cambiar la contraseña proporcionada inicialmente.
En este caso práctico, vamos a crear un par de scripts que añadan una lista de usuarios al sistema usando como contraseña el nombre del usuario (lo se, es un error de seguridad, pero será el primer paso para refinar el script y generar contraseñas aleatorias) y vamos a crear otro script que añada un usuario a varios grupos distintos.
Desarrollo de los scripts
Para desarrollar los scripts vamos a utilizar nuestro máquina de Windows 10 conectada al servidor GNU/Linux Debian usando la unidad en red que creamos en el caso práctico anterior de esta serie de casos prácticos.
Para ejecutarlo nos conectaremos a través de ssh desde Windows 10 al sistema GNU/Linux Debian que hace de servidor de la organización.
Recuerda que cuando trabajamos con Notepad++ en Windows 10 y queremos guardar ficheros que sean leidos correctamente, y ejecutados si son scripts, en GNU/Linux tenemos que usar como Fin de Linea LF solo y no CRLF como se hace en Windows.
Configuración de fin de linea individual solo para este fichero
Configuración de fin de linea para todos los ficheros editados en Notepad++
addUserList.sh
El script recibirá una lista variable de usuarios por parámetro. Si no se pasa ningún parámetro mostraremos la sintaxis del comando.
Cuando se reciban uno o más nombres de usuario por parámetro se añadirá cada uno de los usuarios al sistema usando como contraseña su propio nombre de usuario.
Si el nombre de un usuario ya existe en el sistema, simplemente lo advertimos y continuamos con el siguiente.
Los usuarios se han creado en el sistema
Cada usuario tiene su directorio personal preparado para ser utilizado.
¿Habría alguna forma de configurar los permisos de los directorios personales de los usuarios creados para que sean más seguros (confidenciales)?
Ayuda!
En este script tenemos que utilizar el comando useradd para crear cuentas de usuario en lugar del comando adduser. Esto es así puesto que no queremos tener que insertar de forma interactiva la contraseña de cada usuario nuevo.
Para que se cree una cuenta con useradd con su directorio personal y utilizando la shell /bin/bash, tendremos que utilizar un par de opciones. Consulta la página de manual del comando useradd.
Para establecer la contraseña de una cuenta de usuario que ya existe en el sistema habitualmente utilizamos el comando passwd como root. No obstante, en este script no podemos utilizar este comando porque no queremos tener que interactuar en tiempo de ejecución con el script.
Tenemos que utilizar el comando chpasswd que espera recibir por entrada un tupla del estilo: «nombre_usuario:contraseña». Esta información se la tenemos que pasar a través de una tubería. Para poder pasar tan solo la cadena de texto nombre_usuario:contraseña utilizarmos el comando echo.
De esta forma, el comando para establecer una contraseña, por ClaveRoot#20, a un usuario, por ejemplo marinapg, será:
Yo afrontaría el script por partes. Primero realizaría la comprobación de errores, si es necesaria, mostrando la sintaxis del script si no se pasa parámetro.
Después me centraría en simplemente mostrar por pantalla, de forma individual, cada uno de los nombres de usuario en la lista de usuarios.
Por último, para cada usuario lo añadiría al sistema si no existe. Podemos utilizar una función que reciba por parámetro el nombre del usuario y realice todo el trabajo que haya que realizar con dicho usuario: si no existe crear su cuenta de usuario, configurar su directorio personal y su contraseña.
addUserGroup.sh
Vamos a crear un script que reciba por parámetro el nombre de un usuario y una lista de grupos a los que lo añadiremos. Es necesario que la cuenta de usuario exista en el sistema, aunque si alguno de los grupos de la lista no existe, tan solo advertiremos del suceso y continuaremos con el siguiente grupo.
Aquí tenemos algunos ejemplos de ejecución:
Ayuda!
En este script tenemos que obtener primero el nombre del usuario y después recorrer una lista de nombres de grupo a los que añadiremos al usuario. Aquí se hace fundamental el uso del comando shift en el momento adecuado. Si no recuerdas como funciona, consulta la ayuda de dicho comando.
Antes de tratar de insertar el usuario en ningún grupo, habría que comprobar que el usuario tiene cuenta de usuario en el sistema. Si no, no podemos continuar con el script.
Para cada grupo de la listas de grupos, tendremos que añadir la cuenta de usuario en el grupo. Antes de tratar de añadir un usuario en un grupo, tendríamos que comprobar que el grupo existe en el sistema. Si no existe, simplemente mostramos mensaje de advertencia y continuamos con el siguiente grupo.
La forma de afrontar el script sería primero ser capaces de obtener por un lado el nombre del usuario y después la lista de grupos, mostrando en pantalla dicha información uno a uno.
Una vez hecho esto, realizaría las comprobación de errores y después llevaría a cabo la tarea del script añadiendo al usuario en cada grupo.
Dejar una respuesta