Gestión de usuarios y grupos en Linux: UID, GID y control de cuentas
El núcleo de Linux trabaja con identificadores numéricos: UIDs y GIDs. Un nombre de usuario es simplemente un alias legible por humanos almacenado en /etc/passwd. Los procesos y archivos se vinculan a estos números, por lo que cambiar un nombre de usuario sin conservar el UID original provocará la pérdida de acceso a recursos.
Comprueba el usuario actual:
id
# uid=1001(deployer) gid=1001(deployer) groups=1001(deployer),27(sudo),998(docker)
id -u # Solo UID
whoami # Solo nombre de usuario
getent passwd deployer
getent consulta módulos NSS, incluyendo LDAP, a diferencia de leer directamente los archivos.
Modelo de acceso y propiedad
Cada inodo almacena un propietario (UID) y un grupo (GID). El kernel verifica los permisos en este orden: UID/GID del proceso → propietario? → grupo? → otros. La primera coincidencia determina el acceso.
Ejemplo:
ls -la /var/log/nginx/
# -rw-r----- 1 www-data adm 187234 Mar 26 10:41 access.log
El propietario es www-data, el grupo es adm. Un proceso que se ejecuta como www-data obtiene acceso de propietario, ignorando su membresía en grupos.
Rangos de UID:
- 0: root
- 1–999: cuentas de sistema (daemons, sin inicio de sesión)
- 1000+: usuarios regulares
- 65534: nobody
Configurados en /etc/login.defs.
Las cuentas de sistema usan /usr/sbin/nologin o /bin/false para evitar el inicio de sesión:
awk -F: '$3 < 1000 && $3 > 0 {print $1, $3, $7}' /etc/passwd
Grupos: acceso compartido
El grupo primario (GID en /etc/passwd) se aplica a los nuevos archivos. Los grupos secundarios se listan en /etc/group.
Verifica la membresía:
groups # Grupos actuales
getent group docker # Miembros
docker:x:998:deployer,ci
Los grupos simplifican el control de acceso: añade un usuario al grupo docker para otorgar acceso al socket sin necesidad de sudo.
Archivos de configuración
/etc/passwd (accesible por todos):
deployer:x:1001:1001:Deploy Bot,,:/home/deployer:/bin/bash
Campos: nombre de usuario | marcador de contraseña (x) | UID | GID | GECOS | directorio home | shell.
/etc/shadow (solo root): contiene hashes SHA-512 o yescrypt, y ajustes de expiración de contraseñas.
deployer:$6$rounds=5000$xPwF...$kE9...hash...:19800:0:99999:7:::
/etc/group:
docker:x:998:deployer,ci-bot
Comandos seguros para edición:
vipw # Editar passwd con bloqueo
vigr # Editar grupo
pwck # Validar configuración
Creación y configuración de usuarios
Usa useradd con opciones clave:
| Opción | Descripción |
|--------|-------------|
| -m | Crear directorio home |
| -s | Establecer shell predeterminado |
| -G | Añadir grupos secundarios |
| -r | Cuenta de sistema |
| -u | Especificar UID |
Ejemplos:
useradd -m -s /bin/bash -G sudo,docker ivan
useradd -r -s /usr/sbin/nologin ci-bot
passwd ivan # Establecer contraseña
chpasswd <<< 'ivan:secret'
passwd -e ivan # Forzar cambio de contraseña en el siguiente inicio de sesión
useradd -m copia desde /etc/skel y establece la propiedad del directorio home.
umask resta de 0666 (archivos) o 0777 (directorios). Predeterminado: 0022.
Entorno y plantillas
/etc/skel almacena plantillas para las nuevas carpetas de usuario: .bashrc, .profile.
Configuraciones globales:
/etc/default/useradd: valores predeterminados parauseradd/etc/profile.d/*.sh: scripts de entorno para inicios de sesión/etc/login.defs: umask, ajustes de rango de UID
Puntos clave:
- El UID controla el acceso, no el nombre de usuario.
- Usa
getenten lugar decat /etc/passwdpara búsquedas compatibles con NSS. - Los grupos son el mecanismo principal para delegar privilegios.
- Siempre edita archivos de configuración con
vipwovigr. - Las cuentas de sistema deben tener
/usr/sbin/nologino/bin/falsey UID < 1000.
— Editorial Team
Aún no hay comentarios.