¿Cómo gestionar usuarios y grupos? Habilitación de acceso sudo

Aprender Certificado Fundación Linux en España contenido Técnicos desde Cero en CiberED

En Linux todo gira alrededor de los usuarios y los grupos. Cada proceso, cada archivo, cada recurso pertenece a un usuario y a un grupo. La correcta administración de estas entidades es esencial para la seguridad y la organización del sistema.

En este capítulo aprenderás a crear, modificar y eliminar usuarios y grupos, a gestionar sus contraseñas y políticas de envejecimiento, y a conceder privilegios administrativos mediante sudo, la herramienta que permite delegar tareas de superusuario de forma controlada.

Para el examen LFCS debes dominar estos comandos y archivos, así como entender el significado de cada campo en /etc/passwd, /etc/shadow, /etc/group y la sintaxis del archivo /etc/sudoers.

8.2. Los archivos de configuración de usuarios y grupos

8.2.1. /etc/passwd

Contiene la información de las cuentas de usuario. Cada línea tiene 7 campos separados por :

nombre:x:UID:GID:comentario:directorio_home:shell
CampoSignificado
1Nombre de usuario (login)
2Contraseña encriptada (hoy aparece x; la real está en /et​c/sh​adow)
3UID (User ID). 0 para root, 1-999 para usuarios del sistema, 1000+ para usuarios normales
4GID (Group ID) del grupo primario
5Campo GECOS: comentario o nombre completo
6Directorio home absoluto
7Shell de inicio (ej. /bi​n/ba​sh)

Ejemplo:

juan:x:1001:1001:Juan Pérez:/home/juan:/bin/bash

8.2.2. /et​c/sh​adow

Almacena las contraseñas cifradas y datos de caducidad. Solo root puede leerlo. Formato:

nombre:contraseña:último_cambio:min_días:max_días:aviso:inactividad:caducidad:reservado
  • contraseña: hash (si empieza con ! o !!, la cuenta está bloqueada).
  • último_cambio: días desde el 1/1/1970 en que se cambió la contraseña.
  • min_días: días mínimos entre cambios.
  • max_días: días máximos hasta que caduca la contraseña.
  • aviso: días de antelación para avisar de caducidad.
  • inactividad: días tras caducidad en que se bloquea la cuenta.
  • caducidad: fecha absoluta (en días desde epoch) en que la cuenta expira.
  • reservado: campo reservado.

Ejemplo:

juan:$6$sal...hash:19000:0:99999:7:::

8.2.3. /et​c/gr​oup

Define los grupos del sistema:

nombre_grupo:x:GID:miembros
  • miembros: lista de nombres de usuario separados por comas (usuarios que pertenecen a este grupo como grupo secundario).

Ejemplo:

staff:x:1001:juan,ana

8.2.4. /et​c/gsha​dow (opcional)

Similar a shadow pero para grupos: almacena contraseña de grupo (si se usa) y administradores. Generalmente no se edita a mano.

8.3. Comandos para gestionar usuarios

8.3.1. Crear usuarios: useradd

Sintaxis básica:

useradd [opciones] nombre_usuario

Opciones más utilizadas:

  • -m : crear directorio home (y copiar esqueleto desde /etc/skel).
  • -d directorio : especificar directorio home (si no existe, no lo crea a menos que se añada -m).
  • -s shell : shell de inicio (ej. /bin/bash).
  • -u UID : forzar un UID concreto.
  • -g grupo : grupo primario (debe existir).
  • -G grupos : grupos secundarios (separados por comas).
  • -c "comentario" : campo GECOS.
  • -e fecha : fecha de expiración de la cuenta (YYYY-MM-DD).
  • -f días : días de inactividad tras caducidad de contraseña.
  • -k directorio_esqueleto : usar otro esqueleto distinto de /etc/skel.
  • -r : crear usuario del sistema (UID bajo, sin home, etc.).

Ejemplos:

Crear un usuario normal con home y bash:

sudo useradd -m -s /bin/bash -c "María García" maria

Crear un usuario con grupo primario desarrolladores y secundario docker:

sudo useradd -m -g desarrolladores -G docker -s /bin/bash carlos

Crear un usuario de sistema (sin home, sin login):

sudo useradd -r -s /usr/sbin/nologin mi_servicio

Valores por defecto: se definen en /etc/default/useradd y /etc/login.defs. Puedes verlos con useradd -D.

Después de crear el usuario, es obligatorio asignar una contraseña:

sudo passwd maria

8.3.2. Modificar usuarios: usermod

Sintaxis similar a useradd pero para modificar cuentas existentes.

  • -l nuevo_nombre : cambiar nombre de login.
  • -L : bloquear cuenta (añade ! al inicio del hash de contraseña).
  • -U : desbloquear.
  • -aG grupo : añadir a grupo(s) secundario(s) sin eliminarlo de otros (importante usar -a).
  • -d directorio -m : cambiar el home y mover el contenido.

