web-dev-qa-db-fra.com

Comment définir le chemin pour les commandes Sudo

Si je publie

Sudo my-command

à quoi ressemble Linux pour ce my-command?

Le my-command est dans mon chemin. Je peux l'invoquer sans aucun problème. Cependant, quand je l'invoque avec Sudo, j'obtiens command not found. Intéressant, ne jamais expérimenter cela avant. Comment surmonter?

EDIT: La réponse choisie par "doublon possible" est fausse, du moins pas au point . Cette réponse, de terdon, est la bonne.

30
xpt

Ceci est normalement défini par l'option secure_path 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 le $PATH par défaut, 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 visudo et modifiez la ligne du 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écuterez Sudo, le répertoire ~/bin sera dans son $PATH.

40
terdon

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

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

La commande which est exécutée dans un sous-shell non root. Elle est donc capable de trouver my-command. Sudo copie ensuite l'exécutable dans un chemin d'accès accessible à l'utilisateur root. Pas génial pour la sécurité, mais je pouvais exécuter une image de menu fixe en cours de destruction juste après l'exécution de la commande.

2
Brenden Smith