Vamos a ver las tres cuestiones más básicas de la administración de usuarios:

  • useradd Crear usuario
  • userdel Borrar usuario
  • usermod Modificar usuario

Crear usuario en linux

useradd es el comando utilizado por linux para crear un usuario. También podría utilizarse el comando AddUser como alternativa. La diferencia entre uno y otro, es que el comando useradd es el comando nativo de linux para este propósito mientras que el comando AddUser es un script perl que hace uso del comando useradd.

La creación de un usuario en Linux afecta básicamente a tres ficheros que ya hemos visto en el post sobre el sistema de usuarios linux:

  • /etc/passwd
  • /etc/group
  • /etc/shadow

Opciones del comando useradd

En la siguiente tabla, muestro algunas de las opciones más interesantes de este comando. Debemos de tener en cuenta que estas opciones pueden utilizar valores por defecto en caso de no ser especificados. Estos valores por defecto los tendremos en /etc/login.defs y /etc/default/useradd

PARÁMETROFUNCIÓN
-cAñade comentarios al usuario
-dEl usuario será creado usando el valor HOME_DIR como valor para el directorio por defecto tras el login
-eFecha en la que el usuario será deshabiliado
-gAsigna el grupo principal al usuario conforme al GID que especifiquemos. Si no se especifica y la variable USERGROUPS_ENAB está habilitada en /etc/login.defs, se creará un grupo automáticamente con el mismo nombre que el usuario
-GLista de grupos secundarios al que pertenecerá el nuevo usuario. Separada por «,».
-kEspecifica el esqueleto del directorio home del usuario. Si no se especifica, se aplica la configuración por defecto definida en la variable SKEL en /etc/default/useradd o por defecto el contenido de /etc/skel
-mCrea el home del usuario si no existe y añade el esqueleto conforme a las especificaciónes por defecto o conforme al parámetro -k
-MNo crea el home del usuario aunque así este especificado en la variable CREATE_HOME de /etc/login.defs
-NNo crea un grupo para el usuario aunque así esté especificado en la variable USERGROUPS_ENAB de /etc/login.defs
-pEspecifica la contraseña del usuario. Si no se especifica, el usuario será creado sin contraseña
-rCrea el usuario como cuenta de sistema, con las especificaciones propias de ese tipo de usuario
-sEspecifica el tipo de shell que tendrá el usuario por defecto
-uEspecifica el valor del UID del usuario creado
-UCrea un grupo con el mismo nombre que el usuario y asigna el grupo al usuario

Creación de un usuario linux básico

Vamos a ver mediante la creación de un usuario sin especificar muchas opciones, cual es el comportamiento del comando por defecto.

Primero vamos a ver cuales son las especificaciones que tenemos como punto de partida en los archivos de configuración por defecto:

  • /etc/login.defs
  • /etc/default/useradd
  • /etc/skel

Contenido de las variables más relevantes de login.defs en materia de creación de usuarios:

root@monitor# cat /etc/login.defs
#       PASS_MAX_DAYS   Maximum number of days a password may be used.
#       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
#       PASS_WARN_AGE   Number of days warning given before a password expires.
#
PASS_MAX_DAYS   99999
PASS_MIN_DAYS   0
PASS_WARN_AGE   7
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN                  1000
UID_MAX                 60000
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN                  1000
GID_MAX                 60000
DEFAULT_HOME    yes
USERGROUPS_ENAB yes

Contenido de las variables más relevantes de /etc/default/useradd:

root@monitor# cat /etc/default/useradd
# Default values for useradd(8)
SHELL=/bin/sh
# GROUP=100
# HOME=/home
# INACTIVE=-1
# EXPIRE=
# SKEL=/etc/skel
# CREATE_MAIL_SPOOL=yes

Contenido del directorio /etc/skel:

root@monitor skel# ls -lha
total 20K
drwxr-xr-x  2 root root 4,0K mar 11 16:54 .
drwxr-xr-x 73 root root 4,0K mar 14 10:45 ..
-rw-r--r--  1 root root  220 may 15  2017 .bash_logout
-rw-r--r--  1 root root 3,5K may 15  2017 .bashrc
-rw-r--r--  1 root root  675 may 15  2017 .profile

