web-dev-qa-db-fra.com

Différence entre propriétaire / racine et RUID / EUID

Je suis relativement nouveau dans les concepts mentionnés dans la question et les lire à partir de différentes sources ne fait que les rendre plus confus. Voici donc ce que j'ai compris jusqu'à présent:

Quand on nous donne des autorisations pour un fichier, ils ressemblent à ceci:

-rwsr-xr-- 1 user1 users 190 Oct 12 14:23 file.bin

Nous supposons qu'un utilisateur user2 qui fait partie du groupe users essaie d'exécuter file.bin. Si le bit setuid n'était pas défini, cela signifierait que le RUID et l'EUID de file.bin étaient égaux à l'UID de user2. Mais puisque le bit setuid est défini, cela signifie que le RUID est maintenant égal à l'UID de user2, tandis que EUID est l'UID du propriétaire du fichier, user1.

Mes questions sont:

  1. Quelle est la différence entre le propriétaire du fichier et root? root dispose-t-il des mêmes autorisations que le propriétaire? Ou aurions-nous besoin d'une entrée distincte dans la liste des autorisations pour root?
  2. Différence entre RUID et EUID?
    • Si je comprends bien, le RUID et l'EUID ne s'appliquent qu'aux processus. Si tel est le cas, pourquoi ont-ils la valeur des identifiants utilisateur?
    • Si RUID est l'utilisateur qui crée le processus et EUID est l'utilisateur qui exécute actuellement le processus, la première phrase de la première réponse de cette question n'a aucun sens pour moi.
    • Ai-je bien compris ce que fait le bit setuid?
27
user1956190

Voici les réponses:

  1. root a toujours un accès complet aux fichiers et répertoires. Le propriétaire du fichier en a généralement aussi, mais ce n'est pas toujours vrai. Par exemple:

    -r-xr----- 1 user1 users 199 Oct 14 18:42 otherfile.bin
    

    user1 est le propriétaire; mais ils ne peuvent que lire et exécuter , mais root a toujours un accès complet ( rwx ) au fichier.

  2. RUID est l'ID utilisateur réel et il ne change jamais (presque). Si user2 se connecte au système, le Shell est alors lancé avec son vrai ID défini sur user2. Tous les processus qu'ils démarrent à partir du Shell hériteront de l'ID réel user2 comme véritable identifiant.

    L'EUID est l'ID utilisateur effectif , il change pour les processus (pas pour l'utilisateur) que l'utilisateur exécute qui ont défini le bit setuid .

    Si user2 exécute file.bin, le RUID sera user2 et l'EUID du processus démarré sera user1.

Prenons le cas de passwd:

-rwsr-xr-x 1 root root 45396 may 25  2012 /usr/bin/passwd
  • Quand user2 veut changer son mot de passe, ils exécutent /usr/bin/passwd.

  • Le RUID sera user2 mais l'EUID de ce processus sera root.

  • user2 peut utiliser passwd pour changer niquement son propre mot de passe car en interne passwd vérifie le RUID et, s'il n'est pas root, ses actions seront être limité au mot de passe de l'utilisateur réel.

  • Il est nécessaire que l'EUID devienne root dans le cas de passwd parce que le processus doit écrire à /etc/passwd et/ou /etc/shadow.

38
jcbermu