Ceci est normalement défini par le secure_path
option dans /etc/sudoers
. À partir du 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 -
Ajouter le répertoire contenant la commande à
secure_path
. Exécutezsudo 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é comme solution de contournement :
sudo cp $(which my-command) /usr/bin
...
Le which
La commande est exécutée dans un sous-shell qui n'est pas root, elle est donc capable de trouver my-command
, puis, sudo copie l'exécutable dans un chemin que le root
l'utilisateur peut accéder. Pas génial pour la sécurité, mais ça me convenait d'exécuter une image docker qui était détruite juste après l'exécution de la commande.