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.
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:
Utilisez le chemin complet: Sudo ~/bin/my-command
; ou
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
.
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.