Comment fonctionnent les ID utilisateur réels et efficaces?

13

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?

starcorn
la source

Réponses:

13

Vous ne pouvez pas changer d'autres mots de passe car le programme ne vous le permet pas. Le programme dispose d'autorisations système pour modifier le mot de passe qu'il souhaite, car il s'exécute en tant que root, mais le programme a été spécialement conçu pour ne donner à l'utilisateur aucun moyen de lui faire utiliser ces autorisations.

Ce n'est pas tout à fait que l'utilisateur devient root temporairement, c'est que le programme de confiance s'exécute avec les autorisations root. De toute évidence, seuls les programmes spécifiquement conçus pour limiter les utilisateurs à faire uniquement ce qu'ils devraient être autorisés à faire peuvent être définis en toute sécurité.

David Schwartz
la source
Donc, dans le cas où j'ouvre un shell définissant l'uid à 0 (en utilisant setreuid), de sorte que l'uid efficace soit root mais le vrai uid est toujours moi. Comme je ne pense pas que le shell ait spécifiquement quelque chose qui m'empêche, cela signifie-t-il que j'aurai alors accès à l'ensemble du système?
Starcorn du
Je me demande dans le contexte de la technique d'attaque par cassage de pile. Où un pirate malveillant ouvre un shell avec un niveau superutilisateur.
Starcorn
@starcron: Oui. En fait, de nombreuses attaques peuvent être démontrées en montrant comment utiliser cette attaque pour créer un shell racine setuid.
David Schwartz
2

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).

Mayank
la source
0

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é comme sh -iqui au lieu d'exécuter le script appelé -icomme prévu lance un shell interactif, qui donne alors tous les pouvoirs. Un ID utilisateur efficace peut être utilisé pour modifier le passwdfichier 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.

jrrk
la source
0

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 )

ctrl-alt-delor
la source