Por que preciso usar newgrp ou su (ou efetuar logout e login novamente) para ter novas associações de grupo aplicadas?

4

O que faz com que a nova associação ao grupo requeira que um novo login (ou novo shell de login iniciado por su ou newgrp ) esteja visível?

Apenas executar outra instância do bash (ou qualquer outro shell) com --login não funciona, mas algo que é suid root como su ou newgrp funciona.

Algo é herdado do shell pai ou armazenado em cache, o que oculta novas associações de grupo?

    
por David Gardner 23.06.2011 / 15:17

1 resposta

11

Quando um processo filho é criado, o ID do usuário do processo e os IDs do grupo são herdados de seu processo pai.

Assim, quando você altera os grupos de usuários (na verdade, altera os arquivos de configuração em algum lugar no disco), os processos não o notam automaticamente e alteram seus ids de grupo (processos não-raiz não têm direitos para isso).

E quando você começa a bater ... bem, você apenas começa a bater, nada de especial acontece. Apenas herda os ids de grupo dos pais (shell gráfico ou outro bash talvez).

Mas quando você executa su ou login, toda a mágica acontece. Eles verificam se você tem permissão para fazer o login e alterar seu ID de usuário e IDs de grupo (usando chamadas de sistema que exigem uma identificação de raiz efetiva - é por isso que eles configuram bit suid) para que todos os processos filhos herdem esses ids.

    
por 23.06.2011 / 15:57