Os grupos são herdados por um processo de seu pai. Bash não tem escolha no assunto. Um processo executado como root pode obter novos grupos suplementares mediante solicitação; um processo que não está em execução como root só pode abandonar grupos suplementares.
O comando groups
sem argumentos retorna sua própria lista de grupos (que é herdada de seus pais): grupo real, grupo efetivo e grupos suplementares. O comando group SOMEUSER
pesquisa os grupos associados a SOMEUSER
nos bancos de dados de usuários e grupos.
Ao efetuar login, os grupos são atribuídos com base nos bancos de dados do usuário e do grupo, como parte do processo de login, antes que o processo de login alterne da raiz para o usuário de destino. Os comandos newgrp
, su
e sg
são capazes de adquirir grupos extras enquanto está em execução porque é setuid raiz; o código deles é escrito de tal forma que eles só concedem grupos que o usuário receberia ao efetuar login (exceto que o root pode obter o grupo que quiser).
No kernel do Linux, os UIDs e GIDs de um processo são registrados em um struct cred
. Os grupos suplementares estão no campo group_info
, que aponta para um struct group_info
que contém uma matriz de IDs de grupo.