Grupos en Linux. Control de acceso sin complicaciones

Índice
Grupos en Linux. Control de acceso sin complicaciones

Si los usuarios son los actores, los grupos son el reparto. Asignar permisos usuario a usuario es perder el tiempo — los grupos permiten gestionar el acceso a recursos para varios usuarios de una vez, cambiando una sola línea. Es la forma correcta de hacer administración de sistemas en Linux.

Este artículo complementa Usuarios en Linux I y Usuarios en Linux II. Si no los has leído, empieza por ahí.


👥 Grupo primario y grupo secundario

Cada usuario pertenece a un grupo primario y puede pertenecer a varios grupos secundarios.

  • Grupo primario: el que se asigna a los ficheros que crea el usuario. Normalmente tiene el mismo nombre que el usuario.
  • Grupos secundarios: grupos adicionales que otorgan acceso a recursos concretos (impresoras, discos, sudo, etc.).

Para ver los grupos de un usuario:

# Grupos del usuario actual
groups

# Grupos de un usuario concreto
groups sistemas

# Información completa: UID, GID primario y grupos secundarios
id sistemas

📄 El fichero /etc/group

Toda la información de grupos vive en /etc/group. Su formato es sencillo:

nombre:contraseña:GID:miembros

Un ejemplo real:

sudo:x:27:gonzo,sistemas
docker:x:999:gonzo
sshusers:x:1001:adminuser,backupuser
  • x en el campo de contraseña significa que la contraseña está en /etc/gshadow (prácticamente en desuso).
  • El campo de miembros son los usuarios con ese grupo como secundario — los que lo tienen como primario no aparecen listados aquí.

⚙️ Gestión de grupos

Crear

# Crear grupo con GID automático
groupadd desarrolladores

# Crear grupo con GID específico
groupadd -g 1500 desarrolladores

Modificar

# Cambiar el nombre del grupo
groupmod -n devs desarrolladores

# Cambiar el GID
groupmod -g 1600 devs

Eliminar

groupdel devs

Nota: no se puede eliminar un grupo que sea el grupo primario de algún usuario. Hay que reasignar antes.


👤 Añadir y quitar usuarios de grupos

El error clásico con usermod

# MAL — reemplaza todos los grupos secundarios del usuario
usermod -G docker sistemas

# BIEN — añade al grupo sin tocar los demás (-a de append)
usermod -aG docker sistemas

Olvidar la -a es el error más común. El resultado es que el usuario pierde acceso a todo lo que tenía — incluido sudo si pertenecía a ese grupo.

Con gpasswd

# Añadir usuario al grupo
gpasswd -a sistemas docker

# Quitar usuario del grupo
gpasswd -d sistemas docker

Aplicar sin cerrar sesión

Los cambios de grupo no se aplican hasta que el usuario abre una nueva sesión. Para aplicarlos en la sesión actual sin salir:

newgrp docker

🔐 Permisos por grupo en la práctica

Cambiar el grupo propietario de un fichero

# Cambiar grupo de un fichero
chgrp desarrolladores proyecto.tar.gz

# Cambiar propietario y grupo a la vez
chown sistemas:desarrolladores proyecto.tar.gz

# Recursivo para un directorio
chown -R sistemas:desarrolladores /srv/proyecto/

Permisos de grupo con chmod

# Dar lectura y escritura al grupo
chmod g+rw fichero.txt

# Quitar ejecución al grupo
chmod g-x script.sh

# Notación octal: propietario=7, grupo=5, otros=0
chmod 750 /srv/proyecto/

El bit setgid — directorios compartidos

El bit setgid en un directorio hace que todos los ficheros creados dentro hereden el grupo del directorio, no el grupo primario del usuario que los crea. Imprescindible para carpetas compartidas entre varios usuarios:

# Crear directorio compartido
mkdir /srv/compartido
chgrp desarrolladores /srv/compartido
chmod 2770 /srv/compartido   # el 2 activa el setgid

# Verificar
ls -ld /srv/compartido
# drwxrws--- 2 root desarrolladores 4096 ...
# La 's' en la posición del grupo indica setgid activo

Sin setgid, cada usuario crearía ficheros con su propio grupo primario y los demás del equipo no podrían editarlos.


🔑 El grupo sudo

En Debian/Ubuntu el acceso a sudo se gestiona mediante el grupo sudo. En Red Hat/Fedora es el grupo wheel. Añadir un usuario a ese grupo es la forma limpia de darle privilegios de administración sin tocar /etc/sudoers a mano:

# Debian/Ubuntu
usermod -aG sudo sistemas

# Red Hat/Fedora/CentOS
usermod -aG wheel sistemas

Para revocar el acceso basta con quitarlo del grupo — sin editar ningún fichero de configuración:

gpasswd -d sistemas sudo

✅ Resultado

OperaciónComando
Ver grupos de un usuariogroups usuario / id usuario
Crear grupogroupadd nombre
Renombrar grupogroupmod -n nuevo_nombre nombre
Añadir usuario a grupousermod -aG grupo usuario
Quitar usuario de grupogpasswd -d usuario grupo
Cambiar grupo de ficherochgrp grupo fichero
Directorio compartido con setgidchmod 2770 directorio
Dar sudousermod -aG sudo usuario

Con los grupos bien configurados puedes controlar el acceso a cualquier recurso del sistema sin tocar los permisos de cada fichero individualmente. Un usuario entra al grupo, accede al recurso. Sale del grupo, pierde el acceso. Simple y auditable.