Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: https://www.alcancelibre.org
Licencia Creative Commons
© 1999-2026 Joel Barrios Dueñas. Este manual se distribuye bajo la licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional (CC BY-NC-SA 4.0). Usted es libre de compartir y adaptar el material bajo los siguientes términos: debe dar crédito al autor, no puede utilizarlo para fines comerciales y debe compartir las obras derivadas bajo la misma licencia. La licencia completa está disponible en https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.es.
Aún cuando se tenga un sistema con un único usuario, es importante recordar que dista de ser conveniente realizar el trabajo diario utilizando la cuenta del usuario root. Ésta sólo debe utilizarse para realizar las tareas de administración del sistema.
Una cuenta de usuario regular tiene las restricciones necesarias para impedir que se ejecute algo capaz de dañar al sistema, se altere accidentalmente la configuración de éste, los servicios que trabajan en segundo plano o bien los permisos y ubicación de los archivos y directorios de sistema, etc. Sólo el usuario root tiene privilegios, sin restricciones, sobre el sistema. Para realizar tareas administrativas de forma segura como usuario regular, se recomienda utilizar sudo. Puede aprender más sobre su configuración en el manual Configuración y uso de sudo.
La gestión de cuentas usuarios se realiza a través de useradd, passwd, usermod, groupadd y groupmod.
La gestión de usuarios es fundamental para mantener la seguridad y organización de un sistema. Comprender los procedimientos básicos y avanzados permite administrar eficientemente los accesos y permisos.
La forma más simple de crear una cuenta de usuario es utilizando useradd con la opción -m (crear automáticamente directorio de inicio) y el nombre del usuario como argumento para crear una nueva cuenta de usuario. Ejemplo:
useradd -m pruebas
El nuevo usuario creado tendrá un directorio de inicio dentro de /home denominado igual que el nombre de éste, se creará automáticamente un grupo con el mismo nombre, se asignará al usuario un UID ―User Identification― con un número a partir del 1000 y utilizará /bin/bash como intérprete de mandatos.
Si la cuenta del usuario carece de contraseña, ésta automáticamente está deshabilitada.
Para asignar una contraseña ejecute passwd con el nombre del usuario como argumento. Ejemplo:
passwd pruebas
El sistema solicitará que ingrese la nueva contraseña para el usuario y que repita ésta para confirmar. Jamás se mostrarán los caracteres ingresados en pantalla. Si se sospecha que se cometieron errores de tecleado, puede presionarse la tecla de retroceso las veces que sean necesarias y repetir todo lo que sea necesario antes de pulsar la tecla ENTER. El sistema siempre le informará si falla la confirmación de la contraseña.
Sólo se permite al usuario root asignar contraseñas débiles y mostrará siempre una advertencia en estos casos. Los usuarios regulares que realizan un cambio de contraseña, están obligados a definir siempre una que sea segura y que excluya palabras incluidas en los diccionarios del sistema.
Ejecute userdel con un nombre de usuario como argumento para eliminar éste. Ejemplo:
userdel pruebas
Ejecute userdel con la opción -r y el nombre del usuario como argumento para eliminar también el directorio de inicio ―junto con su contenido― y el buzón de correo correspondiente. Ejemplo:
userdel -r pruebas
Los grupos permiten organizar a los usuarios y asignar permisos de manera colectiva, simplificando la administración del sistema.
Los grupos sirven para categorizar y organizar los usuarios. Permiten aplicar permisos a grupos que son heredados por los usuarios que formen parte de éstos. Hay grupos de usuarios y grupos de sistema. Los primeros están conformados por usuarios regulares y utilizan un número de GID ―group identification― arriba del 1000. Los grupos de sistema son aquellos utilizados por programas y servicios y utilizan un número de GID menor a 1000.
Ejecute groupadd y un nombre como argumento para crear un grupo de usuarios. Ejemplo:
groupadd grupo-que-sea
Un grupo de sistema es aquel que tiene un número de identidad de grupo ―GID― por debajo del 1000. El número de identidad de grupo siempre se asigna automáticamente, utilizando el valor consecutivo más bajo que esté disponible en el sistema.
Ejecute groupadd con la opción -r y un nombre como argumento para crear un grupo de sistema. Ejemplo:
groupadd -r grupo-que-sea
Simplemente ejecute groupdel con el nombre del grupo como argumento para eliminar éste. Ejemplo:
groupdel grupo-que-sea
Ejecute usermod con la opción -G con el nombre del grupo y el nombre del usuario como argumentos ―en ese orden. Ejemplo:
usermod -G grupo-que-sea usuario-que-sea
O bien ejecute gpasswd con la opción -a y el nombre del usuario seguido por el nombre del grupo como argumentos. Ejemplo:
gpasswd -a usuario-que-sea grupo-que-sea
Puede agregar varios usuarios simultáneamente ejecutando gpasswd con la opción -M y una lista de usuarios separada por comas. Ejemplo:
gpasswd -M usuario1,usuario2,usuario3 grupo-que-sea
Para eliminar al usuario del grupo ejecute gpasswd con la opción -d y el nombre del usuario seguido por el nombre del grupo como argumentos. Ejemplo:
gpasswd -d usuario-que-sea grupo-que-sea
Puede definir un usuario regular para que administre el grupo ejecutando gpasswd con la opción -A y el nombre del usuario seguido por el nombre del grupo como argumentos. Ejemplo:
gpasswd -A usuario-que-sea grupo-que-sea
Puede añadir una contraseña para administrar el grupo ejecutando gpasswd y el nombre del grupo como argumento. Ejemplo:
gpasswd grupo-que-sea
Ejecute gpasswd y el nombre del grupo como argumento para eliminar la contraseña. Ejemplo:
gpasswd -r grupo-que-sea
El comportamiento predeterminado del mandato useradd se controla mediante el archivo /etc/default/useradd y la plantilla de directorios /etc/skel. Configurar estos valores adecuadamente puede ahorrar tiempo y garantizar coherencia en la creación de cuentas.
Como root edite el archivo /etc/default/useradd:
vim /etc/default/useradd
Encontrará, invariablemente, el siguiente contenido:
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
Puede cambiar los valores que considere convenientes.
Variable HOME: El directorio de inicio del usuario será creado dentro de /home, de acuerdo a como se estipula en el Estándar de Jerarquía de Sistema de Archivos o FHS (Filesystem Hierarchy Standard). El valor de esta variable puede ser cambiado de acuerdo a las necesidades o preferencias del administrador.
Variable SHELL: El intérprete de mandatos a utilizar para las nuevas cuentas que sean creadas en adelante se define a través de la variable SHELL. De modo predeterminado el sistema asigna /bin/bash como intérprete de mandatos; si el sistema se utiliza como servidor, lo más conveniente es asignar otro valor predeterminado.
El valor más conveniente para la variable SHELL es /sbin/nologin, el cual es un programa que de forma cortés rechaza el ingreso del usuario al sistema (login). Muestra brevemente un mensaje respecto a que la cuenta está desactivada (o bien cualquier mensaje que se defina en el archivo /etc/nologin.txt) y obliga a una salida. Suele utilizarse como reemplazo del intérprete de mandatos regular para cuentas de usuario que han sido desactivadas o bien a las cuales se quiere impedir el acceso hacia un intérprete de mandatos. Este programa registra todo intento de acceso en el registro (log) general del sistema, almacenado en el archivo /var/log/messages. Para utilizarlo como valor predeterminado para la variable SHELL, sólo hay que cambiar SHELL=/bin/bash por SHELL=/sbin/nologin.
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/sbin/nologin
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
Una vez terminada la edición, en adelante todo nuevo usuario que sea dado de alta en el sistema con el mandato useradd, sin definir parámetro alguno, de modo predeterminado se le impedirá el acceso al sistema a través de una consola o terminal. Los usuarios con estas características podrán, sin embargo, utilizar cualquier otro servicios como FTP, correo o Samba sin problema alguno.
Los posibles valores para la variable SHELL pueden ser:
/sbin/nologin: programa que de forma cortés rechaza el ingreso en el sistema (login)./bin/false: programa que realiza salida inmediata indicando falla. Es decir, que impide el acceso al sistema y además devuelve falla. Es ideal si se quiere tener cuentas de usuario sólo con acceso hacia FTP, correo, Samba, etc., sin acceso hacia el intérprete de mandatos./dev/null: el dispositivo nulo descarta todos los datos escritos sobre éste y para cualquier proceso que lo utilice. Es ideal para cuentas de usuario para las cuales sólo se quiere acceso a correo electrónico (SMTP, POP3, IMAP y/o cliente de correo con interfaz HTTP)./bin/bash: intérprete de mandatos desarrollado por el proyecto GNU. Es el intérprete de mandatos predeterminado en GNU/Linux./bin/sh: un enlace simbólico que apunta hacia /bin/bash y ofrece una versión simplificada de Bash muy similar a Bourne Shell (sh)./bin/tcsh: una versión mejorada del intérprete de mandatos de C (csh)./bin/ash: un clon de Bourne shell (sh) que utiliza menos memoria./bin/zsh: una versión mejorada de sh con funciones útiles encontradas en Bash y tcsh.De modo predeterminado las cuentas de usuario del sistema utilizarán como plantilla al directorio /etc/skel para crear el directorio de inicio de todos los usuarios del sistema. En sistemas basados sobre AlmaLinux, Rocky Linux y Red Hat Enterprise Linux, regularmente y como mínimo, el directorio /etc/skel incluye los siguientes archivos:
.bash_logout .bash_profile .bashrc
Si, por ejemplo, se desea que cada nueva cuenta de usuario incluya un directorio subordinado para carpetas de correo electrónico y además el archivo para la suscripción de éstas a través del servicio de IMAP, se debe realizar el siguiente procedimiento:
mkdir -m 0700 /etc/skel/Maildir
Esto creará un directorio Maildir que será copiado al directorio de inicio de cada nuevo usuario, siguiendo la configuración común utilizada en clases para temas de correo electrónico.
Pueden utilizarse las siguientes opciones de useradd:
-c, --comment comentario: Permite establecer detalles de la cuenta de usuario. En la actualidad se utiliza para definir el nombre completo del usuario.-d, --home directorio de inicio: Establece el directorio de inicio del usuario.-e, --expiredate fecha de expiración: Establece la fecha de expiración de una cuenta de usuario en el formato AAAA-MM-DD.-f, --inactive días para desactivar: Establece el número de días para desactivar una cuenta de usuario tras la expiración de una contraseña.-g, --gid grupo principal: Establece el grupo predeterminado al cual pertenecerá el usuario. Nota: el grupo definido debe de existir previamente.-G, --groups grupos adicionales,[...]: Establece los grupos adicionales a los que pertenecerá el usuario. Estos deben separarse utilizando una coma y sin espacios. Esto es muy conveniente cuando se desea que el usuario tenga acceso a determinados recursos del sistema, como acceso a la unidad de disquetes, administración de cuentas PPP y POP. Nota: los grupos definidos deben de existir.-m, --create-home: Establece que el directorio de inicio del usuario debe ser creado si acaso este fuese inexistente y se copiarán dentro de este los archivos especificados en /etc/skel. Esta opción viene implícita en AlmaLinux, Rocky Linux y Red Hat Enterprise Linux, es decir es innecesaria, pues el archivo /etc/login.defs define la variable CREATE_HOME con el valor yes. Ejemplo: useradd alguien. En distribuciones como Debian o Ubuntu, es necesario utilizarla de manera explícita.-M: Establece se omita crear el directorio de inicio del usuario, aún si el archivo /etc/login.defs define la variable CREATE_HOME con el valor yes. Es lo contrario de la opción -m.-r, --system: Crea cuentas de sistema. Los usuarios de sistema serán creados sin caducidad en el archivo /etc/shadow y sus números de identidad serán asignados entre el rango de valores de la variable SYS_UID_MIN y la variable SYS_UID_MAX (por defecto, 100 a 999) como esté definido en el archivo /etc/login.defs.-s, --shell intérprete de mandatos: Establece el intérprete de mandatos (shell) que podrá utilizar el usuario. AlmaLinux, Rocky Linux y Red Hat Enterprise Linux establecen /bin/bash como intérprete de mandatos predeterminado.-u, --uid número de identidad de usuario: Establece el UID del usuario. Cuando se crea una cuenta de usuario por primera vez, los UID se asignarán a partir del 1000. Los UID entre 0 y 99 están reservados para las cuentas y grupos de los servicios del sistema. El rango de valores de SYS_UID_MIN-SYS_UID_MAX puede consultarse en el archivo /etc/login.defs.Ejemplo:
useradd -c "Fulano de tal" \
-u 1000 -m -d /home/pruebas \
-G tape,lp \
pruebas
Lo anterior creará una cuenta de usuario llamada pruebas, que se encuentra incluido en los grupos tape y lp, que tendrá un UID=1000, utilizará /bin/bash como intérprete de mandatos y utilizará /home/pruebas como directorio de inicio.
La descripción completa de opciones para useradd puede consultarse en la página de manual correspondiente.
man 8 useradd
Para modificar una cuenta de usuario existente, se utiliza usermod, el cual tiene las siguientes opciones que son similares a las de useradd:
-c, --comment comentario: Cambia la descripción de la cuenta de usuario.-d, --home directorio de inicio: Cambia el directorio de inicio del usuario.-e, --expiredate fecha de expiración: Cambia las fecha de expiración de una cuenta de usuario en el formato AAAA-MM-DD.-f, --inactive días para desactivar: Cambia el número de días para desactivar una cuenta de usuario tras la expiración de una contraseña.-g, --gid grupo principal: Cambia el grupo predeterminado al cual pertenecerá el usuario. Nota: el grupo definido debe de existir previamente.-G, --groups grupos adicionales,[...]: Cambia los grupos adicionales a los que pertenecerá el usuario. Estos deben separarse utilizando una coma y sin espacios. Nota: los grupos definidos deben de existir.-l, --login nuevo nombre del usuario: Cambia el nombre del usuario.-m, --move-home: Mueve el contenido del directorio de inicio del usuario cuando se ha establecido uno distinto con la opción -d.-s, --shell intérprete de mandatos: Cambia el intérprete de mandatos (shell) que podrá utilizar el usuario.-u, --uid número de identidad de usuario: Cambia el UID del usuario.Ejemplo:
usermod -c "Alguien" \
-s /bin/zsh \
-u 1001 -m -d /home/alguien \
-l alguien \
pruebas
Lo anterior cambiará la cuenta del usuario llamada pruebas para que adelante tenga como descripción «Alguien», tenga el UID=1001, utilice /bin/zsh como intérprete de mandatos y cambie su directorio de inicio con todo su contenido a /home/alguien.
La descripción completa de opciones para usermod puede consultarse en la página de manual correspondiente.
man 8 usermod
Pueden utilizarse las siguientes opciones de passwd:
-k: Se utiliza para indicar que la actualización de una contraseña sólo se aplique para las sesiones expiradas, sin afectar a las sesiones activas del usuario modificado.-l: Sólo puede ser utilizada por root. Se utiliza para bloquear cuentas de usuario. El bloqueo se realiza añadiendo el símbolo ! al inicio del criptograma de la contraseña en el archivo /etc/shadow.--stdin: Establece que passwd deberá leer el valor de la contraseña desde la entrada estándar (STDIN).-u: Sólo puede ser utilizada por root. Revierte lo que se haya hecho con la opción -l. Es decir, desbloquea cuentas de usuario. Elimina el símbolo ! al inicio del criptograma de la contraseña en el archivo /etc/shadow.-d: Sólo puede ser utilizada por root. Elimina la contraseña de un usuario en particular, permitiendo ingresar al sistema sin contraseña.-e: Sólo puede ser utilizada por root. Expira la contraseña del usuario, obligando a éste a asignar una nueva durante el siguiente ingreso al sistema. Esta opción fue descartada en versiones recientes de passwd en favor del uso de chage con la opción -d con el número cero como valor y el nombre del usuario como argumento. Ejemplo: chage -d 0 zutano.-n tiempo mínimo de vida en días: Sólo puede ser utilizada por root. Establece el tiempo mínimo de vida, en días, de una contraseña.-x tiempo máximo de vida en días: Sólo puede ser utilizada por root. Establece el tiempo máximo de vida, en días, de una contraseña.-w número de días previos a expiración: Sólo puede ser utilizada por root. Establece el número de días, antes de que expire una contraseña, para que el usuario comience a recibir advertencias sobre la próxima expiración de su contraseña.-i número de días tras la expiración de contraseña: Sólo puede ser utilizada por root. Establece el número de días para desactivar una cuenta de usuario tras la expiración de su contraseña.-S: Sólo puede ser utilizada por root. Mostrará información breve acerca del estado de una contraseña para un usuario determinado.Ejemplo:
passwd -n 60 -x 90 -w 10 -i 5 pruebas
Lo anterior establece que la contraseña del usuario pruebas tendrá un tiempo de vida mínimo de 60 días, un tiempo máximo de vida de 90 días, comenzando a recibir advertencias 10 días antes de que expire su contraseña y desactivando la cuenta 5 días después de que caduque la contraseña en el caso de que el usuario hubiese omitido cambiarla.
La descripción completa de opciones para passwd puede consultarse en la página de manual correspondiente.
man 1 passwd
A continuación se crearán algunos grupos y cuentas de usuario con diversas características para practicar los conceptos aprendidos.
Genere al usuario denominado «fulano», definiendo /bin/bash como intérprete de mandatos, UID «1001», directorio de inicio /home/fulano (valor predeterminado) y grupo principal fulano (valores predeterminados):
useradd --uid 1001 -m -s /bin/bash -c "Fulano de Tal" fulano
Asigne contraseña al usuario «fulano»:
passwd fulano
Genere al usuario denominado «mengano», definiendo /dev/null como intérprete de mandatos, definiendo el directorio de inicio /home/mengano (valor predeterminado) y grupo principal mengano (valores predeterminados):
useradd -m -s /dev/null -c "Mengano de Tal" mengano
Asigne contraseña al usuario «mengano»:
passwd mengano
Genere el grupo denominado «desarrollo» con GID 1003:
groupadd --gid 1003 desarrollo
Genere el grupo denominado «servicio» como grupo de sistema:
groupadd -r servicio
Genere al usuario denominado «perengano», definiendo /sbin/nologin como intérprete de mandatos, definiendo el directorio de inicio /home/perengano (valor predeterminado), con grupo principal desarrollo y grupo adicional servicio:
useradd -m -s /sbin/nologin \
-g desarrollo -G servicio \
-c "Perengano de Tal" perengano
Asigne contraseña al usuario perengano:
passwd perengano
Genere al usuario denominado «zutano», definiendo /bin/bash como intérprete de mandatos, definiendo el directorio de inicio /home/zutano (valor predeterminado), con grupo principal servicio y grupo adicional desarrollo:
useradd -m -s /bin/bash \
-g servicio -G desarrollo \
-c "Zutano de Tal" zutano
Asigne contraseña al usuario «zutano»:
passwd zutano
Haga caducar la contraseña del usuario «zutano»:
chage -d 0 zutano
Lo anterior forzará el cambio de la contraseña con el siguiente acceso de zutano.
Visualice el contenido de los archivos /etc/group, /etc/passwd y /etc/shadow y compare y determine las diferencias entre los grupos «desarrollo» y «servicio» y los usuarios «fulano», «mengano», «perengano» y «zutano».
tail -2 /etc/group
tail -4 /etc/passwd
tail -4 /etc/shadow
Pulse CTRL+ALT+F2 (máquinas reales) o CTRL (derecho)+F2 (Máquinas virtuales con VirtualBox) e ingrese como fulano.
Pulse CTRL+ALT+F3 (máquinas reales) o CTRL (derecho)+F3 (Máquinas virtuales con VirtualBox) e intente ingresar como mengano. Debe denegarse el acceso.
Intente ingresar como perengano. Debe denegarse el acceso.
Ingrese como zutano. Se solicitará ingresar de nuevo la contraseña actual y luego se solicitará ingresar una nueva contraseña con confirmación. La nueva contraseña deberá excluir palabras de diccionarios.
Compare resultados y haga conclusiones.
Este ejercicio le permitirá observar de primera mano el efecto de configurar diferentes intérpretes de mandatos (/bin/bash, /dev/null, /sbin/nologin) y la gestión de grupos primarios y adicionales.
Si utiliza un entorno de escritorio, los entornos modernos como GNOME, Cinnamon, MATE Desktop (con mate-user-admin), KDE Plasma y Xfce (también a través de mate-user-admin) incluyen aplicaciones gráficas para gestionar usuarios y grupos. Estas herramientas suelen utilizar el servicio accountsservice (D-Bus) para realizar cambios, lo que las hace compatibles entre diferentes entornos.
Sin embargo, es fundamental familiarizarse con los mandatos de consola, ya que son universales y están disponibles en cualquier instalación, incluso sin interfaz gráfica. En distribuciones modernas como AlmaLinux, Rocky Linux o RHEL 8/9/10, la administración mediante la línea de mandatos con useradd, usermod, passwd y groupadd es el método recomendado y más potente.
Nota: En sistemas que utilizan ALDOS —que utiliza Xfce como escritorio predeterminado— puede utilizar la herramienta de MATE mate-user-admin que está instalada de modo predeterminado.
Cuando un intruso consigue infiltrarse en un sistema es generalmente debido a que se realizó una conexión a través de SSH y se pudo «adivinar» alguna de las contraseñas de las cuentas de usuario existentes o bien la contraseña del administrador. Si se especificó una mala contraseña de root durante el proceso de instalación del sistema operativo, algo muy común entre usuarios novicios, es muy probable que ésta sea vulnerada en pocas horas (e incluso minutos) después de conectarse a Internet.
123456 o password. La longitud compensa en parte la falta de complejidad.passwd.Se considera como una buena contraseña aquella que se compone de una combinación de números y letras mayúsculas y minúsculas y que contiene como mínimo 12 caracteres, e incluye caracteres especiales. Sin embargo, el panorama de seguridad evoluciona:
fail2ban. Es fundamental configurar correctamente estos servicios de supervisión. Puede aprender más en el manual Configuración de fail2ban.Observar estas recomendaciones, principalmente en sistemas con acceso a redes locales y/o públicas, como Internet, hará que el sistema sea más seguro. La gestión consciente y cuidadosa de cuentas de usuario y grupos es la primera línea de defensa para cualquier sistema.
man useraddman usermodman passwdman groupaddman login.defsman nologin