Creamos el usuario «usrdemo» y verificamos con antelación el contenido de los ficheros /etc/passwd, /etc/shadow, /etc/group. Lo podemos hacer con los siguientes comandos y veremos que no arrojan ningún resultado por no hay contenido que se corresponda con el filtro:

# cat /etc/passwd | grep usrdemo
#
# cat /etc/shadow | grep usrdemo
#
# cat /etc/group | grep usrdemo

Utilizamos el comado useradd usrdemo y comprobamos que:

  • Se ha creado un grupo con el nombre del usuario con GID 1001
  • Se ha creado una entrada en shadow para almacenar una contraseña que no ha sido definida (Ver contenido de segundo campo «!»)
  • Se ha creado un usuario con su propio grupo asignado
  • Ha sido creado sin directorio home
# useradd usrdemo
# cat /etc/passwd | grep usrdemo
usrdemo:x:1001:1001::/home/usrdemo:
# cat /etc/shadow | grep usrdemo
usrdemo:!:17969:0:99999:7:::
# cat /etc/group | grep usrdemo
usrdemo:x:1001:
# cd /home/usrdemo
bash: cd: /home/usrdemo: No existe el fichero o el directorio

Crear usuario linux especificando contraseña y directorio home por defecto

Introducimos el comando useradd -p temporal -m usrdemo y vemos los resultados. Observamos que:

  • Se han creado los grupos, el usuario y el directorio home con el contenido de la estructura SKEL.
  • ¡La contraseña de usuario no está encriptada!
  • No tiene una shell asignada por defecto. Esto es un bug conocido pendiente de resolver.
# useradd usrdemo -p temporal -m
# cat /etc/passwd | grep usrdemo
usrdemo:x:1001:1001::/home/usrdemo:
# cat /etc/shadow | grep usrdemo
usrdemo:temporal:17969:0:99999:7:::
# cat /etc/group | grep usrdemo
usrdemo:x:1001:
# cd /home/usrdemo
# ls -lha
total 20K
drwxr-xr-x 2 usrdemo usrdemo 4,0K mar 14 12:15 .
drwxr-xr-x 5 root    root    4,0K mar 14 12:15 ..
-rw-r--r-- 1 usrdemo usrdemo  220 may 15  2017 .bash_logout
-rw-r--r-- 1 usrdemo usrdemo 3,5K may 15  2017 .bashrc
-rw-r--r-- 1 usrdemo usrdemo  675 may 15  2017 .profile

La opción -p de useradd, es una entrada de texto plano. No encripta automáticamente la cadena que hayas introducido. Por eso es mejor crear el usuario sin contraseña y posteriormente asignársela mediante el comando passwd

# passwd usrdemo
Introduzca la nueva contraseña de UNIX:
Vuelva a escribir la nueva contraseña de UNIX:
passwd: contraseña actualizada correctamente
#
# cat /etc/shadow | grep usrdemo
usrdemo:$6$B8NtEtd7$vHn1L859PbkQVNoVSG71FtrZRye0E7r5jWoXdOC.ogmgGZR5ohxP6oE6BI9DqsJPeYOFUP53PeZ5aBP1JXrLu/:17969:0:99999:7:::

Crear usuario linux especificando shell y creación de directorio por defecto

# useradd usrdemo -m -s /bin/sh
# cat /etc/passwd | grep usrdemo
usrdemo:x:1001:1001::/home/usrdemo:/bin/sh
# cat /etc/shadow | grep usrdemo
usrdemo:!:17969:0:99999:7:::
# cat /etc/group | grep usrdemo
usrdemo:x:1001:
# passwd usrdemo
Introduzca la nueva contraseña de UNIX:
Vuelva a escribir la nueva contraseña de UNIX:
passwd: contraseña actualizada correctamente
#
# cat /etc/shadow | grep usrdemo
usrdemo:$6$ynSYyfu2$p0WPdWhWb52q9DF11hU5gO5aPcSCS4hXEGjIyhlS1jeXKImgAIr6kByqOXtkfyNuPf6djntBvlT1PnhnrnZB.1:17969:0:99999:7:::
#
# cd /home/usrdemo/
# ls -lha
total 20K
drwxr-xr-x 2 usrdemo usrdemo 4,0K mar 14 12:51 .
drwxr-xr-x 5 root    root    4,0K mar 14 12:51 ..
-rw-r--r-- 1 usrdemo usrdemo  220 may 15  2017 .bash_logout
-rw-r--r-- 1 usrdemo usrdemo 3,5K may 15  2017 .bashrc
-rw-r--r-- 1 usrdemo usrdemo  675 may 15  2017 .profile

