Lorsqu'un utilisateur normal souhaite apporter des modifications au fichier passwd, l'utilisateur recevra par setuid l'accès utilisateur effectif. L'utilisateur devient root temporairement et peut modifier le mot de passe.
Cependant, vous ne pouvez modifier que votre mot de passe, et pas tout le monde? Cependant, votre accès utilisateur effectif est root. Alors, comment se fait-il que vous ne soyez pas autorisé à modifier d'autres mots de passe à côté du vôtre?
Lorsque vous exécutez un programme avec setuid, qu'est-ce que cela signifie réellement lorsque l'utilisateur effectif est root, mais que le véritable identifiant utilisateur est toujours votre nom?
Vous n'êtes autorisé à modifier que votre mot de passe malgré l'ID utilisateur effectif de root, car au moment du changement de mot de passe, l'ID utilisateur réel est vérifié et non l'ID utilisateur effectif. Vous ne pouvez modifier que l'ID utilisateur effectif et non l'ID utilisateur réel.
Seul l'utilisateur root peut modifier l'ID utilisateur réel pour exécuter le programme en tant qu'utilisateur non privilégié. L'ID utilisateur réel ne peut pas être modifié car il est défini au moment du démarrage de la session.
C'est pourquoi seul votre mot de passe peut être modifié car l'ID utilisateur réel n'est pas modifié (car il ne vous appartient pas à root).
la source
Un premier hack dans Unix était de faire un lien symbolique vers un script shell setuid et d'appeler le lien
-i
. Cela se traduit par le script appelé commesh -i
qui au lieu d'exécuter le script appelé-i
comme prévu lance un shell interactif, qui donne alors tous les pouvoirs. Un ID utilisateur efficace peut être utilisé pour modifier lepasswd
fichier pour n'importe quel utilisateur ou racine lui-même. La meilleure façon de se prémunir contre cela est d'utiliser SELinux pour empêcher les scripts ou programmes de confiance de se modifier en dehors de la zone que SELinux leur permet de s'exécuter.Une autre technique consiste à avoir un bit immuable sur les fichiers importants dont un ensemble ne peut pas être modifié même par l'utilisateur root (sauf en mode mono-utilisateur)
En tant que root, vous pouvez inviter des utilisateurs à se connecter à votre système sans mot de passe et apparaître comme n'importe quel utilisateur, mais les processus privilégiés normaux s'efforcent très fort d'empêcher que cela ne se produise.
Si vous utilisez des systèmes de classement en réseau, l'utilisateur root sera traité comme personne dans cet espace de fichiers au lieu de root, ce qui permet aux ordinateurs non approuvés de rejoindre un réseau approuvé tel qu'un campus universitaire.
la source
Vous êtes uniquement autorisé à modifier votre mot de passe, car le programme set-password, bien qu'il ait le pouvoir de faire quoi que ce soit, est programmé pour ne changer que les mots de passe. Il vérifiera l'ID utilisateur réel, pour décider quel mot de passe changer.
Parce que vous ne pouvez pas changer votre véritable identifiant utilisateur, même en appelant un programme set-uid, le programme peut l'utiliser pour implémenter la sécurité. Le système d'exploitation abandonne la sécurité au programme racine uid défini.
Remarque: le programme racine set uid peut également modifier l'ID utilisateur réel (mais cela n'est pas utile dans ce cas d'utilisation).
Attention: définir la racine uid est considéré comme nuisible (bien moins que l'idéal). Nous devrions utiliser des capacités ces jours-ci (voir Quelles sont les différentes façons de définir les autorisations de fichiers, etc. sur gnu / linux et http://man7.org/linux/man-pages/man7/capabilities.7.html )
la source