Pourquoi ai-je besoin d'utiliser newgrp ou su (ou de vous déconnecter et de vous reconnecter) pour que de nouvelles appartenances à un groupe soient appliquées?

Qu'est-ce qui fait que l'appartenance à un nouveau groupe nécessite un nouveau login (ou un nouveau shell de connection tel que démarré par su ou newgrp ) pour être visible?

Il suffit de --login une autre instance bash (ou n'importe quel autre shell) avec --login ne fonctionne pas, mais quelque chose qui est suid root comme su ou newgrp fonctionne.

Est-ce que quelque chose hérité du shell parent ou mis en cache qui cache les nouvelles appartenances à un groupe?

    Lorsqu'un process enfant est créé, l'ID user et les identifiants de groupe sont hérités de son process parent.

    Ainsi, lorsque vous modifiez les groupes de votre user (en fait, les files de configuration sont modifiés quelque part sur le disque), les process ne le remarquent pas automatiquement et changent leurs identifiants de groupe (les process non root n'ont pas de droits pour cela).

    Et quand vous commencez bash … eh bien, vous venez de commencer bash, rien de spécial ne se passe. Il hérite simplement des identifiants de groupe de parent (shell graphique ou autre bash peut-être).

    Mais quand vous exécutez su ou connectez-vous alors toute la magie se produit. Ils vérifient si vous êtes autorisé à vous connecter et à modifier leur ID user et leurs identifiants de groupe (à l'aide d'appels système qui nécessitent un ID racine effectif, c'est pourquoi ils ont hérité de ces identifiants).