Crear usuario linux especificando comentarios

Cuidado con introducir acentos en esta descripción!

# useradd -m -s /bin/bash -c "Usuario para demostracion" usrdemo
#
# cat /etc/passwd | grep usrdemo
usrdemo:x:1001:1001:Usuario para demostracion:/home/usrdemo:/bin/bash

Crear usuario temporal en linux

Utilizaremos la opción -e para especificar con el formato YYYYMMDD la fecha en la que el usuario será deshabilitado

# useradd -m -s /bin/bash -c "Usuario para demostracion" -e 20190315 usrdemo
#
# cat /etc/passwd | grep usrdemo
usrdemo:x:1001:1001:Usuario para demostracion:/home/usrdemo:/bin/bash
# cat /etc/shadow | grep usrdemo
usrdemo:!:17969:0:99999:7::20190315:

Borrar usuario en Linux

Para borrar un usuario utilizaremos el comando userdel que dispone de las siguientes opciones:

Opciones del comando userdel

PARÁMETROFUNCIÓN
-fFuerza el borrado de todos los archivos del usuario
-rElimina el directorio personal del usuario y su buzón de correo
-ZBorra cualquier mapeo del usuario SELinux
# cd /home/usrdemo/
# pwd
/home/usrdemo
# cd /
#
# userdel -r usrdemo
userdel: usrdemo mail spool (/var/mail/usrdemo) not found
#
# cd /home/usrdemo
bash: cd: /home/usrdemo: No existe el fichero o el directorio
root@monitor > /# cat /etc/passwd | grep usrdemo

Modificar un usuario en linux.

Para modificar un usuario utilizaremos el comando usermod que dispone de las siguientes opciones básicas:

Opciones del comando usermod

PARÁMETROFUNCIÓN
-cNuevo valor del campo de comentarios
-dNuevo directorio home del usuario
-eNueva fecha de caducidad del usuario
-fEstablece el tiempo de inactividad después de que caduque la cuenta
-gNuevo grupo (GID) asignado al usuario
-GRedefine la lista de Grupos a los que pertenece el usuario
-lRedefine el nombre del usuario
-LBloquea la cuenta del usuario
-mMueve los contenidos del directorio home al nuevo directorio home (Usar con la opción -d)
-pRedefine el password del usuario
-sRedefine la shell por defecto para el usuario
-uFuerza el uso de un nuevo UID para la cuenta
-UDesbloquea la cuenta del usuario
-vAñade un rango de UIDs subordinados al usuario
-VElimina un rango de UIDs subordinados al usuario
-wAñade un rango de GIDs subordinados al usuario
-WElimina un rango de GIDs subordinados al usuario

Cambiar el login de un usuario linux

En algún momento podríamos tener la necesidad de modificar el nombre de login de un usuario por lo que usaremos la opción -l para indicar el nuevo nombre. Tal y como vemos en el ejemplo, podemos observar algunas cosas a tener en cuenta:

  • El nombre de login del usuario ha cambiado
  • El nombre del grupo del usuario NO ha cambiado
  • La entrada en /shadow de la contraseña NO ha desaparecido por lo que se conserva
# cat /etc/passwd | grep usrdemo
usrdemo:x:1001:1001::/home/usrdemo:/bin/bash
#
# cat /etc/shadow | grep usrdemo
usrdemo:!:17969:0:99999:7:::
#
# cat /etc/group | grep usrdemo
usrdemo:x:1001:
#
# usermod usrdemo -l usuariodemo
#
# cat /etc/passwd | grep usrdemo
usuariodemo:x:1001:1001::/home/usrdemo:/bin/bash
#
# cat /etc/shadow | grep usariodemo
usuariodemo:!:17969:0:99999:7:::
#
# cat /etc/group | grep usrdemo
usrdemo:x:1001:

