How to set path for sudo commands
This is normally set by the secure_path
option in /etc/sudoers
. From 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.
To run commands that are not in the default $PATH
, you can either
Use the full path:
sudo ~/bin/my-command
; orAdd the directory containing the command to
secure_path
. Runsudo visudo
and edit the secure path line:Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/youruser/bin/"
Save the file and next time you run
sudo
, the directory~/bin
will be in its$PATH
.
This is what I used for a workaround:
sudo cp $(which my-command) /usr/bin
...
The which
command is executed in a subshell that is non-root, so it is able to find my-command
, then, sudo copies the executable to a path that the root
user can access. Not great for security, but it was ok for me running a docker image that was being destroyed right after the command was run.