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

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.

Índice de contenidos
  1. Permisos de archivos y directorios
  2. El archivo /etc/groups
  3. El Comando getente
  4. El comando de la tapa
  5. El diablo está en los detalles

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 cd en el directorio.

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 dos puntos ":"Lista delimitada de grupos y miembros del grupo. Cada línea tiene cuatro campos.

  • Nombre: El nombre único del grupo.
  • Clave: No utilizado. Esto siempre contendrá "x".
  • Identificación del grupo: El identificador de grupo único.
  • 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 a la ventana del terminal, puede usar catpero es más conveniente poder desplazarse por el contenido del archivo con less.

less /etc/group

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 concreto, podemos utilizar 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/group

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 primario grupo. Cualquier otro grupo al que se agreguen se conoce como secundario grupos

El problema es que los usuarios no aparecen como miembros de sus grupos primarios. 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:

  • volver a vapor: El equipo de investigación.
  • equipo de desarrollo: El equipo de desarrollo.
  • equipo pvq: El equipo de verificación y calidad del producto.
  • equipo de doctor: 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 desplácese hasta la parte inferior 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 intercalado"^”Representa el comienzo de una línea.

grep "^devteam" /etc/group

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

los getent El comando 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.

getent group

Usando getent para listar todos los grupos definidos

Usando getent con el group La opción 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. Así que no hay otras fuentes para getent hacer referencia a.

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 sea sencillo y, en esta computadora, ¿lo que ves es lo que obtienes? Reservémonos el juicio sobre eso.

los getent comando puede mirar un solo grupo para nosotros. Veremos el grupo "devteam".

getent group devteam

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 listar usuarios en Linux

El comando de la tapa

los lid El comando es parte del libuser colección de herramientas. 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, necesitas 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 ayudante AUR favorito. Nosotros usamos yay.

yay libuser

Instalación de libuser en Manjaro

Puedes 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 vez 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, utilice el -g (grupo) junto con el nombre del grupo.

sudo libuser-lid -g devteam

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 groups dominio.

groups abigail
groups hayden
groups francis

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

  • El usuario "abigail" está en un grupo llamado "abigail" y en otros dos grupos, "resteam" y "devteam".
  • El usuario "hayden" está en un grupo llamado "hayden" y en otros dos grupos, "pvqteam" y "docteam".
  • El usuario "francis" está en un solo grupo, el grupo "devteam". Es notable que sean no en un grupo llamado "francis".

Sabemos que cada usuario debe ser miembro de un grupo principal y que, de manera 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 id comando y ver lo que nos dicen los UID y GID.

id abigail
id francis

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 defecto grupo primario.

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, sólo libuser-lid los detectó e informó de 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

Descubre más contenido

Subir Change privacy settings