$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul 4 2017 /usr/bin/sudo
sudo
est donc exécutable par n'importe quel utilisateur, et tout utilisateur qui exécute sudo
aura root comme ID utilisateur effectif du processus car le bit set-user-id de /usr/bin/sudo
est défini.
De https://unix.stackexchange.com/a/11287/674
la différence la plus visible entre sudo et su est que sudo nécessite le mot de passe de l'utilisateur et su requiert le mot de passe root.
Quel mot de passe utilisateur
sudo
demande-t-il? Est-ce l'utilisateur représenté par l'ID utilisateur réel du processus?Si oui, aucun utilisateur ne peut obtenir le privilège de superutilisateur en exécutant
sudo
puis en fournissant son propre mot de passe? Linux peut-il restreindre cela à certains utilisateurs?Est-il correct de
sudo
demander le mot de passe aprèsexecve()
début de l'exécutionmain()
de/usr/bin/sudo
?Étant donné que l'euid du processus a été changé en root (car le bit set-user-id de / usr / bin / sudo est défini), à quoi sert sudo de demander un mot de passe plus tard?
Merci.
J'ai lu https://unix.stackexchange.com/a/80350/674 , mais il ne répond pas aux questions ci-dessus.
Réponses:
Dans sa configuration la plus courante,
sudo
demande le mot de passe de l'utilisateur en cours d' exécutionsudo
(comme vous le dites, l'utilisateur correspondant à l'ID utilisateur réel du processus). L'objectifsudo
est d'accorder des privilèges supplémentaires à des utilisateurs spécifiques (tels que déterminés par la configuration danssudoers
), sans que ces utilisateurs n'aient à fournir une autre authentification que la leur. Cependant,sudo
ne contrôle que l'utilisateur en cours d' exécutionsudo
est vraiment qui ils prétendent être, et il le fait en leur demandant leur mot de passe (ou tout autre mécanisme d' authentification est mis en place poursudo
, généralement en utilisant PAM - donc cela pourrait impliquer une empreinte digitale, ou à deux facteurs authentification, etc.).sudo
n'accorde pas nécessairement le droit de devenir root, il peut accorder une variété de privilèges. Tout utilisateur autorisé à devenir rootsudoers
peut le faire en utilisant uniquement sa propre authentification; mais un utilisateur non autorisé à, ne peut pas (au moins, pas en utilisantsudo
). Cela n'est pas appliqué par Linux lui-même, mais parsudo
(et sa configuration d'authentification).sudo
demande en effet le mot de passe après son démarrage; il ne peut pas faire autrement ( c'est- à- dire qu'il ne peut rien faire avant qu'il ne démarre). Le point desudo
demander le mot de passe, même s'il est root, est de vérifier l'identité de l'utilisateur en cours d'exécution (dans sa configuration typique).la source
sudo
demande généralement le mot de passe de l'utilisateur qui l'exécute, bien qu'il puisse être configuré :Le paramètre
rootpw
asudo
toujours demandé le mot de passe root,targetpw
demande le mot de passe de l'utilisateursudo
exécutera éventuellement le programme en tant que, etrunaspw
demande le mot de passe de l'utilisateur défini dansrunas_default
.Une
sudo
configuration binaire comme celle-ci peut en effet être démarrée avec le privilège root par n'importe quel utilisateur. En supposantsudo
qu'il n'y ait pas de bogues avec son code d'authentification, cela en soi n'aura pas beaucoup d'importance.De façon assez similaire, tout processus peut également exécuter du code en mode noyau, en appelant n'importe quel appel système, par exemple
open()
. (ce n'est pas la même chose que le code de l'espace utilisateur en tant que root.) Tant que le noyau n'a pas de bogues, il ne pourra pas exécuter de code arbitraire.la source
À partir des premières lignes de
man sudo
:Donc:
Oui, tout utilisateur ( autorisé ) peut obtenir le ou les privilèges supplémentaires du superutilisateur (ou d'autres) en exécutant sudo, puis en fournissant l' authentification ( configurée ) requise. Les deux autorisés et configurés sont définis dans les fichiers sudoers.
Linux peut-il restreindre cela à certains utilisateurs?
Oui, c'est possible, mais ce n'est pas le cas. Linux est configuré pour permettre au binaire sudo de prendre la décision en fonction de l'ensemble de règles (politique de sécurité) à l'intérieur du programme sudo et à l'intérieur du fichier
/etc/sudoers
. Habituellement, d'autres fichiers (également / à la place) peuvent être utilisés.De
man setresuid
:La seule façon d'obtenir les autorisations de superutilisateur accordées par le noyau est d'exécuter un programme suid. Il ne peut en être autrement. C'est la façon dont Linux a choisi d'accorder des autorisations de superutilisateur.
Une fois que le noyau a chargé un exécutable qui ne peut être modifié par aucun autre utilisateur (fichier et répertoire appartenant à root et accessibles en écriture uniquement par root), l'exécutable lui-même (sudo) authentifie l'utilisateur en lui demandant son mot de passe (ou quelque chose d'autre comme configuré) et décide si et quelles autorisations accorder.
la source
En plus d'autres bonnes réponses sur
sudo
:su
vous permet de devenir effectivement un utilisateur différent. Sur mon propre ordinateur, je ne fonctionne pas en tant qu'administrateur pour une utilisation quotidienne - ce qui signifie, entre autres, que je ne peux pas (directement) utilisersudo
. Si je veux utilisersudo
, je peux utilisersu
pour "devenir" l'utilisateur administrateur, puis dans ce rôle utilisersudo
. Dans cette situation, je finis par entrer le mot de passe du compte administrateur deux fois - une fois lorsque je courssu
et une fois lorsque je courssudo
.la source