Comment sudo décide-t-il de demander un mot de passe, lorsqu'il reçoit une commande qui n'a pas réellement besoin de `sudo`?

10

Lors de l'application sudoà une commande qui n'a pas réellement besoin sudo,

  • parfois, il ne me demande pas mon mot de passe. Par exemple sous mon $HOME, sudo ls.

  • Mais je me souviens que c'est le cas pour une autre commande, bien que j'oublie laquelle.

Je me demandais donc comment sudodécide de demander un mot de passe, quand on me donne une commande qui n'a pas vraiment besoin sudo? Y a-t-il une règle pour le /etc/sudoersspécifier?

Mon vrai problème est que lorsque j'utilise du, il affiche parfois "permission refusée" pour certains répertoires, et parfois non, probablement parce que je n'ai pas la permission sur certains répertoires? J'applique sudoà dupeu importe, et j'ai pensé qu'on me demanderait un mot de passe, mais en fait pas dans mes propres répertoires.

Tim
la source
15
Décider si un programme serait essayer de faire quelque chose que la racine ne peut le faire, ou accéder à un fichier que l'utilisateur appelant est interdit d'accès, sans réellement en cours d' exécution du programme, est le problème d' arrêt déguisé. Vous pouvez donc être sûr que ce n'est pas ce que fait sudo.
zwol
2
+1 parce que bien que la question soit basée sur une idée fausse, les symptômes sont clairement expliqués et il y a une réponse sans ambiguïté.
dcorking

Réponses:

22

Dans une configuration typique, la commande n'est pas pertinente. Vous devez entrer votre mot de passe la première fois que vous utilisez sudo, et vous n'avez pas besoin de votre mot de passe dans ce shell particulier pendant les 15 prochaines minutes.

Du point de vue de l'ordinateur, il n'existe pas de «commande qui a besoin de sudo». Tout utilisateur peut tenter d'exécuter n'importe quelle commande. Le résultat peut n'être rien d'autre qu'un message d'erreur tel que «Autorisation refusée» ou «Aucun fichier ou répertoire», mais il est toujours possible d'exécuter la commande.

Par exemple, si vous exécutez dusur une arborescence de répertoires dont le contenu n'est pas autorisé à accéder, vous obtiendrez des erreurs d'autorisation. C'est ce que signifie «autorisation refusée». Si vous exécutez sudo du, sudo s'exécute en dutant que root, de sorte que vous n'obtenez pas d'erreurs d'autorisation (c'est le but du compte root: root¹ a toujours l'autorisation). Lorsque vous exécutez sudo du, dus'exécute en tant que root et sudon'est pas impliqué du tout après le dudémarrage. La question de savoir si du rencontre des erreurs d'autorisation n'a absolument aucun rapport avec le fonctionnement de sudo.

Il y a des commandes qui ont besoin de sudo pour faire quelque chose d'utile . L'utilité est un concept humain. Vous devez utiliser sudo (ou d'autres méthodes pour exécuter la commande en tant que root) si la commande fait quelque chose d'utile lorsqu'elle est exécutée en tant que root mais pas lorsqu'elle est exécutée sous votre compte.

Que sudo vous demande votre mot de passe dépend de deux choses.

  1. En fonction de la configuration, sudo décide si vous devez être authentifié. Par défaut, sudo nécessite un mot de passe. Cela peut être désactivé de plusieurs manières, notamment en définissant l' authenticateoption sur false et en ayant une règle applicable avec la NOPASSWDbalise.
  2. Si sudo a besoin de votre mot de passe, il peut être utile d'utiliser une valeur mise en cache. C'est correct car la raison pour laquelle sudo a besoin de votre mot de passe n'est pas d'authentifier qui l'appelle (sudo sait quel utilisateur l'a invoqué), mais de confirmer que c'est toujours vous aux commandes et pas quelqu'un qui a pris le contrôle de votre clavier. Par défaut, sudo est prêt à croire que vous êtes toujours aux commandes si vous avez entré votre mot de passe il y a moins de 15 minutes (cela peut être modifié avec l' timeoutoption). Vous devez avoir entré le mot de passe dans le même terminal (de sorte que si vous restez connecté sur un terminal, laissez ce terminal sans surveillance et utilisez un autre terminal, quelqu'un peut 'tty_tickets

¹ presque, mais cela dépasse le cadre de ce fil.

Gilles 'SO- arrête d'être méchant'
la source
Il peut y avoir des fichiers dont le bit exécutable est défini uniquement pour root, pas pour d'autres. Cela pourrait ne pas tomber "besoin de root pour s'exécuter". (Rien que de la piqûre.)
Paŭlo Ebermann
@ PaŭloEbermann J'ai écrit «tout utilisateur peut tenter d'exécuter n'importe quelle commande» pour éviter de tergiverser à propos de ce (rare) cas. Il y a toujours un pincement :(
Gilles 'SO- arrête d'être méchant'
45

sudone sait pas si la commande qu'on lui demande d'exécuter doit s'exécuter comme un autre utilisateur (généralement root), tout ce qu'il sait, c'est sa configuration. Cela détermine quels utilisateurs sont autorisés à s'exécuter sudo, avec quels utilisateurs en tant que «cibles» et pour quelles commandes; il détermine également si un mot de passe est nécessaire, lequel et s'il faut conserver un jeton d'authentification.

Si vous utilisez la configuration Debian par défaut, c'est cette dernière qui est probablement impliquée ici: sudovous demandera votre mot de passe la première fois que vous l'utiliserez dans un terminal donné, puis il conservera un jeton d'authentification pendant un certain temps. Si vous réutilisez sudodans le même terminal dans ce délai, il ne vous demandera pas de mot de passe.

Stephen Kitt
la source
Merci. Voulez-vous dire que vous sudo du /path/to/some/dirdevriez toujours avoir besoin de mon mot de passe ou jamais, peu importe /path/to/some/dir?
Tim
12
Oui. Il aura toujours besoin de votre mot de passe (ou pas). De toute évidence, s'il a besoin de votre mot de passe mais l'a déjà stocké dans le cache, il ne vous demandera pas de le saisir.
dr_
5
À strictement parler, cela peut dépendre du chemin, car il /etc/sudoerspeut spécifier des commandes et leurs arguments. Cependant, si vous n'avez rien ajouté de tel sudoers(et si vous l'avez fait, j'espère que vous en serez conscient), les arguments n'auront pas d'importance (pas plus que la commande si vous avez un accès général à root via sudo ).
Stephen Kitt
19
sudone stocke pas votre mot de passe dans le cache, seulement les informations que votre identité a déjà été vérifiée une fois avec une vérification du mot de passe. Puisqu'il sudos'agit d'un programme setuid-root, il dispose déjà de toutes les autorisations nécessaires pour exécuter quoi que ce soit en tant que personne - mais il est approuvé pour autoriser uniquement les utilisateurs à l'utiliser exactement comme spécifié dans le sudoersfichier et à rejeter toutes les autres tentatives d'utilisation. . C'est pourquoi il est important que ce programme sudosoit si petit et très bien étudié.
telcoM
6

à une commande qui n'a pas réellement besoin de sudo

Ce n'est pas qu'une commande a besoin ou n'a pas besoin de sudo. Quand tu cours

sudo -u user command

le système s'exécute en commandtant que user.

La réussite ou l'échec de l'invocation et la demande ou non d'un mot de passe dépendent de la politique de sécurité sudoers(généralement configurée dans /etc/sudoers).

dr_
la source