Das grundlegende Rätsel dabei ist natürlich, dass die Berechtigungsprüfungen des Dateisystems auf der Kombination von (der effektiven UID und) der effektiven GID und den zusätzlichen GIDs basieren. Unter dem Gesichtspunkt der Prüfung von Dateiberechtigungen entspricht die effektive GID den zusätzlichen GIDs, was zur Frage des OP führt. (Nebenbei: Wenn es sich um Linux handelt, wird tatsächlich die UID / GID des Dateisystems für die Berechtigungsprüfungen des Dateisystems verwendet und nicht die effektive UID und GID. Die ersteren IDs haben jedoch fast immer dieselben Werte wie die letzteren IDs. )
Es muss also einige Fälle geben, in denen die tatsächlichen / effektiven / gespeicherten GIDs nicht den zusätzlichen GIDs entsprechen. (Ich gruppiere die realen / effektiven / gespeicherten Set-GIDs, da die normalen Berechtigungsregeln für set * gid () besagen, dass ein nicht privilegierter Prozess eine dieser GIDs auf den gleichen Wert wie eine der beiden anderen ändern kann.)
Und tatsächlich gibt es einige solcher Fälle. access (2) führt seine Überprüfungen basierend auf der tatsächlichen Benutzer-ID und Gruppen-ID des Prozesses durch . Wenn ein nicht privilegierter Benutzer die reale Gruppen-ID so ändern konnte, dass sie mit einer der zusätzlichen GIDs übereinstimmt, bei denen es sich nicht um die effektive oder gespeicherte festgelegte GID handelt, kann das Zugriffsverhalten (2) manipuliert werden.
Es gibt andere solche Fälle. Ein Beispiel finden Sie in der Manpage zu Linux mkdir (2) . Abhängig davon, ob das Set-GID-Modusbit im übergeordneten Verzeichnis gesetzt ist, übernimmt eine neue Datei, die im Verzeichnis erstellt wurde, ihren Gruppenbesitz von der effektiven GID des Erstellungsprozesses. Wenn ein nicht privilegierter Prozess seine effektive GID so ändern könnte, dass sie mit einer seiner zusätzlichen GIDs identisch ist, könnte er den Gruppenbesitz neuer Dateien auf unerwartete Weise manipulieren. Ähnliche Kommentare gelten für mknod (2) und die System V IPC-Aufrufe semget (2), shmget (2) und msgget (2).
Es gibt auch einige Linux-spezifische Fälle, in denen die tatsächlichen / effektiven / gespeicherten Set-GIDs nicht den zusätzlichen GIDs entsprechen. Siehe zum Beispiel process_vm_readv (2) und prlimit (2).
/usr/bin/env
mit setgid-Berechtigung erstellen ).