Comment chsh empêche-t-il les users de modifier le shell d'un autre user?

Je sais que chsh est utilisé pour changer le shell de connection d'un user en modifiant /etc/passwd . Donc, en principe, n'importe qui peut exécuter cette command et changer le shell par défaut d'un autre user, mais cela n'est pas autorisé.

Comment est-ce arrêté dans chsh ?

chsh est setuid , donc il peut s'exécuter dans un context qui signifie que les users peuvent effectuer des actions avec les privilèges de root. Tout setuid doit être écrit très soigneusement pour ne pas permettre une escalade de privilèges. chsh est écrit en C, et il semble vérifier que la personne qui exécute le programme est la même que l'user que vous requestz de changer .