Questo è normalmente impostato da secure_path
opzione in /etc/sudoers
. Da 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.
Per eseguire comandi che non sono nel $PATH
predefinito , puoi farlo
-
Usa il percorso completo:
sudo ~/bin/my-command
; o -
Aggiungi la directory contenente il comando a
secure_path
. Eseguisudo visudo
e modifica la riga del percorso sicuro:Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/youruser/bin/"
Salva il file e la prossima volta esegui
sudo
, la directory~/bin
sarà nel suo$PATH
.
Questo è quello che ho usato per una soluzione alternativa:
sudo cp $(which my-command) /usr/bin
...
Il which
Il comando viene eseguito in una subshell che non è root, quindi è in grado di trovare my-command
, quindi, sudo copia l'eseguibile in un percorso che è root
l'utente può accedere. Non eccezionale per la sicurezza, ma per me andava bene eseguire un'immagine docker che veniva distrutta subito dopo l'esecuzione del comando.