Por supuesto, el enigma fundamental aquí es que las verificaciones de permisos del sistema de archivos se basan en la combinación de (el UID efectivo y) el GID efectivo y los GID suplementarios. Entonces, desde el punto de vista de las verificaciones de permisos de archivos, el GID efectivo es equivalente a los GID suplementarios, lo que lleva a la pregunta del OP. (De paso: si estamos hablando de Linux, en realidad es el UID / GID del sistema de archivos que se usa en las verificaciones de permisos del sistema de archivos, en lugar del UID y GID efectivos, pero las ID anteriores casi siempre tienen los mismos valores que las últimas ID. )
Por lo tanto, debe haber algunos casos en los que los GID reales / efectivos / guardados no sean equivalentes a los GID suplementarios. (Agrupo los GID de conjunto real / efectivo / guardado, porque las reglas de permiso set * gid () normales dicen que un proceso no privilegiado puede cambiar cualquiera de esos GID al mismo valor que uno de los otros dos).
Y de hecho, hay algunos de esos casos. access (2) realiza sus comprobaciones en función de la ID de usuario real y la ID de grupo del proceso. Si un usuario no privilegiado pudo cambiar la ID de grupo real para que sea la misma que una de las GID adicionales que no es la GID establecida efectiva o guardada, entonces el comportamiento de acceso (2) podría ser manipulado.
Hay otros casos de este tipo. Consulte la página del comando man mkdir (2) de Linux , por ejemplo. Dependiendo de si el bit de modo set-GID está configurado en el directorio padre, un nuevo archivo creado en el directorio toma la propiedad de su grupo del GID efectivo del proceso de creación. Nuevamente, si un proceso no privilegiado podría cambiar su GID efectivo para que sea el mismo que uno de sus GID suplementarios, podría manipular la propiedad del grupo de nuevos archivos de maneras inesperadas. Se aplican comentarios similares para mknod (2) y las llamadas IPC de System V semget (2), shmget (2) y msgget (2).
También hay algunos casos específicos de Linux donde los GID del conjunto real / efectivo / guardado no son equivalentes a los GID suplementarios. Ver process_vm_readv (2) y prlimit (2), por ejemplo.
/usr/bin/env
con permiso setgid).