Gestión de usuarios en Linux
Cuentas de usuario
Para un sistema operativo Linux un usuario es la asociación de un nombre, el login, con un UID (User ID) y, al menos, un GID (Group ID.
- la identificación consiste en saber quién es quién para poder determinar los privilegios y permisos del usuario que se conecta.
- La autenticación es el proceso por el que el usuario aporta una prueba que permite demostrar qué es quién dice ser. Debería ser una información que solo conoce o tiene el usuario. Normalmente para autenticarnos utilizamos una contraseña, pero también podemos configurar nuestro sistema para que utilice otros mecanismos como una tarjeta inteligente, DNI electrónico, huella dactilar, iris, etc
El UID identifica al usuario durante su conexión al sistema. Se utiliza para el control de los privilegios, permisos y de los procesos que inicia.
El concepto de cuenta de usuario está asociado al concepto de sesión. Entendemos por sesión el tiempo consecutivo en el que una cuenta de usuario se encuentra activa en el sistema operativo. Por lo tanto, se prolonga desde que el usuario se autentica, momento en el que se dice que ha iniciado sesión, hasta que abandona el sistema, que se conoce como cierre de sesión.
Los atributos básicos del usuario se almacenan la mayoría en el fichero /etc/passwd
y para cada uno de ellos son:
- login: nombre de inicio de sesión
- contraseña: se suele almacenar cifrada en el fichero
/etc/shadow
- UID
- GID
- desccripción
- directorio de inicio de sesión
- interprete de comandos de inicio de sesión
Para cuentas especiales con derechos extendidos o asociadas a programas o servicios su UID es menor de 100. Por ejemplo, el usuario root suele tener UID 0. Luego, dependiendo de la distribución de Linux, a los usuarios sin privilegios particulares se les asigna UID de forma consecutiva a partir de cierto valor. En el caso de Ubuntu, este valor inicial es 1000. Este parámetro puede modificarse en el fichero /etc/login.defs
Los grupos
Cada usuario forma parte de, al menos, un grupo. Como hemos visto, cada grupo se identifica por su GID. Un usuario puede pertenecer a varios grupos. Cada grupo tiene asociados unos privilegios, al pertenecer un usuario a un grupo, adquiere los privilegios asociados al mismo. Si, por ejemplo, el usuario user1 tiene como grupo secundario video y un archivo tiene permisos de escritura para ese grupo, entonces user1 tendrá derecho a modificar su contenido.
El comando id permite conocer la información básica de un usuario (uid, gid y grupos secundarios)
$ id user1 uid=1000(user1) gid=1000(users) grupos=1000(users),4(adm),7(video),105(fuse),108(lpadmin),125(sambashare),129(vboxusers),137(libvirtd),130(lxd),137(libvirtd)
Las contraseñas
Las contraseñas permiten autenticar a los usuarios. Deben ser lo suficientemente complejas como para que no puedan ser descubiertas fácilmente y lo suficientemente intuitivas como para que sean sencillas de recordar.
Las contraseñas se almacenan cifradas en el fichero /etc/shadow
utilizando un algoritmo de cifrado (MD5, SHA, Blowfish, …)
La administración de usuarios y grupos solamente puede realizarlas el usuario root utilizando los comandos de gestión de usuarios. Las tareas y los comandos para realizarlas son:
- Creación de usuarios / useradd, adduser
- Modificación de usuarios / usermod
- Eliminación de usuarios / userdel, deluser
- Creación de grupos / groupadd
- Modificación de grupos / groupmod
- Eliminación de grupos / groupdel
- Añadir usuarios a un grupo / adduser
- Quitar usuarios de un grupo / deluser
- Cambiar la contraseña de un usuario / passwd
Los ficheros de configuración
Los archivos con información asociada a la gestión de usuarios y grupos son los siguientes:
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/etc/default/useradd
/etc/adduser.conf
/etc/deluser.conf
/etc/login.defs
/etc/shells
/etc/skel
Podemos ver más detalles de los mismos en la siguiente página
Operaciones sobre usuarios
Creación
Crear un usuario implica las siguientes acciones:
- Añadir una línea en
/etc/passwd
- Añadir una línea en
/etc/shadow
- Añadir información en
/etc/group
- Crear el directorio personal y copiar dentro del mismo el contenido de
/etc/skel
- Cambiar los permisos y el propietario del directorio personal
- Cambiar la contraseña
Aunque no es aconsejable, se puede crear un usuario editando los ficheros implicados, creando manualmente la carpeta del usuario, copiando los ficheros del perfil por defecto y asignando los permisos y propietarios del usuario. Para facilitar esta tarea el sistema nos provee de las utilidades useradd y adduser. Al ser una tarea administrativa la gestión de los usuarios solo la podrá realizar un usuario con privilegios de administración.
useradd
Este comando añade una nueva cuenta de usuarios. Las opciones más importantes del mismo son:
Opción | Función |
---|---|
-m | crea también el directorio personal |
-u | permite especificar manualmente el UID del usuario |
-g | permite especificar el grupo principal del usuario (por GID o por nombre) |
-G | permite especificar separados por comas los grupos adicionales del usuario |
-d | permite especificar manualmente la ruta de la carpeta de inicio del usuario |
-k | permite especificar manualmente la ruta de la plantilla del usuario |
-s | permite especificar manualmente el interprete de comandos por defecto del usuario (los interpretes de comandos disponibles se encuentran en el fichero /etc/shells ) |
-p | permite especificar manualmente la contraseña al usuario, pero debemos tener en cuenta que la contraseña debe estar cifrada |
Ejemplo:
$ sudo adduser -m -u 1020 -g users -G lp,video -s /bin/bash -d /home/sebastian sebas
Ejemplo:
$ echo "smr1234" | mkpasswd -s -m sha-512 $6$w3rnjyVU$LDw6e1vbplWjF2IcwTGaySiiLRHBTYLnWqA4L1xawGpniCeHKqawYtgXNTCVPybMObLLJLcrtc7jZAAKmXKkp0 $ sudo adduser -m -s /bin/bash -p $6$w3rnjyVU$LDw6e1vbplWjF2IcwTGaySiiLRHBTYLnWqA4L1xawGpniCeHKqawYtgXNTCVPybMObLLJLcrtc7jZAAKmXKkp0 anabel
adduser
Permite también añadir usuarios al sistema, nos solicita sus datos principales y su contraseña. También permite añadir un usuario existente a un grupo que también exista previamente en el sistema.
Ejemplo: crear usuario
$ sudo adduser anabel Añadiendo el usuario `anabel' ... Añadiendo el nuevo grupo `anabel' (1003) ... Añadiendo el nuevo usuario `anabel' (1001) con grupo `anabel' ... Copiando los ficheros desde `/etc/skel' ... Introduzca la nueva contraseña de UNIX: Vuelva a escribir la nueva contraseña de UNIX: passwd: contraseña actualizada correctamente Cambiando la información de usuario para test Introduzca el nuevo valor, o presione INTRO para el predeterminado Nombre completo []: Número de habitación []: Teléfono del trabajo []: Teléfono de casa []: Otro []: ¿Es correcta la información? [S/n]
Ejemplo: Añadir el usuario Pedro al grupo de alumnos
# adduser pedro alumnos
Opción | Función |
---|---|
- -ingroup <nomgrupo> | Crea el usuario con nomgrupo como grupo principal |
- -home <nomdir> |
passwd
Como acabamos de ver, useradd solo nos permite asignar contraseña al usuario si se la pasamos ya cifrada con la opción -p.
El comando passwd permite gestionar las contraseñas y además, las autorizaciones de inicio de sesión, así como la mayoría de campos del fichero /etc/shadow
Cualquier usuario puede cambiar su contraseña en el plazo especificado en el campo 4 de /etc/shadow
. La opción por defecto del comando cambia la contraseña del usuario actual. Se nos pedirá la contraseña actual por seguridad.
$ passwd Cambiando la contraseña de usuario. (actual) contraseña de UNIX: Introduzca la nueva contraseña de UNIX: Vuelva a escribir la nueva contraseña de UNIX: passwd: contraseña actualizada correctamente
El usuario root o un usuario con privilegios sudo puede cambiar la contraseña de cualquier usuario del sistema.
Gestionar la validez
Para gestionar los campos de /etc/shadow
tenemos las siguientes opciones disponibles para passwd:
Opción | Función |
---|---|
-l | Lock: bloquea una cuenta al añadir una ! delante de la contraseña cifrada. |
-u | Unlock: desbloquea/activa una cuenta. |
-d | suprime la contraseña de una cuenta. El usuario podrá iniciar sesión sin utilizar contraseña. |
-n <num> | la contraseña tendrá una validez mínima de num días (no podrá cambiarla antes). |
-x <num> | la contraseña tendrá una validez máxima de num días. |
-w <num> | num días antes de un aviso. |
-i <num> | periodo de gracia de num días antes de desactivación si ha vencido la contraseña. |
-S | muestra el estatus de una cuenta |
Ejemplo:
$ sudo passwd -n 10 -x 60 -w 7 -i 4 anabel passwd: información de caducidad de la contraseña cambiada.
En el ejemplo anterior se modifica la cuenta de anabel de la siguiente manera:
- Debe esperar 10 días para poder cambiar la contraseña
- Su contraseña es válida por 60 días
- Se le avisa 7 días antes de que debe cambiar su contraseña
- Si no cambia su contraseña tras 60 días dispone de 4 días para hacerlo antes de que sea bloqueada.
La línea correspondiente en el fichero /etc/shadow
quedaría de la siguiente forma:
$ sudo cat /etc/shadow | grep anabel anabel:$6$3p15OBHg$BNhsWB4RVgKQk1x.mqmfidjVWYxn9yMOoHAxYhzTdL7BCqMSvTjwHdHzTtSaQtqsVkQQgiZxKbgcxwIhHAk4W.:17972:10:60:7:4::
Dónde el tercer campo, 17972 indica el número de días desde el 1 de enero de 1970 hasta el última cambio de contraseña. El resto de parámetros son los que acabamos de cambiar (4º número de días sin poder cambiar la contraseña; 5º número de días de validez de la contraseña; 6º número de días antes de que caduque en los que se avisará de que hay que cambiar la contraseña; 7º periodo de gracia). Mas detalles en el siguiente enlace
De forma similar, podemos gestionar la validez utilizando el comando chage. Podemos utilizar los siguientes parámetros:
Opción | Función |
---|---|
-m | Mindays: equivale a passwd -n |
-M | Maxdays: equivale a passwd -x |
-d | Fecha de última modificación de la contraseña (desde el 1/1/1970) |
-E | Fecha de vencimiento de la contraseña (desde el 1/1/1970) |
-I | Inactive: equivale a passwd -i |
-l | List: muestra todos los detalles |
Modificación
Para modificar los datos de una cuenta de usuario podemos utilizar usermod. Las opciones son similares a las de useradd. Algunas de ellas son:
Opción | Función |
---|---|
-m | mover la carpeta de inicio. Implica la opción -d para especificar un nuevo directorio personal |
-u <UID> | permite especificar manualmente el nuevo UID del usuario |
-g <GID> | permite especificar manualmente el nuevo GID del usuario |
-l <login> | permite modificar el nombre del usuario |
-d | permite especificar la nueva ruta de la carpeta de inicio del usuario |
-s | permite especificar el nuevo interprete de comandos por defecto |
-L | bloquea la cuenta, como passwd -l |
-U | desbloquea la cuenta, com passwd -u |
Ejemplo:
$ sudo usermod -l anaisabel -m -d /home/anaisabel anabel [sudo] contraseña para usuario: usuario@asus-i7:~$ grep anaisabel /etc/passwd anaisabel:x:1001:1003:,,,:/home/anaisabel:/bin/bash
eliminación
El comando userdel nos permite eliminar un usuario. Por defecto no suprime su directorio personal. Para ello utilizamos la opción -r.
$ sudo userdel -r anaisabel
Operaciones sobre grupos
Creación
Se puede crear un grupo directamente editando el archivo /etc/group
o bien utilizar las utilidades del sistema disponibles.
groupadd
Su sintaxis es sencilla. Acepta la opción -g para especificar un GID concreto.
Ejemplo:
$ sudo addgroup familia Añadiendo el grupo `familia' (GID 1004) ... Hecho. $ grep familia /etc/group familia:x:1004:
Modificación
El comando groupmod permite modificar un grupo. Sus parámetros son los siguientes:
Opción | Función |
---|---|
-n <nombre> |Renombra el grupo | | -g <GID> | Modifica el GID del grupo. Hay que tener en cuenta que no modifica el grupo al que pertenecen los archivos con el GID anterior |
Ejemplo:
$ sudo groupmod -n familiares familia
Eliminación
El comando groupdel permite eliminar un grupo. Si el grupo que queremos eliminar es el grupo principal de un usuario no lo permitirá. La acción que realiza es eliminar la línea correspondiente del fichero /etc/group
Ejemplo:
$ sudo groupdel familiares
Contraseña
El comando gpasswd permite asignar una contraseña a un grupo. La contraseña se almacena en el fichero /etc/gshadow