Existe um egid
. Contudo! Pelo menos no BSDlandia (e copiado pelo Linux; não tenho certeza do que o SysV faz aqui) existe a chamada setgroups(2)
DESCRIPTION
setgroups() sets the group access list of the current user process
according to the array gidset. The parameter ngroups indicates the
number of entries in the array and must be no more than {NGROUPS_MAX}.
Only the superuser may set new groups.
e getgroups(2)
para recuperar essa lista.
Alguns programas notavelmente descartam a lista suplementar de grupos, por exemplo httpd
no OpenBSD em src/usr.sbin/httpd/proc.c
if (setgroups(1, &pw->pw_gid) ||
setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) ||
setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid))
fatal("%s: cannot drop privileges", __func__);
que pode ser surpreendente se você estivesse esperando que esses grupos suplementares estivessem por perto.
NGROUPS_MAX
é outro limite divertido, especialmente envolvendo NFS e pessoas em muitos grupos, embora agora existam maneiras de contornar isso (além da maneira antiga de não adicionar um usuário a mais do que os típicos 16 grupos).