Seu entendimento está correto. Os grupos são sempre herdados do processo pai (o init é iniciado sem grupos suplementares). A única maneira de mudar isso é por setgroups. Isso é feito por su, sshd ou qualquer outro processo privilegiado que tenha realizado o login do usuário. No momento em que o shell do usuário é executado, os grupos já estão definidos.