J'essaie de comprendre comment les autorisations utilisateur fonctionnent sous Linux. Le noyau démarre et démarre en init
tant que root, non? Init exécute ensuite les scripts de démarrage et s'exécute getty
( agetty
), à nouveau en tant que root. Agetty lit simplement le nom d'utilisateur et s'exécute login
, toujours en tant que root, je pense. Rien d'intéressant pour le moment. Mais que fait la connexion ? Je n'ai pas pu trouver mieux que "il essaie de se connecter". Supposons que la connexion trouve que le mot de passe correspond (et que nous essayons de nous connecter en tant qu'utilisateur habituel), comment change-t-il l'ID utilisateur? Je pensais qu'il devrait y avoir un appel système pour cela, mais je n'ai pas pu le trouver (peut-être que je suis simplement aveugle?)
Aussi, environ su
. su
a le bit 'setuid' positionné donc quand on l'exécute, il s'exécute toujours en tant que root. Mais lorsque nous lui demandons de se connecter en tant qu'utilisateur habituel, il doit à nouveau changer l'ID utilisateur. Dois-je bien comprendre que la même "magie" se produit dans su
et login
quand ils doivent changer d'utilisateur? Si oui, pourquoi avoir deux programmes différents? Existe-t-il d'autres types de problèmes sérieux lors de l'exécution de la connexion?
la source