Esto normalmente lo establece el secure_path
opción en /etc/sudoers
. Desde 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.
Para ejecutar comandos que no están en el $PATH
predeterminado , puedes
-
Usa la ruta completa:
sudo ~/bin/my-command
; o -
Agregue el directorio que contiene el comando a
secure_path
. Ejecutarsudo visudo
y edite la línea de ruta segura:Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/youruser/bin/"
Guarde el archivo y la próxima vez que ejecute
sudo
, el directorio~/bin
estará en su$PATH
.
Esto es lo que usé para una solución alternativa:
sudo cp $(which my-command) /usr/bin
...
El which
el comando se ejecuta en una subcapa que no es raíz, por lo que puede encontrar my-command
, luego, sudo copia el ejecutable a una ruta que el root
el usuario puede acceder. No es muy bueno para la seguridad, pero estuvo bien para mí ejecutar una imagen acoplable que se estaba destruyendo justo después de ejecutar el comando.