Como listar todos os usuários em um grupo no Linux

Publicados: 2022-08-29
Laptop Linux mostrando um prompt bash
fatmawati achmad zaenuri/Shutterstock.com

No Linux, os arquivos têm três conjuntos de permissões. Um conjunto é para o grupo do arquivo. Antes de alocar um arquivo para um grupo, você pode querer verificar quem são os membros do grupo.

Permissões de arquivo e diretório

Arquivos e diretórios no Linux têm um conjunto de permissões para o proprietário, outro conjunto para o grupo ao qual o arquivo está alocado e permissões para todos que não estão em uma das duas categorias anteriores.

Cada conjunto de permissões define se os membros dessa categoria podem ler, gravar ou executar o arquivo. No caso de um diretório, a ação de execução equivale a poder fazer cd no diretório.

O grupo padrão para um arquivo ou diretório é o grupo padrão do proprietário. Geralmente é a pessoa que o criou. As permissões de grupo são usadas para permitir que uma coleção de usuários tenha acesso controlado aos arquivos e diretórios dos outros membros desse grupo.

Por exemplo, você pode ter uma equipe de desenvolvedores, uma equipe de documentação, uma equipe de pesquisa e assim por diante. Os membros de cada equipe podem ser adicionados a um grupo nomeado adequadamente, para ajudar na colaboração. Os usuários podem estar em vários grupos ao mesmo tempo.

É um esquema simples, mas robusto. Mas se seus arquivos são confidenciais, você pode se sentir mais feliz verificando quem são os membros do grupo, antes de compartilhar seu trabalho com eles. Existem diferentes maneiras de fazer isso. Mas tome nota. Os dois métodos mais frequentemente recomendados são problemáticos.

RELACIONADO: Como usar o comando chgrp no Linux

O arquivo /etc/groups

O arquivo “/etc/group” contém dois pontos “ : ” lista delimitada de grupos e membros do grupo. Cada linha tem quatro campos.

  • Nome : o nome exclusivo do grupo.
  • Senha : Não usada. Isso sempre conterá "x".
  • ID do grupo : o identificador exclusivo do grupo.
  • Usuários : uma lista delimitada por vírgulas dos membros do grupo. A lista geralmente está vazia para contas do sistema e daemon.

Para despejar o conteúdo do arquivo na janela do terminal, você pode usar cat , mas é mais conveniente poder rolar pelo conteúdo do arquivo com less .

 menos /etc/grupo 

Usando cat para ver o conteúdo do arquivo /etc/group

A maioria das entradas no topo da lista não tem membros, embora o grupo “adm” tenha dois e o grupo “cdrom” tenha um.

A primeira parte do arquivo /etc/groups no visualizador de arquivos less

Se quisermos descobrir os grupos em que um usuário específico está, podemos usar grep para procurar entradas com o nome da conta de usuário. Esta não é a nossa tarefa em mãos. Queremos ver todos que são membros de um grupo, não os grupos aos quais uma pessoa pertence. Mas é instrutivo para nós dar uma olhada.

 grep "dave" /etc/group 

A lista de grupos dos quais o usuário dave é membro

As entradas que contêm a string “dave” são listadas para nós. E escondido entre eles está um sinal de que as coisas podem não ser tão simples quanto pensávamos.

Quando um usuário é adicionado ao Linux, a ação padrão é colocá-lo em um grupo com o mesmo nome de sua conta de usuário. Este é o seu grupo principal . Quaisquer outros grupos aos quais eles são adicionados são conhecidos como grupos secundários .

O problema é que os usuários não são listados como membros de seus grupos primários . É por isso que o grupo “dave” não está mostrando nenhum membro, embora o usuário “dave” seja um membro desse grupo.

Obviamente, os administradores do sistema podem alterar o grupo principal de qualquer usuário para o de qualquer outro grupo. Isso significa que um usuário pode ser membro de qualquer grupo, mas não será listado como tal no arquivo “/etc/group”. Essa é uma questão.

A segunda questão é que o arquivo “/etc/group” não é uma única fonte de verdade. Instalações modernas do Linux podem armazenar informações de usuários e grupos em mais lugares do que “/etc/passwd” e “/etc/group”, especialmente em situações corporativas onde serviços como Lightweight Directory Access Protocol são implantados. Ao olhar apenas para um lugar, você pode não estar vendo o quadro geral.

Em nosso cenário de teste, criamos quatro grupos para um departamento de desenvolvimento. Eles são:

  • resteam : A equipe de pesquisa.
  • devteam : A equipe de desenvolvimento.
  • pvqteam : A equipe de verificação e qualidade do produto.
  • docteam : A equipe de documentação.

Adicionamos pessoas a essas equipes. Algumas pessoas estão em mais de uma equipe. Se abrirmos o arquivo “/etc/group” em less e rolarmos até o final do arquivo, veremos os novos grupos e membros do grupo. Pelo menos, tantos membros quanto o arquivo “/etc/group” conhece.

