Qu'est-ce qui fait que l'adhésion à un nouveau groupe nécessite une nouvelle connexion (ou un nouveau shell de connexion comme démarré par su
ou newgrp
) pour être visible ?
Exécutez simplement une autre instance bash (ou tout autre shell) avec --login
ne fonctionne pas, mais quelque chose qui est suid root comme su ou newgrp fonctionne.
Est-ce que quelque chose est hérité du shell parent ou mis en cache, ce qui masque les nouvelles appartenances au groupe ?
Réponse acceptée :
Lorsqu'un processus enfant est créé, l'ID utilisateur et les ID de groupe du processus sont hérités de son processus parent.
Ainsi, lorsque vous modifiez les groupes de vos utilisateurs (en fait, modifiez les fichiers de configuration quelque part sur le disque), les processus ne le remarqueront pas automatiquement et ne modifieront pas leurs identifiants de groupe (les processus non root n'ont de toute façon pas les droits pour cela).
Et quand vous démarrez bash… eh bien, vous venez de démarrer bash, rien de spécial ne se passe. Il hérite simplement des identifiants de groupe du parent (shell graphique ou autre bash peut-être).
Mais lorsque vous exécutez su ou que vous vous connectez, toute la magie opère. Ils vérifient si vous êtes autorisé à vous connecter et à modifier leur identifiant d'utilisateur et leurs identifiants de groupe (à l'aide d'appels système qui nécessitent d'ailleurs un identifiant racine effectif - c'est pourquoi ils ont activé le bit suid) afin que tous leurs processus enfants héritent de ces identifiants.