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.
Respostas:
Pode ser um dos seguintes:
Os grupos são definidos no
/etc/group
.fonte
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
groups
sem 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.
fonte
(Observação: o
groups
comando, embora ainda seja útil, é substituído principalmente pelo comando id .)Um usuário tem um grupo principal que é tradicionalmente definido no
/etc/passwd
arquivo 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
newgrp
comandoO 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
initgroups
são:O
groups
comando 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 username
comando está pedindo Linux para calcular os grupos para o usuário, o que ele vai fazer usando principalmente os arquivos/etc/password
e/etc/groups
e, 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 username
comando 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 username
comando pode fornecer melhores resultados, embora também não seja garantido que seja tão completo quanto o do processo de login. Oid
comando é mais recente que, e pretendia ser mais preciso que, ogroups
comando antigo .Enquanto o
groups
comando fornece um resultado preciso e correto, você demonstrou bem quegroups username
não se pode confiar nele para fazer o mesmo.Sem examinar o código-fonte do
groups
comando, acho que a implementação dogroups username
comando 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 principaljacob
.Para mais informações, veja:
fonte