Comment définir le chemin des commandes sudo

37

Si j'émets

sudo my-command

comment Linux recherche- my-commandt-il cela ?

C'est my-commanddans mon CHEMIN. Je peux l'invoquer sans aucun problème. Cependant, quand je l'invoquerai avec sudo, je comprendrai command not found. Intéressant, jamais vécu cela auparavant. Comment surmonter?

EDIT: La réponse sélectionnée de ce "doublon possible" est fausse, enfin, du moins pas au point. Cette réponse, de Terdon, est la bonne.

xpt
la source

Réponses:

48

Ceci est normalement défini par l' secure_pathoption dans /etc/sudoers. De man sudoers:

 secure_path   Path used for every command run from sudo.  If you don't
               trust the people running sudo to have a sane PATH environ‐
               ment variable you may want to use this.  Another use is if
               you want to have the “root path” be separate from the “user
               path”.  Users in the group specified by the exempt_group
               option are not affected by secure_path.  This option is not
               set by default.

Pour exécuter des commandes qui ne sont pas dans la valeur par défaut $PATH, vous pouvez soit

  1. Utilisez le chemin complet: sudo ~/bin/my-command; ou

  2. Ajoutez le répertoire contenant la commande à secure_path. Exécutez sudo visudoet modifiez la ligne de chemin sécurisé:

    Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/youruser/bin/"
    

    Enregistrez le fichier et la prochaine fois que vous exécutez sudo, le répertoire ~/binsera dans son $PATH.

terdon
la source
2
Ou commentez simplement toute la ligne si ce n'est pas une machine de production et que cela nous importe peu. Ensuite, il utilisera le CHEMIN des utilisateurs. Il dit que ce n'est pas défini par défaut, mais ce n'est peut-être pas toujours vrai ...
Nagev
2

Voici ce que j'ai utilisé pour une solution de contournement:

sudo cp $(which my-command) /usr/bin
...

La whichcommande est exécutée dans un sous-shell qui n'est pas root, donc il est capable de trouver my-command, puis, sudo copie l'exécutable dans un chemin d'accès auquel l' rootutilisateur peut accéder. Pas génial pour la sécurité, mais c'était correct pour moi d'exécuter une image de docker qui était détruite juste après l'exécution de la commande.

Brenden Smith
la source