El comando groups en Linux: mostrar los grupos de un usuario

Introducción

En los sistemas operativos tipo Unix, la gestión de permisos se basa en la combinación de usuarios y grupos. Cada proceso, archivo o dispositivo tiene asociado un propietario (usuario) y un grupo que determina quién puede leer, escribir o ejecutar. Conocer a qué grupos pertenece un usuario es el primer paso para diagnosticar problemas de acceso, ajustar privilegios y mantener la seguridad del sistema.

¿Qué hace exactamente el comando groups?

El comando groups pertenece al conjunto de utilidades básicas de GNU coreutils. Su función es imprimir en la salida estándar la lista de grupos a los que pertenece un usuario especificado o, si no se indica ningún nombre, el usuario que ejecuta el comando. La salida consiste en nombres de grupos separados por espacios, lo que facilita su procesamiento con herramientas como awk, sed o cut.

Sintaxis y opciones

La forma más simple es:

groups [usuario]

No existen opciones largas o cortas que modifique su comportamiento; el comando ignora cualquier argumento adicional más allá del nombre de usuario. Si se proporciona más de un nombre, mostrará la lista para cada uno en líneas separadas.

Ejemplos de uso cotidiano

  • Ver los grupos del usuario actual:
  • groups
  • Consultar los grupos de otro usuario, por ejemplo juan:
  • groups juan
  • Obtener la lista en formato CSV para facilitar su importación a una hoja de cálculo:
  • groups juan | tr ' ' ','
  • Mostrar los grupos de varios usuarios a la vez:
  • groups juan ana carlos

Grupos primarios y suplementarios

En Linux cada usuario tiene un grupo primario (también llamado grupo de inicio de sesión) que se establece en el campo correspondiente del archivo /etc/passwd. Además, puede pertenecer a cero o más grupos suplementarios, que se listan en /etc/group. El comando groups muestra tanto el grupo primario como los suplementarios, sin distinguirlos explícitamente. Para ver únicamente el grupo primario se puede usar id -gn usuario, mientras que id -G usuario lista todos los IDs numéricos.

Dónde se almacena la información de grupos

Los archivos fundamentales son:

  • /etc/passwd: contiene una línea por usuario; el cuarto campo es el ID del grupo primario.
  • /etc/group: contiene una línea por grupo; el cuarto campo lista los usuarios que son miembros suplementarios.
  • En entornos con servicios de directorio como NIS, LDAP o Samba, la información puede provenir de esos repositorios y se consulta mediante getent.

Para verificar de dónde proviene la información, se puede usar:

getent group nombre_del_grupo

Si la salida proviene de /etc/group y también de LDAP, getent mostrará todas las coincidencias.

Combinando groups con otros comandos

Aunque groups es suficiente para una vista rápida, a menudo se combina con otras utilidades para obtener más detalle o para usarlo en scripts:

  • id -nG usuario devuelve solo los nombres de los grupos, equivalente a groups usuario pero con formato más predecible para programación.
  • groups usuario | wc -w cuenta cuántos grupos tiene el usuario.
  • grep -E "^nombre_del_grupo:" /etc/group muestra la línea completa del grupo en /etc/group.
  • En un script de auditoría:
  • #!/bin/bash
    for u in $(cut -d: -f1 /etc/passwd); do
        echo -n "$u: "
        groups $u | tr ' ' ','
    done
    

Modificando la pertenencia a grupos

El comando groups solo muestra información; para cambiarla se usan:

  • usermod -aG grupo usuario: agrega al usuario al grupo suplementario indicado (el modificador -a garantiza que no se eliminen los grupos existentes).
  • gpasswd -d usuario grupo: elimina al usuario del grupo especificado.
  • newgrp grupo: inicia una nueva shell con el grupo especificado como grupo primario efectivo, útil para probar permisos sin cerrar la sesión.

Después de ejecutar usermod o gpasswd, el usuario debe iniciar una nueva sesión de inicio de sesión (o usar su -) para que los cambios sean visibles en groups.

Buenas prácticas y consideraciones de seguridad

  • Evitar asignar usuarios a grupos privilegiados como root, wheel o sudo sin una justificación documentada.
  • Revisar periódicamente la salida de groups para cuentas de servicio y asegurarse de que solo tengan los grupos necesarios para su función.
  • Utilizar groups en combinación con sudo -l para ver qué comandos puede ejecutar un usuario según su pertenencia a grupos.
  • En sistemas con autenticación externa, verificar que los grupos provengan del source esperado mediante getent group y id.
  • Documentar cambios en la pertenencia a grupos en un registro de cambios o mediante herramientas de gestión de configuración como Ansible or Puppet.

Solución de problemas comunes

  • El usuario no ve un grupo que debería tener: Verifique que haya iniciado una nueva sesión después de modificar la pertenencia; los cambios no se aplican a sesiones existentes.
  • Salida vacía o solo muestra el nombre de usuario: Puede indicar que el usuario no tiene ningún grupo suplementario y su grupo primario no se muestra debido a una configuración de PAM; use id -gn para confirmar el grupo primario.
  • Discrepancia entre groups y id: id consulta directamente el token de credenciales del proceso, mientras que groups lee los archivos de texto; si se utilizan servicios de red como LDAP, asegúrese de que el daemon de nscd o sssd esté actualizado.
  • Mensaje de error «usuario no encontrado»: Revise la ortografía del nombre de usuario y confirme que exista en /etc/passwd o en el directorio configurado.

Conclusión

El comando groups es una herramienta esencial para cualquier administrador de sistemas Linux. Su simplicidad permite obtener rápidamente la lista de grupos de un usuario, lo que resulta indispensable para la gestión de permisos, la auditoría de seguridad y la automatización de tareas. Combinado con otras utilidades como id, getent y usermod, forma parte del conjunto básico de comandos que todo profesional debe dominar para mantener un entorno seguro y eficiente.

Esta obra está bajo una Licencia Creative Commons Atribución 4.0 Internacional para Francesc Roig francesc@vivaldi.net .

EspañolesEspañolEspañol