Cómo enumerar todos los usuarios en un grupo en Linux

Publicado: 2022-08-29
Computadora portátil Linux que muestra un indicador de bash
fatmawati achmad zaenuri/Shutterstock.com

En Linux, los archivos tienen tres conjuntos de permisos. Un conjunto es para el grupo del archivo. Antes de asignar un archivo a un grupo, es posible que desee comprobar quiénes son los miembros del grupo.

Permisos de archivos y directorios

Los archivos y directorios en Linux tienen un conjunto de permisos para el propietario, otro conjunto para el grupo al que está asignado el archivo y permisos para todos los que no están en una de las dos categorías anteriores.

Cada conjunto de permisos define si los miembros de esa categoría pueden leer, escribir o ejecutar el archivo. En el caso de un directorio, la acción de ejecución equivale a poder acceder al directorio mediante un cd .

El grupo predeterminado para un archivo o directorio es el grupo predeterminado del propietario. Esa suele ser la persona que lo creó. Los permisos de grupo se utilizan para permitir que una colección de usuarios tenga acceso controlado a los archivos y directorios de los otros miembros de ese grupo.

Por ejemplo, puede tener un equipo de desarrolladores, un equipo de documentación, un equipo de investigación, etc. Los miembros de cada equipo se pueden agregar a un grupo con el nombre adecuado para facilitar la colaboración. Los usuarios pueden estar en muchos grupos a la vez.

Es un esquema simple pero robusto. Pero si sus archivos son confidenciales, puede sentirse más feliz verificando quiénes son los miembros del grupo antes de compartir su trabajo con ellos. Hay maneras diferentes de hacer esto. Pero toma nota. Los dos métodos recomendados con más frecuencia son problemáticos.

RELACIONADO: Cómo usar el comando chgrp en Linux

El archivo /etc/groups

El archivo “/etc/group” contiene una lista delimitada por dos puntos “ : ” de grupos y miembros del grupo. Cada línea tiene cuatro campos.

  • Nombre : El nombre único del grupo.
  • Contraseña : No se utiliza. Esto siempre contendrá "x".
  • ID de grupo : el identificador único del grupo.
  • Usuarios : una lista delimitada por comas de los miembros del grupo. La lista suele estar vacía para las cuentas del sistema y daemon.

Para volcar el contenido del archivo en la ventana del terminal, puede usar cat , pero es más conveniente poder desplazarse por el contenido del archivo con less .

 menos /etc/grupo 

Uso de cat para ver el contenido del archivo /etc/group

La mayoría de las entradas en la parte superior de la lista no tienen miembros, aunque el grupo "adm" tiene dos y el grupo "cdrom" tiene uno.

La primera parte del archivo /etc/groups en el visor de archivos menos

Si queremos descubrir los grupos en los que se encuentra un usuario específico, podemos usar grep para buscar entradas con su nombre de cuenta de usuario. Esta no es nuestra tarea actual. Queremos ver a todos los que son miembros de un grupo, no a los grupos a los que pertenece una persona. Pero es instructivo para nosotros echar un vistazo.

 grep "dave" /etc/grupo 

La lista de grupos de los que el usuario dave es miembro

Las entradas que contienen la cadena "dave" se enumeran para nosotros. Y escondido entre ellos hay una señal de que las cosas podrían no ser tan simples como pensábamos.

Cuando se agrega un usuario a Linux, la acción predeterminada es colocarlo en un grupo con el mismo nombre que su cuenta de usuario. Este es su grupo principal . Cualquier otro grupo al que se agreguen se conoce como grupos secundarios .

El problema es que los usuarios no aparecen como miembros de sus grupos principales . Es por eso que el grupo "dave" no muestra ningún miembro, aunque el usuario "dave" es miembro de ese grupo.

Por supuesto, los administradores del sistema pueden cambiar el grupo principal de cualquier usuario por el de cualquier otro grupo. Eso significa que un usuario puede ser miembro de cualquier grupo, pero no aparecerá como tal en el archivo “/etc/group”. Ese es un problema.

El segundo problema es que el archivo “/etc/group” no es una única fuente de información. Las instalaciones modernas de Linux pueden almacenar información de usuarios y grupos en más lugares que "/etc/passwd" y "/etc/group", especialmente en situaciones corporativas donde se implementan servicios como el Protocolo ligero de acceso a directorios. Al mirar solo en un lugar, es posible que no esté viendo el panorama general.

En nuestro escenario de prueba, creamos cuatro grupos para un departamento de desarrollo. Están:

  • resteam : El equipo de investigación.
  • devteam : El equipo de desarrollo.
  • pvqteam : El equipo de verificación y calidad del producto.
  • docteam : El equipo de documentación.

Agregamos personas a estos equipos. Algunas personas están en más de un equipo. Si abrimos el archivo “/etc/group” en less y nos desplazamos hasta el final del archivo, veremos los nuevos grupos y miembros del grupo. Al menos, tantos miembros como conozca el archivo “/etc/group”.

