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:
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
?Voici les réponses:
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.
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
.