← Blog

Administración de Usuarios y Grupos en Linux

Gestión de usuarios y grupos: /etc/passwd, /etc/shadow, /etc/group, chown/chgrp, su, sudo y sudoers.

Administración de Usuarios y Grupos en Linux

Operational Scope & Technical Objective

Las cuentas locales de Linux se almacenan en tres archivos con separación de responsabilidades: /etc/passwd (nombre de usuario, UID, GID, home, shell — legible por todos), /etc/shadow (hash de contraseña y política de expiración — solo root/grupo shadow) y /etc/group (definición de grupos y membresías). La posesión de archivos se rige por UID/GID (chown/chgrp) y el cambio de identidad en runtime por su/sudo. El bit x sobre un directorio determina si un usuario puede ejecutar comandos en su interior — condición necesaria además de r.

High-Impact Syntax & Command Cheatsheet

Inspección de cuentas y sesiones

users          # usuarios con sesión activa
who            # sesiones activas con tty y origen
w              # quién está conectado y qué proceso ejecuta

cat /etc/passwd                     # cuentas: user:x:UID:GID:info:home:shell
cat /etc/passwd | cut -d : -f 1     # solo nombres de usuario
cat /etc/shadow                     # hashes de contraseña (requiere privilegio)
cat /etc/group                      # grupos y miembros
id                                  # UID/GID/grupos del usuario actual

Permisos y propiedad

ls -la                              # vista de permisos y propiedad

chmod g-w hello.txt                 # quita write al grupo
chmod a=,u=r hello.txt              # others/grupo a 0, owner con solo r
chmod 664 hello.txt                 # rw- para user y group, r-- para others

sudo chown mike hello.txt           # cambia el owner del archivo
sudo chgrp mike hello.txt           # cambia el grupo del archivo

El bit x de un directorio habilita recorrerlo y ejecutar comandos dentro; sin él, cd y la resolución de nombres fallan incluso con r presente.

Cambio de identidad

sudo -u anotheruser cat restricted.txt   # lee como otro usuario, sin switch
su newuser                               # cambia de usuario (pide contraseña de destino)
su -                                     # nueva sesión de login como root (carga entorno)
su -c 'ls Desktop'                       # ejecuta un solo comando, sin crear sesión de login

Gestión de contraseñas

passwd                # cambia la contraseña del usuario actual
sudo passwd newuser   # cambia la contraseña de otro usuario

Manipulación de cuentas

adduser <user name>            # crea un usuario nuevo (Debian, con home y grupo)
adduser <user name> sudo       # agrega el usuario al grupo sudo
useradd <user>                 # creación mínima (sin home por defecto en algunos sistemas)
usermod -aG <group> <user>     # agrega a un grupo suplementario
userdel <user>                 # elimina la cuenta

Real-World Offensive/Defensive Scenarios

  • Inventario de superficie (ofensivo): enumerar cuentas con shell real y UID 0 para identificar objetivos:

    awk -F: '($3 == 0) {print}' /etc/passwd                       # cuentas UID 0
    grep -E "/(bash|sh|zsh)$" /etc/passwd                          # cuentas con shell
    getent group sudo                                              # miembros del grupo sudo
    
  • Legibilidad de /etc/shadow (ofensivo): si ls -l /etc/shadow muestra -rw-r--rw-, se puede volcar el hash y romperlo offline con unshadow + john (ver escalar-rutas); si es escribible, reemplazar el hash de root con uno generado con openssl passwd -6.

  • Propiedad como vector (ofensivo): chown con privilegio sobre un script ejecutado por root (cron, service unit) convierte la propiedad en ejecución arbitraria; verificar qué archivos pertenecen al usuario actual en rutas de sistema:

    find / -user $(whoami) -type f 2>/dev/null | grep -v -E '^/(proc|sys|dev|run)'
    
  • Política de cuentas (defensivo): restringir su/sudo vía pam_wheel (solo grupo wheel), forzar PermitRootLogin no en SSH y auditar membresías del grupo sudo.