Cambiar el directorio home de un usuario linux

Podría darse la necesidad de reestructurar nuestro disco y por alguna razón tener que cambiar a los usuarios de directorio home. Para realizar esta acción, utilizaremos las opciones -d y -m

Estas dos opciones van juntas porque como hemos visto, una de ellas sirve para crear el nuevo home y la otra para mover el contenido del antiguo home al nuevo.

Siguiendo el ejemplo de cambio usrdemo a usuariodemo, ahora vemos como el cambio de directorio home se ha realizado y el movimiento del contenido de los archivos también.

# cat /etc/passwd | grep usrdemo
usuariodemo:x:1001:1001::/home/usrdemo:/bin/bash
#
# usermod -d /home/usuariodemo -m usuariodemo
#
# cd /home/usrdemo
bash: cd: /home/usrdemo: No existe el fichero o el directorio
# cd /home/usuariodemo/
#
# ls -lh
total 0
-rw-r--r-- 1 root root 0 mar 14 17:21 archivo.txt

Crear grupo de usuarios

Para la creación de grupos de usuario, utilizaremos el comando groupadd

Opciones del comando groupadd

PARÁMETROFUNCIÓN
-fFuerza el parámetro -g salvo que el GID ya esté en uso
-gIndica el nuevo GID del grupo
-oPermite crear grupos con GID no único
-pDefine una contraseña para el grupo
-sCrea un grupo de sistema

Procedemos a la creación del grupo «ventas» asignándole un GID y una contraseña. Como podemos observar, se ha creado con el GID especificado y con la contraseña sin encriptar, tal y como sucedía anteriormente con las contraseñas de usuarios.

# groupadd ventas -g 1020 -p temporal
# cat /etc/group | grep ventas
ventas:x:1020:
# cat /etc/gshadow | grep ventas
ventas:temporal::

También debemos tener en cuenta que la asignación de GID / UID es autoincremental del GID / UID más alto que figure en el sistema respectivamente. Esto quiere decir que podemos desperdiciar GID / UID si lo forzamos en el momento de la creación y asignamos un número muy alto.

Forzar los GID / UID implica tener un mayor control al margen del sistema de los ID que se van asignando.

Modificar grupo de usuarios

Para la modificación de grupos de usuario, utilizaremos el comando groupmod

Opciones del comando groupmod

PARÁMETROFUNCIÓN
-gCambia el GID del grupo
-nCambia el nombre del grupo
-oPermite utilizar un GID duplicado
-pModifica la contraseña del grupo

Como la contraseña del grupo no está cifrada, lo primero que vamos a hacer es volver a crear la contraseña del grupo de usuarios linux mediante el comando gpasswd

# cat /etc/gshadow | grep ventas
ventas:temporal::
# gpasswd ventas
Cambiando la contraseña para el grupo ventas
Nueva contraseña:
Vuelva a introducir la nueva contraseña:
#
# cat /etc/gshadow | grep ventas
ventas:$6$ud.FL/LT5IWflR$hOivgcsOdsRPv97TUJOSGcnD0nUTov129VVcQPY0RtPOHVnFHwHQEiKsfBPQr68q1Bu.zFFz/zy5VB5YOcibe0::

Cambiar el nombre del grupo linux

# groupmod ventas -n comercial
# cat /etc/group | grep comercial
comercial:x:1020:
# cat /etc/gshadow | grep comercial
comercial:$6$ud.FL/LT5IWflR$hOivgcsOdsRPv97TUJOSGcnD0nUTov129VVcQPY0RtPOHVnFHwHQEiKsfBPQr68q1Bu.zFFz/zy5VB5YOcibe0::

Cambiar el GID del grupo de usuarios linux

# cat /etc/group | grep comercial
comercial:x:1020:
# groupmod comercial -g 1001
#
# cat /etc/group | grep comercial
comercial:x:1001:

Borrar grupo de usuarios

Para la eliminación de grupos de usuario, utilizaremos el comando groupdel

Opciones del comando groupdel

PARÁMETROFUNCIÓN
-fBorra el grupo aunque sea el grupo primario de un usuario
# groupdel comercial
# cat /etc/group | grep comercial
# cat /etc/gshadow | grep comercial