A parte inferior do arquivo /etc/group no visualizador de arquivos less

Se quisermos extrair um único grupo, podemos pesquisar usando grep . O acento circunflexo “ ^ ” representa o início de uma linha.

 grep "^devteam" /etc/group 

Usando grep para extrair os membros de um único grupo

Isso extrai a entrada “devteam” do arquivo e lista todos os membros do grupo. Ou não?

O comando getent

O comando getent verifica vários bancos de dados para informações de grupos de usuários, não apenas “/etc/group”. Usaremos getent para nos mostrar os grupos de usuários.

 grupo getent 

Usando getent para listar todos os grupos definidos

Usar getent com a opção group produz—nesta máquina de teste—os mesmos resultados que usar o arquivo “/etc/group”. Isso porque não estamos usando LDAP ou qualquer outro serviço de nomenclatura centralizado. Portanto, não há outras fontes para getent se referir.

A saída do grupo getent mostrando os grupos e membros

Não é nenhuma surpresa, então, que os resultados coincidam com os do arquivo “/etc/group”. Talvez o que estamos vendo realmente seja a realidade da situação. Talvez tudo seja direto e – neste computador – o que você vê é o que você obtém? Vamos reservar julgamento sobre isso.

O comando getent pode olhar para um único grupo para nós. Veremos o grupo “devteam”.

 grupo devteam getent 

Usando o grupo getent para extrair os detalhes de um único grupo

Obtemos exatamente os mesmos resultados de antes. Há uma maneira de cavar mais fundo.

RELACIONADO: Como listar usuários no Linux

O comando da tampa

O comando lid faz parte da coleção de ferramentas libuser . Ele já estava instalado em nosso computador de teste Fedora 36, ​​mas teve que ser instalado no Ubuntu 22.04 e no Manjaro 21.

Além disso, o comando é chamado lid no Fedora e no Manjaro, mas no Ubuntu, você precisa usar libuser-lid .

Para instalar o comando no Ubuntu, digite:

 sudo apt instalar libuser 

Instalando o libuser no Ubuntu

No Manjaro, libuser é instalado a partir do AUR, então você precisará usar seu ajudante AUR favorito. Usamos yay .

 sim, libuser 

Instalando o libuser no Manjaro

Você pode usar libuser-lid para exibir informações de grupo sobre grupos ou usuários. Para mostrar os grupos em que um indivíduo está, passe o nome da conta de usuário na linha de comando. No Fedora e no Manjaro lembre-se de usar lid em vez de libuser-lid .

 sudo libuser-lib dave 

Usando libuser-lid para mostrar os grupos dos quais o usuário dave é membro

Para ver os membros de um grupo, use a opção -g (grupo) junto com o nome do grupo.

 sudo libuser-lid -g devteam 

usando libuser-lid para listar os membros do grupo devteam

E eis que um usuário chamado “francis” apareceu como membro da lista. Esta é a primeira vez que o vemos. Ele não está listado em “/etc/group” e getent também não o descobriu.

Vejamos alguns usuários com o comando groups .

 grupos Abigail
 grupos hayden
 grupos francisco 

Usando o comando groups em uma seleção de usuários

  • O usuário “abigail” está em um grupo chamado “abigail” e dois outros grupos, “resteam” e “devteam”.
  • O usuário “hayden” está em um grupo chamado “hayden” e dois outros grupos, “pvqteam” e “docteam”.
  • O usuário “francis” está em um único grupo, o grupo “devteam”. É notável que eles não estejam em um grupo chamado “francis”.
Adicionar um usuário a um grupo (ou segundo grupo) no Linux
RELACIONADO Adicionar um usuário a um grupo (ou segundo grupo) no Linux

Sabemos que todo usuário deve ser membro de um grupo primário e que, por padrão, o grupo primário tem um GID e um nome que correspondem ao UID e ao nome da conta do usuário. Parece que há algo diferente no usuário “francis”.

Vamos usar o comando id e ver o que o UID e os GIDs nos dizem.

 ID Abigail
 id francis 

Usando o comando id nos usuários abigail e francis

O usuário “abigail” tem um UID de 1002 e um GID de 1002. Eles estão em três grupos, um dos quais é chamado de “abigail”. Ele tem um GID de 1002. Este é seu grupo primário padrão .

O usuário “francis” tem um GID de 1019, que corresponde ao GID do grupo “devteam”. Este usuário foi atribuído a um novo grupo primário ou o grupo “devteam” foi definido como seu grupo primário quando este usuário foi adicionado ao sistema.

Qualquer que fosse, apenas libuser-lid os detectou e relatou sua presença no grupo “devteam”.

O diabo está nos detalhes

Por isso, é importante ver os detalhes genuínos.

Os grupos são uma ótima maneira de estabelecer a colaboração, contanto que você saiba com quem está abrindo.

RELACIONADO: Como alterar os dados do usuário com chfn e usermod no Linux