Was bewirkt, dass eine neue Gruppenmitgliedschaft ein neues Login erfordert (oder eine neue Login-Shell, wie sie von su
gestartet wird oder newgrp
) sichtbar sein?
Führen Sie einfach eine andere Bash-Instanz (oder eine andere Shell-Instanz) mit --login
aus funktioniert nicht, aber etwas, das suid root ist, wie su oder newgrp, funktioniert.
Wird etwas von der übergeordneten Shell geerbt oder zwischengespeichert, was neue Gruppenmitgliedschaften verbirgt?
Akzeptierte Antwort:
Wenn ein untergeordneter Prozess erstellt wird, werden Prozessbenutzer-ID und Gruppen-IDs von seinem übergeordneten Prozess geerbt.
Wenn Sie also die Gruppen Ihrer Benutzer ändern (eigentlich Konfigurationsdateien irgendwo auf der Festplatte ändern), werden Prozesse dies nicht automatisch bemerken und ihre Gruppen-IDs ändern (Nicht-Root-Prozesse haben sowieso keine Rechte dafür).
Und wenn Sie bash starten … nun, Sie starten einfach bash, nichts Besonderes passiert. Es erbt nur die Gruppen-IDs der Eltern (grafische Shell oder vielleicht eine andere Bash).
Aber wenn Sie su ausführen oder sich anmelden, passiert die ganze Magie. Sie prüfen, ob Sie sich anmelden dürfen, und ändern ihre Benutzer-ID und Gruppen-IDs (unter Verwendung von Systemaufrufen, die übrigens eine effektive Root-ID erfordern – deshalb haben sie das Suid-Bit gesetzt), damit alle ihre untergeordneten Prozesse diese IDs erben.