Ejemplos:

Cambiar el shell de maria a zsh:

sudo usermod -s /usr/bin/zsh maria

Añadir a maria al grupo sudo (sin quitarla de otros grupos):

sudo usermod -aG sudo maria

Bloquear la cuenta de carlos:

sudo usermod -L carlos

Cambiar el nombre de usuario:

sudo usermod -l maria2 maria   # ahora el login es maria2

8.3.3. Eliminar usuarios: userdel

sudo userdel nombre_usuario
  • -r : elimina también el directorio home y el buzón de correo.

Precaución: si el usuario es propietario de archivos fuera de su home, quedarán con UID huérfano.

8.3.4. Gestión de contraseñas: passwd

  • Cambiar contraseña propia: passwd (sin argumentos).
  • Cambiar contraseña de otro (root): sudo passwd usuario.
  • Bloquear contraseña: sudo passwd -l usuario (equivale a usermod -L).
  • Desbloquear: sudo passwd -u usuario.
  • Forzar caducidad inmediata (obliga a cambiar en próximo login): sudo passwd -e usuario.
  • Estado de la contraseña: sudo passwd -S usuario (muestra LK si bloqueada, PS si tiene contraseña, NP si no tiene).

8.3.5. Políticas de envejecimiento: chage

Controla la caducidad y el ciclo de vida de las contraseñas.

  • -l usuario : mostrar información de caducidad.
  • -M días : días máximos de vigencia de la contraseña.
  • -m días : días mínimos entre cambios.
  • -W días : días de aviso antes de caducidad.
  • -I días : días de inactividad tras caducidad antes de bloquear cuenta.
  • -E fecha : fecha de expiración de la cuenta (YYYY-MM-DD).
  • -d 0 : forzar cambio de contraseña en el siguiente login (similar a passwd -e).

Ejemplo: hacer que la contraseña de maria caduque a los 30 días y avisar con 7 días de antelación:

sudo chage -M 30 -W 7 maria

8.4. Gestión de grupos

8.4.1. Crear grupos: groupadd

sudo groupadd nombre_grupo

Opciones:

  • -g GID : especificar GID.
  • -r : crear grupo de sistema (GID bajo).

8.4.2. Modificar grupos: groupmod

  • -g nuevo_GID : cambiar GID.
  • -n nuevo_nombre : renombrar grupo.
sudo groupmod -n desarrolladores dev

8.4.3. Eliminar grupos: groupdel

sudo groupdel nombre_grupo

No se puede eliminar si es el grupo primario de algún usuario. Primero hay que reasignar a esos usuarios con usermod -g nuevo_grupo.

8.4.4. Añadir y quitar miembros de grupo: gpasswd

  • -a usuario : añadir usuario al grupo.
  • -d usuario : eliminar usuario del grupo.
  • -M usuario1,usuario2 : establecer la lista exacta de miembros (sobrescribe).
  • -A usuario_admin : asignar administrador del grupo.
sudo gpasswd -a maria staff
sudo gpasswd -d maria staff

También se puede editar directamente /et​c/gr​oup o usar user​mod -a​G, pero gpass​wd es la herramienta específica para grupos.

8.5. Cambio de identidad: su y sudo

8.5.1. su (switch user)

Permite cambiar a otro usuario. Si no se especifica, intenta cambiar a root.

  • su - usuario : inicia un shell de login (carga entorno completo).
  • su usuario : inicia shell no interactivo (mantiene el entorno actual, peligroso).
  • su - : cambiar a root con entorno.
  • Salir: exit o Ctrl+d.
su - maria

8.5.2. sudo (do as superuser)

Ejecuta un comando con privilegios de otro usuario (por defecto root). Es más seguro que compartir la contraseña de root.

Sintaxis:

sudo [opciones] comando

Ejemplos:

sudo apt update
sudo -u maria whoami   # ejecutar como maria

La configuración de sudo se detalla a continuación.

8.6. Configuración de sudo: /et​c/sud​oers y vi​sudo

El archivo /et​c/sud​oers define quién puede ejecutar qué comandos como qué usuario. Nunca se edita directamente, sino a través de vi​sudo, que bloquea el archivo y verifica sintaxis antes de guardar.

sudo visudo

Por defecto usa vi (o nano si la distribución lo configuró). Para cambiar el editor: sudo EDITOR=nano visudo.

8.6.1. Sintaxis básica

usuario    host = (usuario_destino) comandos
  • usuario: nombre de usuario, %grupo para un grupo, o ALL para todos.
  • host: normalmente ALL (se refiere al nombre de la máquina donde aplica la regla).
  • usuario_destino: entre paréntesis, el usuario al que se puede cambiar (opcional; si se omite, root). Puede ser ALL.
  • comandos: lista de comandos separados por comas, con rutas absolutas. Se pueden usar alias (Cmnd_Alias).

Ejemplos:

Permitir a maria ejecutar cualquier comando como root:

maria   ALL=(ALL:ALL) ALL

Permitir al grupo admin ejecutar cualquier comando:

%admin   ALL=(ALL:ALL) ALL

Permitir a carlos reiniciar el sistema sin contraseña:

carlos   ALL=(root) NOPASSWD: /sbin/reboot, /sbin/shutdown -r now

Usar alias de comandos:

Cmnd_Alias REINICIAR = /sbin/reboot, /sbin/shutdown -r now
carlos   ALL=(root) NOPASSWD: REINICIAR

Permitir a juan ejecutar cualquier comando como el usuario www-data:

juan    ALL=(www-data) ALL

Denegar comandos específicos (se evalúa en orden, la última regla gana):

juan    ALL=(ALL) ALL
juan    ALL=(ALL) !/usr/bin/passwd

8.6.2. Incluir archivos adicionales

En la mayoría de distribuciones, /et​c/sud​oers incluye el directorio /et​c/sud​oers.d​/, donde se pueden colocar archivos de configuración adicionales. Esto es preferible para no modificar el archivo principal.

Ejemplo de archivo /et​c/sud​oers.d​/ma​ria:

maria   ALL=(ALL:ALL) NOPASSWD:ALL

Se deben crear con permisos 0440 y propietario root:root.

8.6.3. Registro de uso

Los comandos ejecutados con su​do se registran en /v​ar/l​og/au​th.l​og (Debian/Ubuntu) o /v​ar/l​og/sec​ure (RHEL/CentOS). Pueden consultarse con jour​nalctl _CO​MM=su​do.

8.7. Comandos de verificación y diagnóstico

  • id [usuario] : muestra UID, GID y grupos a los que pertenece el usuario.
    id maria
    uid=1001(maria) gid=1001(maria) groups=1001(maria),27(sudo)
    
  • whoami : muestra el nombre del usuario actual.
  • groups [usuario] : muestra los grupos a los que pertenece el usuario.
  • getent passwd [usuario] : muestra la línea de /etc/passwd correspondiente.
  • getent group [grupo] : muestra la línea de /etc/group.
  • w o who : usuarios conectados.
  • last : últimos logins.

8.8. Ejercicios prácticos

  1. Creación y modificación de usuarios:

    • Crea el usuario pedro con home /home/pedro, shell /bin/bash y grupo primario pedro. Asígnale una contraseña.
    • Añade a pedro a los grupos staff y sudo sin sacarlo de otros grupos.
    • Cambia el shell de pedro a /bin/zsh.
    • Bloquea y desbloquea la cuenta de pedro.
    • Haz que la contraseña de pedro expire en 15 días y avise con 3 días de antelación.
  2. Gestión de grupos:

    • Crea el grupo proyecto_x con GID 1500.
    • Añade a maria y pedro a ese grupo.
    • Cambia el nombre del grupo a proyecto_alpha.
    • Elimina el grupo (si no es primario de nadie).
  3. Eliminar usuarios:

    • Elimina a pedro incluyendo su home y buzón.
  4. Configuración de sudo:

    • Mediante visudo, permite que el grupo proyecto_alpha pueda ejecutar systemctl restart nginx sin contraseña.
    • Crea un archivo en /etc/sudoers.d/ que conceda a maria permisos para ejecutar cualquier comando como el usuario backup.
    • Verifica la sintaxis y prueba con sudo -l los permisos de maria.
  5. Comprobación y resolución de problemas:

    • Usa id y groups para verificar los grupos de un usuario tras modificaciones.
    • Encuentra los archivos que pertenecen a un usuario eliminado (UID huérfano) con find / -nouser.

8.9. Resumen y consejos para LFCS

  • Memoriza los campos de /et​c/pass​wd y /et​c/sh​adow; suelen preguntar su significado.
  • Conoce las opciones clave de useradd, usermod y userdel. La diferencia entre -G y -aG es un clásico.
  • visudo es obligatorio; editar /etc/sudoers a mano puede romper el sistema.
  • Entiende la sintaxis de sudo: (usuario), NOPASSWD:, alias (User_Alias, Cmnd_Alias). No es necesario ser experto en alias complejos, pero sí saber leer y escribir reglas simples.
  • chage y passwd -e son útiles para forzar cambios de contraseña.
  • Recuerda que los usuarios del sistema (UID < 1000) se crean con useradd -r y normalmente no tienen acceso interactivo.
  • La gestión de usuarios es la puerta de entrada a la seguridad. Practica hasta sentirte cómodo con la asignación de permisos mínimos necesarios.

Con estos conocimientos estarás preparado para manejar la base de usuarios y permisos sudo en cualquier sistema Linux. En el siguiente capítulo nos sumergiremos en la gestión de paquetes con las principales herramientas: Yum, RPM, Apt, Dpkg, Aptitude y Zypper.

Vistas: 1

Descubre más desde CIBERED

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Scroll al inicio