Este artículo fue publicado originalmente en go2linux.org el 11 de febrero de 2009. El dominio ya no me pertenece, pero soy el autor original. Lo republico aquí en garron.me con correcciones y mejoras.
Introducción
En Linux, los grupos controlan a qué recursos puede acceder un usuario. Al agregar un usuario al grupo sudo obtiene privilegios de administrador; al grupo docker puede gestionar contenedores sin root; al grupo www-data puede escribir en los directorios del servidor web.
Cada usuario tiene un grupo primario (asignado al crear la cuenta) y cero o más grupos suplementarios. La gestión habitual de grupos involucra los grupos suplementarios.
Ver la membresía actual de grupos
Antes de hacer cambios, verifica a qué grupos pertenece el usuario:
groups nombre_usuario
O con más detalle incluyendo UID y GID:
id nombre_usuario
Para listar todos los miembros de un grupo específico:
getent group nombre_grupo
Agregar un usuario existente a un grupo
Usa usermod con las opciones -a (append/agregar) y -G (grupos suplementarios):
sudo usermod -a -G nombre_grupo nombre_usuario
Importante: incluye siempre
-a. Sin ella,usermod -G nombre_grupo nombre_usuarioreemplaza toda la lista de grupos suplementarios del usuario con solo ese grupo — eliminándolo de todos los demás grupos a los que pertenecía. Es el error más común y dañino en la gestión de usuarios Linux.
Ejemplo — agregar el usuario alice al grupo docker:
sudo usermod -a -G docker alice
Agregar un usuario a múltiples grupos a la vez
Separa los nombres de grupos con comas, sin espacios:
sudo usermod -a -G grupo1,grupo2,grupo3 nombre_usuario
Ejemplo:
sudo usermod -a -G docker,www-data,developers alice
Crear un nuevo usuario y agregarlo a un grupo
Usa useradd con -G para los grupos suplementarios:
sudo useradd -G nombre_grupo nuevo_usuario
sudo passwd nuevo_usuario
Para agregar a múltiples grupos al crear la cuenta:
sudo useradd -G docker,developers nuevo_usuario
Cambiar el grupo primario de un usuario
Usa -g en minúscula (no -G mayúscula) para definir el grupo primario:
sudo usermod -g nombre_grupo nombre_usuario
| Opción | Efecto |
|---|---|
-G (mayúscula) |
Define o agrega grupos suplementarios |
-g (minúscula) |
Cambia el grupo primario |
Eliminar un usuario de un grupo
Usa gpasswd con la opción -d:
sudo gpasswd -d nombre_usuario nombre_grupo
gpasswd también es una alternativa segura para agregar a un solo grupo, ya que solo puede afectar un grupo a la vez y no hay riesgo de borrar los demás:
sudo gpasswd -a nombre_usuario nombre_grupo
Verificar el cambio
Después de modificar la membresía, confirma con:
groups nombre_usuario
id nombre_usuario
getent group nombre_grupo
Importante: los cambios de grupo no se aplican en la sesión actual del usuario. El usuario debe cerrar sesión y volver a iniciarla (o ejecutar newgrp nombre_grupo) para que los nuevos grupos estén activos.
Grupos comunes del sistema
| Grupo | Da acceso a |
|---|---|
sudo / wheel |
Ejecutar comandos como root con sudo |
docker |
Gestionar contenedores Docker sin sudo |
www-data |
Escribir en directorios del servidor web (Apache/Nginx) |
adm |
Leer archivos de log del sistema en /var/log |
audio |
Dispositivos de sonido |
video |
Dispositivos de video y acceso a GPU |
plugdev |
Montar dispositivos extraíbles |
lpadmin |
Gestionar impresoras |
usermod vs useradd vs gpasswd
| Comando | Para qué sirve |
|---|---|
usermod -a -G |
Agregar un usuario existente a uno o más grupos |
useradd -G |
Definir grupos al crear un nuevo usuario |
gpasswd -a |
Agregar a un solo grupo (sin riesgo de borrar otros) |
gpasswd -d |
Eliminar un usuario de un grupo |