Dies wird normalerweise durch den secure_path gesetzt Option in /etc/sudoers . Ab 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.
Um Befehle auszuführen, die nicht im Standard $PATH sind , können Sie entweder
-
Verwenden Sie den vollständigen Pfad:
sudo ~/bin/my-command; oder -
Fügen Sie das Verzeichnis, das den Befehl enthält, zu
secure_pathhinzu . Führen Siesudo visudoaus und bearbeiten Sie die sichere Pfadzeile:Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/youruser/bin/"Speichern Sie die Datei und führen Sie beim nächsten Mal
sudoaus , das Verzeichnis~/binwird in seinem$PATHsein .
Dies ist, was ich für eine Problemumgehung verwendet habe:
sudo cp $(which my-command) /usr/bin
...
Die which Der Befehl wird in einer Nicht-Root-Subshell ausgeführt, sodass er my-command finden kann , dann kopiert sudo die ausführbare Datei in einen Pfad, der root Benutzer zugreifen kann. Nicht gut für die Sicherheit, aber es war in Ordnung für mich, ein Docker-Image auszuführen, das direkt nach der Ausführung des Befehls zerstört wurde.