Čím to je, že nové členství ve skupině vyžaduje nové přihlášení (nebo nový přihlašovací shell, jak to spustil su
nebo newgrp
), aby byl viditelný?
Stačí spustit další instanci bash (nebo jakýkoli jiný shell) pomocí --login
nefunguje, ale funguje něco, co je suid root jako su nebo newgrp.
Je něco zděděno z nadřazeného prostředí nebo uloženo v mezipaměti, co skrývá nové členství ve skupině?
Přijatá odpověď:
Když je vytvořen podřízený proces, ID uživatele procesu a ID skupiny se zdědí z jeho nadřazeného procesu.
Když tedy změníte skupiny uživatelů (ve skutečnosti změníte konfigurační soubory někde na disku), procesy si toho automaticky nevšimnou a nezmění svá ID skupin (procesy bez oprávnění root na to stejně nemají práva).
A když začnete bash... no, prostě začnete bash, nic zvláštního se nestane. Pouze zdědí ID skupiny rodičů (možná grafického prostředí nebo jiného bash).
Ale když spustíte su nebo se přihlásíte, stane se všechna kouzla. Kontrolují, zda se můžete přihlásit, a měnit jejich uživatelské ID a ID skupin (pomocí systémových volání, která mimochodem vyžadují efektivní root id – proto mají nastavený bit suid), aby všechny jejich podřízené procesy zdědily tato ID.