Por que a saída de `groups` é diferente de` groups user` se atualmente estou logado como usuário?

21

Não sei por que o seguinte tem uma saída diferente. Meu entendimento é que os grupos sem especificar um usuário fornecem a todos os grupos dos quais o usuário conectado no momento é membro.

jacob@box:~$ groups
jacob adm lp dialout cdrom plugdev lpadmin sambashare

jacob@box:~$ groups jacob
jacob : jacob

Além disso, o que significa "grupos do processo atual" (na página de manual de grupos)? Onde eles estão montados?

NOTA: Minha distribuição é o Ubuntu.

Jake
fonte
@Jake tente sair e, em seguida, de volta.
1
Estou tendo esse problema ao contrário. 'groups myname' me fornece todos os grupos que tenho no arquivo / etc / groups, mas fazer apenas 'groups' mostra apenas meu grupo principal. E, de fato, os comandos que exigem que eu esteja em um determinado grupo suplementar falham devido à falta de permissões. Com certeza gostaria de saber o que estava causando isso.
Todd Walton

Respostas:

11

Pode ser um dos seguintes:

  • Pode ser um bug (embora eu duvide)
  • Pode ser necessário sair e fazer login novamente

Os grupos são definidos no /etc/group.


fonte
8

Assim como todo processo tem um ID de usuário real e eficaz atual e um ID de grupo real e eficaz, ele também possui uma lista de grupos suplementares . Estes são números (não nomes), todos mantidos pelo kernel. Eles são definidos pelo processo de login (ou gerenciador de exibição) quando você o registra, assim como seu ID de usuário. Eles são herdados por subprocessos, assim como seu ID de usuário.

Quando você executa groupssem argumentos, ele finalmente chama getgroups () para obter a lista de grupos suplementares do kernel. (No meu sistema Linux, / usr / bin / groups é um script shell que executa "id -Gn", que por sua vez chama getgroups ().)

Quando você executa groups username, o comando precisa "adivinhar" quais serão os grupos suplementares quando o usuário efetuar login. Geralmente, faz isso lendo / etc / group ou conversando com o NIS ou conversando com o nscd ou ... Bem, há um de várias maneiras que podem funcionar.

O que você está observando é semelhante à descoberta de que seu ID de usuário real atual e sua entrada em / etc / passwd são inconsistentes. Isso significa que há algo um pouco estranho na configuração do seu sistema, mas é difícil dizer o que sem mais investigação.

Nemo
fonte
3

(Observação: o groupscomando, embora ainda seja útil, é substituído principalmente pelo comando id .)

Um usuário tem um grupo principal que é tradicionalmente definido no /etc/passwdarquivo com o qual ele efetua login, mas que hoje pode ter outras fontes. Ele também pode ser membro de grupos adicionais, conhecidos como grupos secundários ou suplementares, tradicionalmente especificados no arquivo /etc/groups, mas que hoje também podem vir ou ser implícitos por fontes adicionais (como NIS, LDAP, SAMBA etc.).

Grupos primários e suplementares são definidos no momento do login e permanecem atualizados . No entanto, o usuário pode a qualquer momento alterar seu grupo principal ativo atual usando o newgrpcomando

O processo de login define os grupos primário e suplementar. Para o posterior, normalmente chama a função libc initgroups , que compila a lista de dados suplementares do grupo e os passa para a função setgroups , que o estabelece no contexto do processo.

As fontes de informação para initgroupssão:

usado pela GNU C Library e outros aplicativos para determinar as fontes das quais obter informações sobre o serviço de nomes em várias categorias e em que ordem. Cada categoria de informação é identificada por um nome de banco de dados.

O groupscomando mostra os grupos atualmente aplicados ao seu usuário e a lista começará com o grupo principal atual seguido pelos grupos suplementares a partir do momento do login. Quaisquer alterações nas fontes de dados após o horário do login não são refletidas na lista exibida.

O groups usernamecomando está pedindo Linux para calcular os grupos para o usuário, o que ele vai fazer usando principalmente os arquivos /etc/password e /etc/groupse, em seguida, as fontes adicionais. Isso refletirá a situação atual dos arquivos do sistema e pode não ser igual aos grupos atuais que ainda estão em vigor desde o momento do login.

O groups usernamecomando pode dar um resultado diferente quando não usa todas as fontes que o processo de login usou para calcular seus grupos suplementares, o que aparentemente aconteceu no seu caso. Essas fontes podem não estar acessíveis no seu login ou simplesmente não podem ser consultadas pelo comando.

O uso do id usernamecomando pode fornecer melhores resultados, embora também não seja garantido que seja tão completo quanto o do processo de login. O idcomando é mais recente que, e pretendia ser mais preciso que, o groupscomando antigo .

Enquanto o groupscomando fornece um resultado preciso e correto, você demonstrou bem que groups usernamenão se pode confiar nele para fazer o mesmo.

Sem examinar o código-fonte do groupscomando, acho que a implementação do groups usernamecomando em suas análises de distribuição do Linux /etc/groups, que no seu caso não continha nada, mas não o utiliza /etc/nsswitch.conf, de onde vieram todos os seus grupos suplementares. Portanto, está listado apenas o nome do grupo principal jacob.

Para mais informações, veja:

harrymc
fonte