La parte inferior del archivo /etc/group en el visor de archivos menos

Si queremos extraer un solo grupo, podemos buscar usando grep . El signo de intercalación “ ^ ” representa el comienzo de una línea.

 grep "^equipo de desarrollo" /etc/grupo 

Usando grep para extraer los miembros de un solo grupo

Esto extrae la entrada "devteam" del archivo y enumera todos los miembros del grupo. ¿O sí?

El Comando getente

El comando getent comprueba varias bases de datos en busca de información de grupos de usuarios, no solo "/etc/group". Usaremos getent para mostrarnos los grupos de usuarios.

 grupo de captadores 

Usando getent para listar todos los grupos definidos

Usar getent con la opción de group produce, en esta máquina de prueba, los mismos resultados que usar el archivo “/etc/group”. Eso es porque no usamos LDAP ni ningún otro servicio de nombres centralizado. Por lo tanto, no hay otras fuentes a las que pueda referirse getent .

La salida del grupo getent que muestra los grupos y miembros

Entonces, no sorprende que los resultados coincidan con los del archivo “/etc/group”. Quizás lo que estamos viendo realmente es la realidad de la situación. Tal vez todo es sencillo y, en esta computadora, ¿lo que ves es lo que obtienes? Reservémonos el juicio sobre eso.

El comando getent puede mirar un solo grupo por nosotros. Veremos el grupo "devteam".

 equipo de desarrollo del grupo getent 

Usando getent group para extraer los detalles de un solo grupo

Obtenemos exactamente los mismos resultados que antes. Sin embargo, hay una manera de profundizar más.

RELACIONADO: Cómo enumerar usuarios en Linux

El comando de la tapa

El comando lid es parte de la colección de herramientas libuser . Ya estaba instalado en nuestra computadora de prueba Fedora 36, ​​pero tenía que instalarse en Ubuntu 22.04 y Manjaro 21.

Además, el comando se llama lid en Fedora y Manjaro, pero en Ubuntu, debe usar libuser-lid .

Para instalar el comando en Ubuntu, escriba:

 sudo apt install libuser 

Instalación de libuser en Ubuntu

En Manjaro, libuser se instala desde AUR, por lo que deberá usar su asistente AUR favorito. Usamos yay .

 yay libertario 

Instalación de libuser en Manjaro

Puede usar libuser-lid para mostrar información de grupo sobre grupos o usuarios. Para mostrar los grupos en los que se encuentra una persona, pase su nombre de cuenta de usuario en la línea de comando. En Fedora y Manjaro recuerda usar lid en lugar de libuser-lid .

 sudo libuser-lib dave 

Usar libuser-lid para mostrar los grupos de los que el usuario dave es miembro

Para ver los miembros de un grupo, use la opción -g (grupo) junto con el nombre del grupo.

 sudo libuser-lid -g equipo de desarrollo 

usando libuser-lid para enumerar los miembros del grupo devteam

He aquí que un usuario llamado “francis” ha aparecido como miembro de la lista. Esta es la primera vez que lo hemos visto. No aparece en “/etc/group” y getent tampoco lo descubrió.

Veamos algunos usuarios con el comando de groups .

 grupos abigail
 grupos hayden
 grupos francisco 

Usando el comando de grupos en una selección de usuarios

  • El usuario "abigail" está en un grupo llamado "abigail" y otros dos grupos, "resteam" y "devteam".
  • El usuario "hayden" está en un grupo llamado "hayden" y otros dos grupos, "pvqteam" y "docteam".
  • El usuario "francis" está en un solo grupo, el grupo "devteam". Es notable que no estén en un grupo llamado "francis".
Agregar un usuario a un grupo (o segundo grupo) en Linux
RELACIONADO Agregar un usuario a un grupo (o segundo grupo) en Linux

Sabemos que cada usuario debe ser miembro de un grupo principal y que, de forma predeterminada, el grupo principal tiene un GID y un nombre que coinciden con el UID y el nombre de la cuenta del usuario. Parecería que hay algo diferente en el usuario "francis".

Usemos el comando id y veamos qué nos dicen los UID y GID.

 identificación abigail
 identificación de francisco 

Usando el comando id en los usuarios abigail y francis

El usuario "abigail" tiene un UID de 1002 y un GID de 1002. Están en tres grupos, uno de los cuales se llama "abigail". Tiene un GID de 1002. Este es su grupo principal predeterminado .

El usuario "francis" tiene un GID de 1019, que coincide con el GID del grupo "devteam". A este usuario se le ha asignado un nuevo grupo principal o el grupo "devteam" se estableció como su grupo principal cuando se agregó este usuario al sistema.

Cualquiera que fuera, solo libuser-lid los detectó e informó su presencia en el grupo "devteam".

El diablo está en los detalles

Así que es importante ver los detalles genuinos.

Los grupos son una excelente manera de establecer una colaboración, siempre y cuando sepa con quién la está abriendo.

RELACIONADO: Cómo cambiar los datos de usuario con chfn y usermod en Linux