Quel mot de passe utilisateur demande `sudo`?

10
$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul  4  2017 /usr/bin/sudo

sudoest donc exécutable par n'importe quel utilisateur, et tout utilisateur qui exécute sudoaura root comme ID utilisateur effectif du processus car le bit set-user-id de /usr/bin/sudoest 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.

  1. Quel mot de passe utilisateur sudodemande-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?

  2. Est-il correct de sudodemander le mot de passe après execve() début de l'exécution main()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.

Tim
la source
3
Ce n'est pas n'importe quel utilisateur, mais seulement ceux inclus dans la liste sudoers.
Rodrigo
1
@Rodrigo Cela ressemble à une réponse, mettez-le dans une réponse et non un commentaire.
Philip Kendall
2
@PhilipKendall Cela n'a répondu qu'à une partie des doutes du PO.
Rodrigo

Réponses:

22
  1. Dans sa configuration la plus courante, sudodemande 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'objectif sudoest d'accorder des privilèges supplémentaires à des utilisateurs spécifiques (tels que déterminés par la configuration dans sudoers), 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écution sudoest 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 pour sudo, généralement en utilisant PAM - donc cela pourrait impliquer une empreinte digitale, ou à deux facteurs authentification, etc.).

    sudon'accorde pas nécessairement le droit de devenir root, il peut accorder une variété de privilèges. Tout utilisateur autorisé à devenir root sudoerspeut le faire en utilisant uniquement sa propre authentification; mais un utilisateur non autorisé à, ne peut pas (au moins, pas en utilisant sudo). Cela n'est pas appliqué par Linux lui-même, mais par sudo(et sa configuration d'authentification).

  2. sudodemande 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 de sudodemander 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).

Stephen Kitt
la source
12

sudodemande généralement le mot de passe de l'utilisateur qui l'exécute, bien qu'il puisse être configuré :

Contrairement à su(1), lorsque sudoersrequiert une authentification, il valide les informations d'identification de l'utilisateur appelant, et non les informations d'identification de l'utilisateur cible (ou de la racine). Ceci peut être changé par les rootpw, targetpwet les runaspwdrapeaux, décrits plus loin.

Le paramètre rootpwa sudotoujours demandé le mot de passe root, targetpwdemande le mot de passe de l'utilisateur sudoexécutera éventuellement le programme en tant que, et runaspwdemande le mot de passe de l'utilisateur défini dansrunas_default .

Une sudoconfiguration binaire comme celle-ci peut en effet être démarrée avec le privilège root par n'importe quel utilisateur. En supposant sudoqu'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.

ilkkachu
la source
8

À partir des premières lignes de man sudo:

DESCRIPTION
sudo permet à un utilisateur autorisé d'exécuter une commande en tant que superutilisateur ou autre utilisateur, comme spécifié par la politique de sécurité. L'ID utilisateur réel (non effectif) de l'utilisateur appelant est utilisé pour déterminer le nom d'utilisateur avec lequel interroger la politique de sécurité.

Donc:

  1. L'ID utilisateur réel (non efficace) de l'utilisateur appelant est utilisé ...
  2. 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.

  3. 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:

DESCRIPTION
setresuid () définit l'ID utilisateur réel, l'ID utilisateur effectif et l'ID utilisateur set enregistré du processus appelant.

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

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

Isaac
la source
-1

En plus d'autres bonnes réponses sur sudo:

suvous 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) utiliser sudo. Si je veux utiliser sudo, je peux utiliser supour "devenir" l'utilisateur administrateur, puis dans ce rôle utiliser sudo. Dans cette situation, je finis par entrer le mot de passe du compte administrateur deux fois - une fois lorsque je cours suet une fois lorsque je cours sudo.

Stephen R
la source