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_usuario reemplaza 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