La gestión de usuarios en cualquier sistema operativo es una de las tareas rutinarias básicas de un administrador de sistemas.

En el caso de un sistema operativo basado en Linux, suele implicar la creación de cuentas de usuario, la modificación de cuentas existentes como el cambio de su directorio de inicio, el shell por defecto, el bloqueo/desbloqueo de una o más cuentas y la eliminación de cuentas de usuario.

Antes de investigar los comandos y procesos para llevar a cabo estas tareas, profundicemos brevemente en cómo se pueden clasificar las cuentas de usuario en Linux. Además, tenga en cuenta que a menos que se especifique explícitamente, los comandos dados funcionarán en la mayoría de las distribuciones comunes de Linux.

Tipos de usuario

Usuario raíz

El usuario root es el administrador del sistema operativo con todos los permisos para realizar operaciones. Normalmente, sólo root puede instalar/desinstalar o actualizar programas y bibliotecas básicas del sistema. Es la única cuenta de usuario con privilegios para todo el sistema.

Por lo tanto, el usuario root es el usuario más poderoso del sistema.

Usuario especial

Son los usuarios que no tienen acceso al sistema. No tienen todos los privilegios del usuario root. Dependiendo de la cuenta, asumen diferentes roles especializados.

Se crean automáticamente en el momento de la instalación de cualquier aplicación. bin, sync, lp, mail, operator, squid son algunos de los ejemplos de usuarios especiales.

Usuarios comunes

Los usuarios comunes sólo tienen privilegios totales en su directorio de trabajo, normalmente su directorio personal. No tienen privilegios para gestionar el sistema o instalar el software. No pueden realizar estas tareas sin tener privilegios especiales a través de sudo.

Añadir usuario

Debian/Ubuntu

En un sistema basado en Debian o Ubuntu, hay un par de opciones para añadir usuarios desde la CLI. El primer comando es adduser, que es un script Perl y utiliza el comando useradd en el backend cuyo uso veremos más adelante.

Dado que añadir un usuario es una tarea privilegiada, necesitará utilizar sudo como prefijo y username como argumento. Se pueden especificar otros detalles según se solicite. Excepto el nombre de usuario y la contraseña, el resto de detalles son opcionales. Podemos verificar que el usuario ha sido creado utilizando el comando id.

$ sudo adduser johndoe
Añadiendo usuario `johndoe' ...
Añadiendo nuevo grupo `johndoe' (1003) ...
Añadiendo nuevo usuario `johndoe' (1003) con el grupo `johndoe' ...
Creando directorio personal `/home/johndoe' ...
Copiando archivos de `/etc/skel' ...
Nueva contraseña:
Vuelva a escribir la nueva contraseña:
passwd: contraseña actualizada correctamente
Cambiando la información de usuario para johndoe
Introduzca el nuevo valor, o pulse ENTER para el valor por defecto
        Nombre completo []: John Doe
        Número de habitación []:
        Teléfono del trabajo []:
        Teléfono de casa []:
        Otro []:
¿Es correcta la información? [S/N] S
$
$ id johndoe
uid=1003(johndoe) gid=1003(johndoe) groups=1003(johndoe)
$

CentOS/RHEL/Fedora (Incluyendo Debian/Ubuntu)

El siguiente comando, useradd funcionará en todas las distribuciones de SO basadas en RHEL así como funciona igualmente bien en hosts Ubuntu/Debian. La sintaxis más simple (sin opciones extra) para crear un nuevo usuario es:

$ sudo useradd <nombredeusuario>

Ejemplo:

$ sudo useradd janedoe

El comando useradd soporta múltiples opciones que pueden ser especificadas mientras se crea el usuario, siendo las más comunes ID de usuario (UID), ID de grupo (GID), shell por defecto y directorio home, etc. A continuación se muestra un ejemplo:

$ sudo useradd -s /bin/sh -d /data/newhome -c "Jane Doe" -u 1005 janedoe

Puede verificar el usuario recién creado utilizando el comando id:

$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe)
$

Modificación del usuario

A menudo es necesario modificar alguna propiedad de los usuarios existentes en función de los requisitos de la organización, las peticiones de los usuarios o las migraciones del sistema. La mayoría de estas propiedades son fáciles de modificar, aunque debemos asegurarnos de cómo afectará al entorno del usuario y al acceso a los archivos que posee o a los que accede.

Shell predeterminado

El shell por defecto es el shell CLI creado cuando un usuario lanza una nueva sesión CLI ya sea localmente o vía SSH. La mayoría de los sistemas modernos tienen un Bash de usuario por defecto aunque puede variar en función de la distribución de Linux o del entorno del usuario. Para modificar el shell por defecto de un usuario, utilice:

$ sudo usermod -s <shell> <nombredeusuario>

Ejemplo:

$ getent passwd janedoe
janedoe:x:1005:1005::/data/newhome:/bin/sh
$ sudo usermod -s /bin/bash janedoe
$ getent passwd janedoe
janedoe:x:1005:1005::/data/nuevohogar:/bin/bash
$

Como puede ver en la salida anterior, el shell se ha cambiado de /bin/sh a /bin/bash para el usuario janedoe.

Directorio de inicio

Al igual que el shell por defecto, el directorio personal de un usuario puede modificarse a una ubicación diferente utilizando:

$ sudo usermod -d <ruta_nuevo_directorio> <nombre_usuario>

En el siguiente ejemplo, el directorio personal del usuario janedoe se ha modificado a /data/janedoe:

$ getent passwd janedoe
janedoe:x:1005:1005::/data/nuevohogar:/bin/bash
$ sudo usermod -d /data/janedoe janedoe
$ getent passwd janedoe
janedoe:x:1005:1005::/data/janedoe:/bin/bash
$

