Quero me adicionar ao grupo "docker". Estes são os comandos que executei e sua saída:
user1@laptop-p3510:~$ sudo usermod -a -G docker user1
user1@laptop-p3510:~$ groups
user1 adm cdrom sudo dip plugdev lpadmin lxd sambashare
user1@laptop-p3510:~$ whoami
user1
user1@laptop-p3510:~$ groups user1
user1 : user1 adm cdrom sudo dip plugdev lpadmin lxd sambashare docker
Estou no grupo "docker" ou não? Por que groups $USER
dá resultados diferentes de groups
?
Porque você precisa sair e entrar novamente para que os grupos adicionados fiquem ativos.
groups
retorna os grupos dos quais você é membro na sessão atualgroups user1
verifica o que a configuração diz que o usuário é um membro.Como você adicionou
user1
a um grupo e ainda não fez logoff e logon novamente, os gruposuser1
dos quais era membro quando você fez login são os que a sessão atual usará.espero que ajude
Assim como o UID e o GID, os grupos são uma credencial por processo . Cada processo tem sua própria lista de grupos aos quais pertence, que é inicializada em /etc/group no momento do login (pelo processo inicial que manipula seu login), mas herdada do processo pai caso contrário.
Portanto, quando você executa
groups
a partir de um shell, ele herda a lista de grupos do shell (que os herdou do aplicativo de terminal, etc.) e essa é a lista que mostra. O mesmo se aplica ao UID e ao GID mostrados porid
(e também às variáveis de ambiente mostradas porenv
). Esta lista não muda automaticamente quando /etc/group é atualizado – até a próxima vez que você fizer login.A execução de
groups SomeUser
orid SomeUser
, por outro lado, solicita ao programa que leia as informações do grupo diretamente de /etc/group (da mesma forma que um processo de login faria), portanto, naturalmente, ele fornecerá a lista atualizada.(Ferramentas de troca de usuário gostam
su
esudo
também fazem o mesmo, então se você precisar fazer algo com urgência com um grupo específico, você pode "su" para root e depois "su" de volta para você - su irá reinicializar a lista de grupos como parte de seu job. Você também notará que apenas o shell executado por "su" tem os novos grupos, enquanto todos os outros shells ainda mostram os antigos.)Para responder à pergunta, sim, sua conta está no grupo "docker", mas o shell específico do qual você está executando 'grupos' não está. A maioria das coisas não se preocupa com a conta, mas apenas com o processo específico que está executando a ação (com algumas exceções).