Em /proc/pid/status podemos ver todos os grupos suplementares para o pid (Meu entendimento é que isso supõe que foi bifurcado de um shell interativo ou o processo fez getgroups(2))
Quero saber como esses grupos estão sendo fornecidos aos processos. Eles são geralmente todos herdados do shell pai, e devemos apenas assumir que o shell pai fez getgroups em algum momento (ou herdou o valor de um shell de login que fez getgroups)?
Seu entendimento está correto. Os grupos são sempre herdados do processo pai (o init começa sem grupos suplementares). A única maneira de isso ser alterado é por setgroups. Isso é feito por su, sshd ou qualquer processo privilegiado que executou o login para o usuário. Quando o shell do usuário é executado, os grupos já estão definidos.