Diferencias entre useradd y adduser

Crear usuarios en Linux desde la línea de comandos

 
 

En este artículo veremos como crear usuarios en GNU/Linux, utilizando las herramientas useradd y adduser, desde la interfaz de línea de comandos (CLI).

Índice General

  1. Introducción
  2. Crear usuarios con useradd
  3. Crear usuarios con adduser

 

  1. Introducción (Volver al índice General)
    En este artículo veremos como crear usuarios en Linux desde la línea de comando (CLI). Para hacerlo, utilizaremos las siguientes herramientas:
     

  2.  

  3. Crear usuarios con useradd (Volver al índice General)
    La particularidad que tiene este comando es que tendremos que pasar como parámetros en la línea de comandos (CLI), todas las opciones de la cuenta, como són: nombre completo del usuario, contraseña, si queremos que tenga directorio de inicio, grupos a los que pertenece, shell que utilizará, etc.

    Las opciones más utilizadas son:

    • -c ‘COMENTARIO’: Permite añadir un comentario al usuario, como puede ser su nombre real.
    • -d HOME_DIR: Esta opción nos permite cambiar el directorio por defecto del usuario, que suele ser /home/.
    • -e FECHA: Permite seleccionar la fecha en la que se deshabilitará la cuenta. Debe introducirse siguiendo el formato AAAA-MM-DD.
    • -f DÍAS: Nos permite seleccionar el número de días a partir de la fecha de expiración de la contraseña para deshabilitar la cuenta. Con un valor de -1, no se deshabilitará.
    • -g GRUPO: Permite añadir al usuario a un grupo. El grupo debe existir con anterioridad para poder añadirlo. Podemos introducir el grupo por su nombre o por su identificador de grupo (GID).
    • -G GRUPO1[,GRUPO2,…[,GRUPOn]]]: Similar a la opción anterior, pero permite introducir varios grupos separados por comas. Los grupos deben existir con anterioridad para poder añadirlo.
    • -m: Crea el directorio personal (home) del usuario si no existe.
    • -M: No crea el directorio de inicio (home) del usuario.
    • -n: No crea un grupo privado para el usuario.
    • -r: La cuenta se convierte en cuenta del sistema, con identificador de usuario (UID) menor a 500 y sin directorio personal.
    • -p CONTRASEÑA: Establece una contraseña de usuario. Hay que tener en cuenta que al pasar la contraseña como opción, esta irá en claro. La contraseña se puede crear posteriormente con el comando passwd .
    • -s SHELL: Permite modificar la shell de inicio de sesión del usuario, con useradd por defecto es /bin/sh y con adduser por defecto es /bin/bash.
    • -u UID: Permite especificar el identificador de usuario (UID), que deberá ser mayor a 499 y único.
    • -k SKEL_DIR: The skeleton directory (El directorio esqueleto) contiene archivos y directorios que se copiarán en el directorio de inicio del usuario cuando useradd crea el directorio de inicio. Esta opción solo es válida cuando se especifica la opción -m. Si la opción -k no está configurada, el directorio esqueleto está definido por la variable SKEL en el archivo /etc/default/useradd. Por defecto el directorio esqueleto se guarda en /etc/skel.

    Para ver todas las opciones, puedes usar el comando de ayuda man useradd.

    A continuación veremos los usos más comunes del comando useradd.
     

    • Crear un usuario por defecto (Volver al índice General)
      El siguiente comando creará un usuario llamado mortadelo, con la shell por defecto que en Debian es /bin/sh, le asignará como directorio personal /home/mortadelo, pero no creará el directorio ni se copian los directorios y archivos contenidos en el skeleton directory, crea el grupo mortadelo y lo asigna al mismo y no tiene contraseña. Vamos que este comando nos ha dejado mucho trabajo por hacer.

      $ sudo adduser mortadelo

      Si ejecutamos el siguiente comando, veremos como ha quedado el archivo /etc/passwd:

      $ cat /etc/passwd | grep mortadelo
      mortadelo:x:1001:1001::/home/mortadelo:/bin/sh

      Veámos como ha quedado el archivo /etc/group:

      $ cat /etc/group | grep mortadelo
      mortadelo:x:1001:

      Para asignar una contraseña a mortadelo ejecutaríamos el siguiente comando:

      $ sudo passwd mortadelo

      Para copiar el esqueleto de directorios ejecutamos el comando siguiente:

      $ sudo cp -r /etc/skel/* /home/mortadelo

      Para crear el directorio personal con permidos de lectura, escritura y ejecución para el usuario, escritura y ejecución para el grupo y sin permisos para el resto de usuarios, ejecutaremos el siguiente comando:

      $ sudo mkdir -m 750 /home/mortadelo

      Para asignar el usuario y grupo mortadelo al directorio, ejecutaremos el siguiente comando:

      $ sudo chown mortadelo:mortadelo /home/mortadelo/
    •  

    • Crear un usuario con directorio home (Volver al índice General)
      En el siguiente comando utilizaremos la opción -m. Creará un usuario llamado filemon, le asignará la shell por defecto que en Debian es /bin/sh, le asignará y creará el directorio de inicio /home/filemon, se copian los directorios y archivos contenidos en el skeleton directory, crea el grupo filemon y lo asigna al mismo y no tiene contraseña.

      $ sudo useradd -m filemon

      Para asignar una contraseña a filemon ejecutaríamos el siguiente comando:

      $ sudo passwd filemon

      Hemos visto que con este comando hemos ahorrado bastante trabajo, solo nos ha quedado asignarle la contraseña. Por motivos de seguridad es aconsejable hacerlo con el comando passwd en vez de pasarla como parámetro con la opción -p (cualquiera cerca de nosotros en el momento de dar de alta al usuario puede ver como se escribe la contraseña).


    •  
       
       

    • Crear un usuario con directorio home diferente al predeterminado (Volver al índice General)
      En el siguiente comando utilizaremos la opción -m además de la opción -d. Es similar al anterior, pero nos permite asignar un directorio de inicio distinto al predeterminado. Con este comando se copian los directorios y archivos contenidos en el skeleton directory. Veamos un ejemplo en el que creamos al usuario anacleto y le asignamos el directorio de inicio /usuarios/anacleto:

      $ sudo useradd -m -d /usuarios/anacleto anacleto

      Nota: El directorio /usuarios deberá existir antes de ejecutar el comando.

    •  

    • Crear un usuario sin directorio home (Volver al índice General)
      Para crear un usuario sin una carpeta de inicio, independientemente de la configuración por defecto, usaremos el siguiente comando:

      $ sudo useradd -M usuario
    •  

    • Crear un usuario con shell distinta a la predeterminada (Volver al índice General)
      Por defecto, useradd asigna la shell /bin/sh. En este caso vamos a crear al usuario carpanta y le asignaremos la shell /bin/bash:

      $ sudo useradd -m -s /bin/bash carpanta
    •  

    • Crear un usuario y asignarlo a un grupo (Volver al índice General)
      Con el siguiente comando crearemos al usuario bacterio y se asignará a los grupos latia y laabuela con la opción -G:

      $ sudo useradd -m -G latia,laabuela bacterio
    •  

    • Crear un usuario con fecha de caducidad (Volver al índice General)
      Con el siguiente comando crearemos al usuario sacarino y estableceremos la fecha de vencimiento de su cuenta. Muy útil cuando sabemos cuanto tiempo va a utilizar el usuario nuestro sistema:

      $ sudo useradd -m -e 2021-02-28 sacarino
    •  

    • Crear un usuario modificando valores predeterminados de inicio de sesión (Volver al índice General)
      La configuración predeterminada para los inicios de sesión se establece en el archivo /etc/login.defs. En este archivo se establecen algunos parámetros que podremos cambiar en el momento de crear un usuario con useradd.

      Veamos algunas las configuraciones predeterminadas que vamos a cambiar con useradd:

      • PASS_MAX_DAYS 99999 : Establece el máximo de días que una contraseña puede ser usada.
      • PASS_MIN_DAYS 0 : Establece el mínimo de días permitido para cambiar la contraseña.
      • PASS_WARN_AGE 7 : Número de días antes de la caducidad para advertir de que está por caducar la contraseña.
      • LOGIN_RETRIES 5 : Establece la cantidad de intentos de inicio de sesión si la contraseña no es la correcta.
      • LOGIN_TIMEOUT 60 : Establece el tiempo que pasa antes de que el inicio de sesión agote el tiempo de espera.
      • DEFAULT_HOME yes : Establece si un usuario puede iniciar sesión si no existe una carpeta de inicio.

       
      Con el siguiente comando, además de crear al usuario rompetechos, vamos a establecer el vencimiento de la contraseña, el aviso de caducidad de la contraseña y el número de intentos de inicio de sesión:

      $ sudo useradd -m -K PASS_MAX_DAYS=40 -K PASS_WARN_AGE=5 -K LOGIN_RETRIES=3 rompetechos
    •  

    • Crear un usuario y asignar su nombre completo (Volver al índice General)
      La opción -c sirve para añadir un comentario a la cuenta de usuario, pero normalmente se utiliza para asignar el nombre completo del usuario. Veamos un ejemplo en el que crearemos al usuario gotera y asignaremos su nombre completo:

      $ sudo useradd -m -c "Pepe Gotera" gotera
    •  

    • Crear un usuario de sistema (Volver al índice General)
      En alguna ocasión nos surgirá la necesidad de crear un usuario de sistema. Estas cuentas tienen la particularidad de que se crean con un identificador de usuario (UID) menor a 500 y no se crea su directorio de inicio. Veamos un ejemplo:

      $ sudo useradd -r nombre_usuario
    •  

    • Asignar una contraseña (Volver al índice General)
      Para asignar la contraseña utilizando el comando useradd, utilizaremos la opción -p. ¡Cuidado, la contraseña va en claro!. Además, cualquiera cerca de nosotros en el momento de crear la cuenta de usuario, podrá ver la contraseña del usuario. Veamos un ejemplo:

      $ sudo useradd -p contraseña nombre_usuario

      Nota: La opción -p permite cambiar la contraseña, pero esta queda en claro en el archivo /etc/shadow. No se guarda cifrada como en el caso de utilizar el comando passwd.

      Tras ejecutar el comando anterior, si observamos el contenido del archivo /etc/shadow veremos que al nuevo usuario se le ha guardado la contraseña en claro:

      1
      2
      3
      4
      5
      
      $ sudo tail /etc/shadow
      ...
      ...
      mortadelo:$6$AvjUziqjdQBOruh9$hGkjpemoxk95nWfKHZ.hl.v2S69dQbE4u.s1cM6WRmaikTzWvx57ZZfaYvpg/y2sJlmnJnQZ.yZetSJTQhl5w0:18669:0:99999:7:::
      nombre_usuario:contraseña:18670:0:99999:7:::
      • mortadelo tiene la contraseña: $6$AvjUziqjdQBOruh9$hGkjpemoxk95nWfKHZ.hl.v2S69dQbE4u.s1cM6WR…5w0
      • nombre_usuario tiene la contraseña: contraseña.

       
      Para mayor seguridad, es aconsejable dar de alta al usuario sin contraseña y después asignarsela con el comando passwd. Veamos un ejemplo:

      $ sudo passwd nombre_usuario

      Existen otros métodos seguros para generar manualmente el hash de la contraseña y posteriormente utilizar el hash generado con useradd -p.

      En el artículo Crear una contraseña con hash SHA-512 para /etc/shadow, explicamos como generar la contraseña cifrada que luego podremos utilizar con useradd -p.

      Una vez tenemos el hash de la contraseña, podremos utilizarlo con useradd:

      $ sudo useradd -p $6$sW7O8X766h$XQWAyU5WstjNeFGDZdXyOltU32q4uK/9L7QBXTRn0Zdw86D16I//uWiQp6aPHp9z0ww5dg5Yn7vGRPBQZz/9q0 nombre_usuario
    •  

    • Un ejemplo bastante completo (Volver al índice General)
      Vamos a crear al usuario super con directorio de inicio, shell /bin/bash, que pertenece al grupo latia (previamente creado), su cuenta de usuario vencerá el 31/12/2021, cambiará la contraseña cada 40 días, el aviso de caducidad de la cuenta será 6 días antes, tendrá 3 reintentos de inicio de sesión, estableceremos el nombre completo del usuario y le asignaremos una contraseña.

      $ sudo useradd -m -s /bin/bash -G latia -e 2021-12-31 PASS_MAX_DAYS=40 -K PASS_WARN_AGE=6 -K LOGIN_RETRIES=3 -c "Superintendente Vicente" -p contraseña super
  4.  

  5. Crear usuarios con adduser (Volver al índice General)
    adduser añade usuarios al sistema de acuerdo a las opciones de la línea de órdenes y a la configuración en /etc/adduser.conf. Ofrece una interfaz más sencilla para programas de bajo nivel como useradd.
     
    A continuación listamos las opciones más utilizadas:

    • – -disabled-login : No ejecuta el comando passwd para establecer la contraseña. El usuario no podrá usar la cuenta hasta que se establezca una contraseña.
    • – -disabled-password : Como – -disabled-login, pero todavía es posible usar la cuenta, por ejemplo mediante claves SSH RSA, pero no usando autenticación con contraseña.
    • – -gid ID : Cuando se crea un grupo, esta opción fuerza el nuevo identificador de grupo (GID) al número dado con ID. Cuando se crea un usuario la opción añade el usuario a ese grupo.
    • – -group : Cuando se combina con – -system, se crea un grupo con el ID y nombre del usuario del sistema. Si no se combina con – -system, se crea un grupo con el nombre dado.
    • – -help : Muestra unas instrucciones cortas.
    • – -home DIRECTORIO : Usa DIRECTORIO para el directorio de inicio, en vez del predeterminado especificado en el fichero de configuración. Si el directorio no existe, se crea y se copian los directorios y archivos contenidos en el skeleton directory.
    • – -shell CONSOLA ; Usa CONSOLA como la shell del usuario en vez de la predeterminada especificada en el fichero de configuración. Si no se especifica los contrario, por defecto, adduser asigna la shell /bin/bash.
    • – -ingroup GRUPO : Añade el nuevo usuario al GRUPO en vez de al grupo del usuario o al grupo predeterminado definido por USERS_GID en el fichero de configuración. Afecta al grupo principal de usuarios. Para añadir grupos adicionales, usaremos la opción add_extra_groups.
    • – -no-create-home : No crea el directorio de inicio, incluso si no existe.
    • – -system : Crea un usuario del sistema o grupo.
    • – -uid ID : Fuerza el nuevo identificador de usuario (UID) al número dado por ID. adduser fallará si el UID ya está en uso.
    • – -add_extra_groups : Añade un nuevo usuario a los grupos adicionales definidos en el fichero de configuración.

    Para ver todas las opciones, puedes usar el comando de ayuda man adduser.
     

    • Crear un usuario normal (Volver al índice General)
      Si se ejecuta adduser sin opciones, creará un usuario normal. Veamos un ejemplo:

      $ sudo adduser nombre_usuario

      La orden anterior creará un usuario con las siguientes opciones por defecto:

      • Se le asigna y creará el directorio de inicio en /home/nombre_usuario.
      • Se le asigna la shell /bin/bash.
      • Pregunta por su nombre completo y otros datos como el teléfono, etc.
      • Se crea el grupo de nombre igual al nombre del usuario.
      • Pregunta por la contraseña para asignarle una. Al introducir la contraseña esta no es visible.
    •  

    • Crear un usuario de sistema (Volver al índice General)
      Con el siguiente comando crearemos al usuario sysuser sin contraseña, sin directorio personal y con la shell /user/sbin/nologin, es decir, sin shell.

      $ adduser --system --no-create-home sysuser
    •  

    • Crear un usuario con shell distinta a la predeterminada (Volver al índice General)
      Con la siguiente orden crearemos al usuario maroto con la shell /bin/rbash. rbash es una shell restringida o limitada.

      $ adduser --shell /bin/rbash maroto

Mi opinión personal a cerca del uso de ambos comandos es la siguiente. Para crear usuarios normales sin muchos parámetros a configurar y de forma rápida, optaría por adduser, por otro lado, para crear usuarios con una configuración más compleja utilizaría useradd, hay que escribir más pero es muchísimo más completo.

Y si el crear cuentas de usuario se convierte en trabajo casi diario, empezaría a pensar en crear un script que me facilitase la tarea.
 

Espero que este artículo os haya sido de utilidad. Si pensáis que podéis colaborar para mejorar este artículo, que hay algo erróneo en él o simplemente deseáis comentarlo, por favor, dejad vuestra opinión más abajo.
 
Seguir J. Carlos:

Técnico Informático - Desarrollo Web - Administración de Redes

Técnico Informático. Desarrollo Web. Administración de redes.

Últimas publicaciones de

4 comentarios

  1. carlos

    Gracias J Carlos!
    Fue muy útil la información. Soy cocinero, uso linux desde el 2005, instalé Ubuntu Mate 22.04, pero no tiene integrada la configuración «gráfica» para agregar usuarios. Llegué por Google a tu página, te felicito y nuevamente mil gracias
    Abrazo!

    • J. Carlos

      Hola Santo,
      En primer lugar perdón por la tardanza, pero ya he vuelto.
      Se un poco más explicito con respecto al tipo de ayuda que necesitas.
      Un saludo y gracias por visitar ZeppelinuX.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.