Cos'è che fa sì che la nuova appartenenza al gruppo richieda un nuovo accesso (o una nuova shell di accesso avviata da su
o newgrp
) per essere visibile?
Basta eseguire un'altra istanza bash (o qualsiasi altra shell) con --login
non funziona, ma qualcosa che è suid root come su o newgrp funziona.
Qualcosa è ereditato dalla shell madre o è memorizzato nella cache che nasconde le nuove appartenenze ai gruppi?
Risposta accettata:
Quando viene creato un processo figlio, l'ID utente del processo e gli ID gruppo vengono ereditati dal processo padre.
Quindi, quando modifichi i gruppi del tuo utente (in realtà modifichi i file di configurazione da qualche parte sul disco), i processi non lo noteranno automaticamente e non modificheranno i loro ID di gruppo (i processi non root non hanno comunque i diritti per questo).
E quando inizi bash... beh, inizi semplicemente bash, non succede niente di speciale. Eredita semplicemente gli ID di gruppo dei genitori (shell grafica o un'altra bash forse).
Ma quando esegui su o accedi, accade tutta la magia. Controllano se ti è consentito accedere e modificare il loro ID utente e ID di gruppo (usando chiamate di sistema che richiedono un ID root efficace tra l'altro - ecco perché hanno impostato il bit suid) in modo che tutti i loro processi figlio ereditino questi ID.