Antes de realizar el cambio, asegúrese de que el nuevo directorio tiene la propiedad y los permisos correctos. De lo contrario, el usuario puede tener problemas durante el inicio de sesión o al trabajar en el nuevo directorio raíz.

ID de usuario

Puede cambiar el ID de usuario de un usuario existente utilizando:

$ sudo usermod -u <nuevo_id> <nombre_usuario>

Ejemplo:

$ getent passwd janedoe
janedoe:x:1005:1005::/data/janedoe:/bin/bash
$ sudo usermod -u 1010 janedoe
$ getent passwd janedoe
janedoe:x:1010:1005::/data/janedoe:/bin/bash
$

De nuevo, cambiar el UID cambia la forma en que el sistema de archivos Linux asigna la propiedad y el permiso a un archivo o directorio. Asegúrese de que el directorio principal del usuario y su contenido y todos los demás archivos en cualquier parte del sistema, originalmente propiedad del usuario (con el antiguo UID), se cambia a UID mapeado. No hacerlo puede causar problemas en la sesión CLI y en el acceso a los archivos por parte del usuario.

Grupo por defecto

El grupo por defecto suele ser el UID por defecto del usuario, que se crea durante la creación del usuario a menos que se especifique otro UID. Linux le permite modificar el grupo por defecto de un usuario utilizando también el comando usermod. Esta es la sintaxis a utilizar

$ sudo usermod -g <nuevo_gid o nombre_grupo> <nombre_usuario>

He aquí un ejemplo:

$ getent passwd janedoe
janedoe:x:1010:1005::/data/janedoe:/bin/bash
$ sudo usermod -g 1001 janedoe
$ getent passwd janedoe
janedoe:x:1010:1001::/data/janedoe:/bin/bash
$

De nuevo, asegúrese de que el nuevo ID de grupo está establecido en el directorio personal del usuario, en sus contenidos y en todos los demás archivos o directorios aplicables para migrar correctamente sus permisos de propiedad.

Añadir/eliminar grupos

Además del grupo por defecto, un usuario en Linux puede formar parte de grupos secundarios. Siempre podemos añadir o eliminar grupos adicionales a los que pertenezca un usuario utilizando el comando usermod.

$ sudo usermod -a -G <id_grupo o nombre_grupo> <nombre_usuario>

Ejemplo:

$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe)
$ sudo usermod -a -G docker janedoe
$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe),1001(docker)
$

Del mismo modo, para eliminar un usuario de uno de los grupos secundarios, utilice el comando gpasswd como se muestra a continuación:

$ sudo gpasswd -d <nombredeusuario> <nombredegrupo>

Ejemplo:

$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe),1001(docker)
$ sudo gpasswd -d janedoe docker
Eliminación del usuario janedoe del grupo docker
$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe)
$

Comentario GECOS

El campo GECOS en /etc/passwd contiene la información o comentario del usuario. Podemos modificar esta información para un usuario existente como:

$ sudo usermod -c <comentario> <nombredeusuario>

Ejemplo:

$ getent passwd janedoe
janedoe:x:1005:1005::/data/janedoe:/bin/bash
$ sudo usermod -c "Jane Doe - Administrador del sistema" janedoe
$ getent passwd janedoe
janedoe:x:1005:1005:Jane Doe - System Admin:/data/janedoe:/bin/bash
$

Tenga en cuenta que si su comentario o detalles de usuario contienen espacios, encierre ese campo entre comillas como se hace en el ejemplo anterior.

Nombre de usuario

El nombre de inicio de sesión del usuario también puede cambiarse mediante el comando usermod utilizando la bandera -l:

$ sudo usermod -l <nuevo_nombre_usuario> <antiguo_nombre_usuario>

Ejemplo:

$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe)
$ sudo usermod -l jane_doe janedoe
$ id jane_doe
uid=1005(jane_doe) gid=1005(janedoe) groups=1005(janedoe)
$

Recuerde actualizar las referencias de usuario según el nuevo nombre siempre que lo utilice. Incluso en comandos como id, debe especificarse el nuevo nombre de usuario.

Eliminación de usuario

Un usuario puede ser eliminado de Linux utilizando el comando userdel.

$ sudo userdel <nombredeusuario>

Ejemplo:

$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe)
$ sudo userdel janedoe
$ id janedoe
id: 'janedoe': no existe tal usuario
$

Para eliminar un usuario junto con su directorio raíz y su spool de correo, añada también la bandera -r.

$ sudo userdel -r <nombredeusuario>

Específicamente para los sistemas basados en Ubuntu, también puede utilizar el comando deluser para eliminar un usuario:

$ sudo deluser <nombredeusuario>

Del mismo modo, para eliminar también el directorio personal y el spool de correo, utilice:

$ sudo deluser --remove-home <nombredeusuario>

Para obtener información detallada y otras opciones compatibles, consulte la página principal de los distintos comandos mediante:

$ man adduser
$ man useradd
$ man usermod
$ man deluser
$ man userdel

Conclusión

Este artículo ha mostrado varios aspectos de la gestión de usuarios en un sistema Linux. Esto incluye una explicación de varias categorías de usuarios y cómo añadirlos y eliminarlos. También cubre varias opciones que ayudan a modificar los parámetros de un usuario existente. Aunque no cubre todas las posibilidades soportadas por varios comandos, cubre muchas de las tareas comunes de administración que un administrador de sistemas encontrará en su trabajo diario.

Puede que también le interese leer: ¿Cómo eliminar archivos y directorios en Linux?